É possível usar o Google Adsense assíncrono, ou seja, sem bloqueio?


Respostas:


6

faz isso:

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

consulte este item de blog " Google Ads Async (assíncrono) " basicamente encontrei uma maneira de fazer com que o código do anúncio fosse realmente assíncrono.


1
+1 para a solução inteligente fornecida no link. É muito interessante a maneira como ele faz backup do padrão document.write functione o restaura mais tarde. A única desvantagem é que eu estou querendo saber se o TOS do Google Adsense permite fazer esse tipo de coisa?
Marco Demaio 12/08

+1 para a ideia, eu a pego e a faço funcionar um pouco melhor e posto aqui. Não consigo fazer esse GS_googleAddAdSenseService funcionar com a outra ideia.
Aristos #

5

Sim, existe uma maneira - usando iframes. Fazemos carregamento assíncrono do conteúdo do anúncio em um dos sites de nossos clientes.

Primeiro, você deve entrar em contato com o Google para obter suporte para seus anúncios em iframes (que não estavam amplamente disponíveis quando criamos esse site). Você pode usar o JavaScript para acionar o carregamento do conteúdo do iframe do AdSense, que é o que fazemos.

A solução é realmente simples quando você tem o suporte a iframe do Google.

Editar: Parece - nas postagens mencionadas pela Virtuosi Media - essa prática pode não ser bem-vinda pelo Google ...

Edit 2: Este é o código que usamos no iframe. Experimente para ver se funciona, talvez mesmo sem pedir especificamente ao Google suporte. Removido type="text/javascript" language="JavaScript"para melhor legibilidade:

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

Preenchemos todos os nossos espaços por meio de IDs de anúncios, portanto não estamos vendo nenhum PSA.


1
Você pode fornecer mais detalhes sobre como entrar em contato com o Google sobre isso? Não vejo nada sobre isso na minha conta do AdSense.
Virtuosi Media

Além disso, ficaria curioso para saber se os blocos de anúncios ainda exibem anúncios relevantes ou apenas PSAs e como você resolveu esse problema.
Virtuosi Media

Na verdade, preenchemos todos os nossos espaços por meio de IDs de anúncios, portanto não estamos vendo nenhum PSA.
Oliver

ao usar esse método, recebo o erro GA_googleFillSlotWithSize não está definido
Timo Huovinen

@YuriKolovsky: parece que o script do Google não está carregando corretamente. Veja meu Edit 2: talvez você precise se inscrever para esse método no Google.
Oliver

2

No momento, eles não oferecem a opção, até onde posso ver. Sua melhor opção, se isso fosse permitido pelos Termos de Serviço do Google, teria sido usar um elemento de espaço reservado e substituí-lo dinamicamente por JavaScript após o carregamento da página. No entanto, parece que pode ser contra os Termos de Serviço. Veja este tópico para mais detalhes.


2

Você pode usar um espaço reservado, chamar o código do Adsense e alternar o espaço reservado com o anúncio. Estou usando algo parecido com isto no meu site:

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

O Google até recomenda isso quando dizem que você deve ter sua posição de anúncio mais importante primeiro no seu código HTML. Se você deseja conseguir isso, precisará usar JS ou CSS para mover blocos de anúncios menos importantes para o topo (visual) da sua página.

Mas, tanto quanto eu sei, o AdSense já processa anúncios de forma assíncrona. Eu raramente vi isso bloquear o carregamento de páginas. Não tenho certeza sobre isso embora.


0

Como o google diz "vamos acelerar a web", altero o código acima para carregar os anúncios do google somente quando estão visíveis. O código funciona "como está" apenas para um anúncio do Google Place, mas acho que você pode modificá-lo facilmente para mais anúncios. Os diferentes com o outro código são

  • Carregue anúncios apenas se estiverem visíveis para o usuário
  • Carrega anúncios e os coloca em uma div (não no final da página)
  • Funciona com todos os navegadores porque carrego todos os itens necessários (não apenas o primeiro)

Começando com o divque eu coloco os anúncios mais tarde.

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

Eu testei e, trabalhando com todos os navegadores, apenas uso o jQuery para ser mais seguro do que evitar navegadores difíceis.

ps, eu criei um código semelhante para carregar o google plus, o facebook e todos os itens carregados sem motivo na maioria das vezes.


0

Não há mais necessidade de fazer isso. Os show_ads.js do Google AdSense agora são um tanto assíncronos. Você pode ler mais sobre os detalhes sangrentos no blog oficial:

Sua Web, meio segundo antes

Não há necessidade de alterar o código do anúncio.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.