¿Es posible utilizar Google Adsense asíncrono, es decir, sin bloqueo?

Respuestas:

6

esto lo hace:

<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> 

vea este artículo del blog " Google Ads Async (asíncrono) " básicamente he encontrado una manera de hacer que el código del anuncio se ejecute realmente asíncrono.

FigmentEngine
fuente
1
+1 para la solución inteligente proporcionada en el enlace. Es muy interesante la forma en que hace una copia de seguridad del estándar document.write functiony lo restaura más tarde. El único inconveniente es que me pregunto si Google Adsense TOS permite hacer este tipo de cosas.
Marco Demaio
+1 para la idea, lo tomo y lo hago funcionar un poco mejor y lo publico aquí. No logro hacer que este GS_googleAddAdSenseService funcione con la otra idea.
Aristos
5

Sí, hay una manera: usar iframes. Hacemos carga asincrónica de contenido publicitario en uno de los sitios de nuestros clientes.

Primero debe ponerse en contacto con Google para obtener soporte de sus anuncios en iframes (que no estaba ampliamente disponible cuando creamos ese sitio). Luego puede usar JavaScript para activar la carga del contenido del iframe de AdSense, que es lo que hacemos.

La solución es realmente sencilla una vez que tenga el soporte de iframe de Google.

Editar: Parece que, de las publicaciones a las que hace referencia Virtuosi Media, esta práctica podría no ser bienvenida por Google ...

Edición 2: este es el código que usamos en el iframe. Pruébalo para ver si funciona, tal vez incluso sin pedirle ayuda específicamente a Google. Eliminado type="text/javascript" language="JavaScript"para una mejor legibilidad:

<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>

Llenamos todos nuestros espacios a través de los ID de adslot, por lo que no vemos ningún anuncio de servicio público.

Oliver
fuente
1
¿Puede proporcionar más detalles sobre cómo contactar a Google sobre esto? No veo nada al respecto en mi cuenta de AdSense.
Virtuosi Media
Además, me gustaría saber si los bloques de anuncios aún entregan anuncios relevantes o solo anuncios de servicio público y cómo resolvió ese problema.
Virtuosi Media
En realidad, llenamos todos nuestros espacios a través de ID de adslot, por lo que no vemos ningún anuncio de servicio público.
Oliver
cuando uso este método, obtengo el error GA_googleFillSlotWithSize no está definido
Timo Huovinen
@YuriKolovsky: parece que el script de Google no se carga correctamente. Vea mi Edición 2: es posible que deba solicitar este método con Google.
Oliver
2

Actualmente no ofrecen la opción, por lo que puedo ver. Su mejor opción, si lo permitieran los TOS de Google, habría sido usar un elemento de marcador de posición y reemplazarlo dinámicamente con JavaScript después de que la página se haya cargado. Sin embargo, parece que puede estar en contra de los TOS. Vea este hilo para más detalles.

Virtuosi Media
fuente
2

Puede usar un marcador de posición, llamar al código de Adsense y luego cambiar el marcador de posición con el anuncio. Estoy usando algo como esto en mi sitio:

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

Google incluso recomienda hacer esto cuando dicen que debe tener su posición de anuncio más importante primero en su código HTML. Si desea lograrlo, tendrá que usar JS o CSS para mover los bloques de anuncios menos importantes a la parte superior (visual) de su página.

Pero hasta donde yo sé, AdSense ya presenta anuncios de forma asincrónica. Muy raramente lo he visto bloquear la carga de páginas. Aunque no estoy seguro de esto.


fuente
0

Debido a que Google dice "hagamos que la web sea más rápida", cambio el código anterior para cargar los anuncios de Google solo cuando están visibles. El código funciona "tal cual" solo para un anuncio de Google Place, pero creo que puede modificarlo fácilmente para obtener más anuncios. Los diferentes con el otro código son

  • Cargue anuncios solo si están visibles para el usuario
  • Carga anuncios y los coloca en un div (no al final de la página)
  • Funciona con todos los navegadores porque cargo todos los elementos necesarios (no solo el primero)

Comenzando con el divque coloco los anuncios más adelante.

<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>

Lo he probado y trabajando con todos los navegadores, solo uso jQuery para estar más seguro y evitar navegadores difíciles.

PD, he creado un código similar para cargar el google plus, y el facebook y todos los elementos que se cargan sin razón la mayoría de las veces.

Aristos
fuente
0

No hay más necesidad de hacer esto. El show_ads.js de Google AdSense ahora es algo asíncrono. Puedes leer más sobre los detalles sangrientos en el blog oficial:

Tu web, medio segundo antes

No hay necesidad de cambiar el código del anuncio.

Salman A
fuente