Est-il possible d'utiliser Google Adsense asynchrone, c'est-à-dire non bloquant?

Réponses:

6

cela fait:

<script type="text/javascript"><!--
// dynamically Load Ads out-of-band
setTimeout((function ()
{
    // placeholder for ads
        var eleAds = document.createElement("ads");  
        // dynamic script element
        var eleScript = document.createElement("script");  
        // remember the implementation of document.write function
        w = document.write;
        // override and replace with our version
        document.write = (function(params)
        {
        // replace our placeholder with real ads
        eleAds.innerHTML = params;
        // put the old implementation back in place
        // Aristos, add this check because called more than ones
        //  and ends, with this symbol.
        if(params.indexOf("</ins>") != -1)
            document.write=w;
        });
        // setup the ads script element
        eleScript.setAttribute("type", "text/javascript");
        eleScript.setAttribute("src", "http://pagead2.googlesyndication.com/pagead/show_ads.js");
        // add the two elements, causing the ads script to run
        document.body.appendChild(eleAds);              
        document.body.appendChild(eleScript);           
}), 1);
                //-->
        </script> 

voir cet article de blog " Google Ads Async (asynchrone) ", fondamentalement, j'ai trouvé un moyen de faire en sorte que le code d'annonce soit vraiment asynchrone.

FigmentMoteur
la source
1
+1 pour la solution intelligente fournie dans le lien. C'est très intéressant la façon dont il sauvegarde la norme document.write functionet la restaure plus tard. Le seul inconvénient est que je me demande si les TOS Google Adsense permettent de faire ce genre de choses?
Marco Demaio
+1 pour l'idée, je la prends et la fais fonctionner un peu mieux et la poste ici. Je n'arrive pas à faire fonctionner ce GS_googleAddAdSenseService avec l'autre idée.
Aristos
5

Oui, il existe un moyen - en utilisant des iframes. Nous effectuons le chargement asynchrone du contenu publicitaire sur l'un des sites de nos clients.

Vous devez d'abord contacter Google pour le support de leurs annonces dans les iframes (qui n'étaient pas largement disponibles lorsque nous avons créé ce site). Vous pouvez ensuite utiliser JavaScript pour déclencher le chargement du contenu iframe AdSense, ce que nous faisons.

La solution est vraiment simple une fois que vous disposez du support iframe de Google.

Edit: On dirait - d'après les articles référencés par Virtuosi Media - cette pratique pourrait ne pas être la bienvenue de Google ...

Edit 2: C'est le code que nous utilisons dans l'iframe. Essayez-le pour voir si cela fonctionne, peut-être même sans demander spécifiquement de l'aide à Google. Supprimé type="text/javascript" language="JavaScript"pour une meilleure lisibilité:

<head runat="server">
    <script src="http://partner.googleadservices.com/gampad/google_service.js">
    </script>

    <script>
        GS_googleAddAdSenseService("ca-pub-YOURKEY");
        GS_googleEnableAllServices();
    </script>

    <!-- For this method, it is not necessary to define the slots in advance 
         and we do not use the FetchAds function -->
    <script>
        GA_googleUseIframeRendering(true);    //<%-- This indicates iframe rendering for all slots --%>
    </script>
</head>
<body>
    <form id="formAd" runat="server">
        <div>
            <script>
                GA_googleFillSlotWithSize("ca-pub-YOURKEY", "AdSlotId",
                                          iframeWidth, iframeHeight);
            </script>
        </div>
    </form>
</body>

Nous remplissons tous nos emplacements via des identifiants d'annonces, nous ne voyons donc aucun message d'intérêt public.

Oliver
la source
1
Pouvez-vous fournir plus de détails sur la façon de contacter Google à ce sujet? Je ne vois rien à ce sujet dans mon compte AdSense.
Virtuosi Media
De plus, je serais curieux de savoir si les blocs d'annonces diffusent toujours des annonces pertinentes ou uniquement des PSA et comment vous avez résolu ce problème.
Virtuosi Media
En fait, nous remplissons tous nos emplacements via des identifiants d'annonces, nous ne voyons donc aucun message d'intérêt public.
Oliver
lorsque j'utilise cette méthode, j'obtiens GA_googleFillSlotWithSize n'est pas une erreur définie
Timo Huovinen
@YuriKolovsky: il semble que le script de Google ne se charge pas correctement. Voir mon Edit 2: vous devrez peut-être appliquer cette méthode avec Google.
Oliver
2

Pour le moment, ils n'offrent pas cette option. Votre meilleure option, si elle avait été autorisée par Google TOS, aurait été d'utiliser un élément d'espace réservé et de le remplacer dynamiquement par JavaScript après le chargement de la page. Cependant, il semble que ce soit contre le TOS. Voir ce fil pour plus de détails.

Virtuosi Media
la source
2

Vous pouvez utiliser un espace réservé, appeler le code Adsense, puis basculer l'espace réservé avec l'annonce. J'utilise quelque chose comme ça sur mon site:

if ( ad1 = document.getElementById('ad-top') )
{
    ad2 = document.getElementById('banner_tmp468');
    ad1.appendChild(ad2);
    ad2.style.display = 'block';
}

Google recommande même de le faire quand ils disent que vous devez avoir la position de votre annonce la plus importante en premier dans votre code HTML. Si vous voulez accomplir cela, vous devrez utiliser JS ou CSS pour déplacer des blocs d'annonces moins importants vers le haut (visuel) de votre page.

Mais pour autant que je sache, AdSense affiche déjà les annonces de manière asynchrone. Je ne l'ai que très rarement vu bloquer le chargement de pages. Pas sûr cependant.


la source
0

Parce que Google dit "permet de rendre le Web plus rapide", je modifie le code ci-dessus pour charger les annonces Google uniquement lorsqu'elles sont visibles. Le code fonctionne tel quel pour une seule annonce Google Adresses, mais je pense que vous pouvez facilement le modifier pour plus d'annonces. Les différents avec l'autre code sont

  • Charger des annonces uniquement si elles sont visibles par l'utilisateur
  • Charge les annonces et les place sur une div (pas à la fin de la page)
  • Fonctionne avec tous les navigateurs car je charge tous les éléments nécessaires (pas seulement le premier)

En commençant par divque je place les annonces plus tard.

<div id="adSpot" ></div>

<script type="text/javascript">
    // load the script with cache
    function getScriptCcd(url, callback)
    {
        jQuery.ajax({
                type: "GET",
                url: url,
                success: callback,
                dataType: "script",
                cache: true
        });
    };

    // to unbind the scroll I keep the total binds of scroll
    // in this example I have only one.
    var cPosaScrollExo = 0;
    // bind the scrool to monitor if ads are visible    
    function addThisScroll(RunThisFunction)
    {
        jQuery(window).scroll(RunThisFunction);
        cPosaScrollExo++;
    }
    // unbind all scroll if all they not needed any more
    function unBindScroll()
    {
        cPosaScrollExo--;

        if(cPosaScrollExo <= 0)
        {
            cPosaScrollExo = 0;
            jQuery(window).unbind('scroll');
        }
    }

    // here I check if the element is visible to the user with a 100pixel advanced.
    function isScrolledOnMatia(pioSimio) 
    {
        var SimioPouTheloNaFenete = (jQuery(pioSimio).offset().top - 100 );
        var scrollPosition = jQuery(window).height() + jQuery(window).scrollTop();

        return (scrollPosition >= SimioPouTheloNaFenete );
    }   

    // the ads informations
    google_ad_client = "pub-XXXXXXXXXXXXXXX";
    google_ad_slot = "XXXXX";
    google_ad_width = 468;
    google_ad_height = 60;

    var GoogleIsVisible = false;
    // we call this function on every window scroll
    function CheckAdsVisibility()
    {
        if(!GoogleIsVisible)
        {
            if(isScrolledOnMatia("#adSpot"))
            {
                unBindScroll();
                GoogleIsVisible = true;

                            // finally I go to show the ads
                LoadAdsLater();
            }
        }
    }

    // here is a modification of the function that load the ads
    function LoadAdsLater()
    {
        try
        {
                    // Aristos: nice trick here 
            // remember the implementation of document.write function
            w = document.write;

            // override and replace with our version
            document.write = (function(params)
            {
                jQuery("#adSpot").append(params);

                // put the old implementation back in place when
                            //  all writes are finish
                if(params.indexOf("</ins>") != -1)
                    document.write=w;
            });             

            // loading script
            getScriptCcd("http://pagead2.googlesyndication.com/pagead/show_ads.js");
        }
        catch(e)
        {
            // check for errors on debug
        }
    }

    // and here we setup the hole thin
    jQuery(document).ready(function() 
    {       
            // check if all ready is visible !
        CheckAdsVisibility();
            // bind the scroll
        addThisScroll(CheckAdsVisibility);
    });
</script>

Je l'ai testé et travaillant avec tous les navigateurs, j'utilise juste jQuery pour être plus sûr que je suis éviter les navigateurs difficiles.

ps, j'ai fait un code similaire pour charger le google plus, et le facebook et tous les éléments qui se chargent sans raison la plupart du temps.

Aristos
la source
0

Il n'est plus nécessaire de le faire. Le show_ads.js de Google AdSense est désormais quelque peu asynchrone. Vous pouvez en savoir plus sur les détails sanglants sur le blog officiel:

Votre Web, une demi-seconde plus tôt

Il n'est pas nécessaire de modifier le code d'annonce.

Salman A
la source