Ist es möglich, asynchrones Google Adsense zu verwenden, dh nicht zu blockieren?

Antworten:

6

das macht es:

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

Siehe diesen Blog-Artikel " Google Ads Async (asynchronous) ". Im Grunde habe ich einen Weg gefunden, den Anzeigencode so zu gestalten, dass er wirklich asynchron ausgeführt wird.

FigmentEngine
quelle
1
+1 für die im Link bereitgestellte intelligente Lösung. Es ist sehr interessant, wie der Standard document.write functiongesichert und später wiederhergestellt wird. Der einzige Nachteil ist, dass ich mich frage, ob Google Adsense TOS solche Dinge zulässt.
Marco Demaio
+1 für die Idee, ich nehme es und lasse es ein bisschen besser funktionieren und poste es hier. Ich kann diesen GS_googleAddAdSenseService nicht mit der anderen Idee zum Laufen bringen.
Aristos
5

Ja, es gibt einen Weg - Iframes zu verwenden. Wir laden Anzeigeninhalte asynchron auf einer der Websites unserer Kunden.

Sie müssen sich zuerst an Google wenden, um Unterstützung für deren Anzeigen in Iframes zu erhalten (die bei der Erstellung dieser Website noch nicht allgemein verfügbar waren). Sie können dann JavaScript verwenden, um das Laden des AdSense-Iframe-Inhalts auszulösen. Dies tun wir.

Die Lösung ist wirklich einfach, sobald Sie die iframe-Unterstützung von Google haben.

Bearbeiten: Aus den von Virtuosi Media referenzierten Beiträgen geht hervor, dass diese Vorgehensweise von Google möglicherweise nicht begrüßt wird ...

Edit 2: Dies ist der Code, den wir im iframe verwenden. Probieren Sie es aus, um zu sehen, ob es funktioniert, vielleicht sogar ohne Google ausdrücklich um Unterstützung zu bitten. Zur type="text/javascript" language="JavaScript"besseren Lesbarkeit entfernt:

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

Wir füllen alle unsere Slots mit Adslot-IDs, sodass wir keine Haftklebemassen sehen.

Oliver
quelle
1
Können Sie weitere Informationen zur Kontaktaufnahme mit Google geben? In meinem AdSense-Konto wird nichts darüber angezeigt.
Virtuosi Media
Außerdem wäre ich gespannt, ob die Anzeigenblöcke noch relevante Anzeigen oder nur PSAs liefern und wie Sie dieses Problem umgangen haben.
Virtuosi Media
Tatsächlich füllen wir alle unsere Slots mit Adslot-IDs, sodass wir keine Haftklebemassen sehen.
Oliver
Bei Verwendung dieser Methode erhalte ich GA_googleFillSlotWithSize ist kein Fehler definiert
Timo Huovinen
@YuriKolovsky: Es sieht so aus, als würde Googles Skript nicht richtig geladen. Siehe meine Bearbeitung 2: Möglicherweise müssen Sie diese Methode bei Google beantragen.
Oliver
2

Sie bieten derzeit keine Option an, soweit ich sehen kann. Wenn dies nach den Nutzungsbedingungen von Google zulässig wäre, hätten Sie am besten ein Platzhalterelement verwendet und es nach dem Laden der Seite dynamisch durch JavaScript ersetzt. Es scheint jedoch, als ob es gegen die AGB sein könnte. Weitere Informationen finden Sie in diesem Thread .

Virtuosi Media
quelle
2

Sie können einen Platzhalter verwenden, den Adsense-Code aufrufen und dann den Platzhalter mit der Anzeige wechseln. Ich verwende so etwas auf meiner Website:

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

Google empfiehlt dies sogar, wenn angegeben wird, dass Sie Ihre wichtigste Anzeigenposition zuerst in Ihrem HTML-Code haben sollten. Wenn Sie dies erreichen möchten, müssen Sie JS oder CSS verwenden, um weniger wichtige Anzeigenblöcke an den (visuellen) oberen Rand Ihrer Seite zu verschieben.

Soweit ich weiß, rendert AdSense Anzeigen jedoch bereits asynchron. Ich habe nur sehr selten gesehen, wie es das Seitenladen blockiert. Ich bin mir jedoch nicht sicher.


quelle
0

Da Google sagt "Lasst uns das Web schneller machen", ändere ich den obigen Code, um die Google-Anzeigen nur dann zu laden, wenn sie sichtbar sind. Der Code funktioniert "wie er ist" nur für eine Google Place-Anzeige, aber ich denke, Sie können ihn für weitere Anzeigen einfach ändern. Die Unterschiede mit dem anderen Code sind

  • Anzeigen werden nur geladen, wenn sie für den Nutzer sichtbar sind
  • Lädt Anzeigen und platziert sie auf einem Div (nicht am Ende der Seite)
  • Funktioniert mit allen Browsern, da ich alle benötigten Elemente lade (nicht nur die ersten).

Beginnend mit dem, divdass ich die Anzeigen später platziere.

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

Ich habe es getestet und arbeite mit allen Browsern. Ich benutze nur jQuery, um sicherer zu sein, dass ich Browser nur schwer vermeiden kann.

ps, ich habe ähnlichen Code zum Laden von Google Plus und Facebook und all den Elementen erstellt, die die meiste Zeit ohne Grund geladen werden.

Aristos
quelle
0

Es besteht keine weitere Notwendigkeit, dies zu tun. Die show_ads.js von Google AdSense sind jetzt etwas asynchron. Weitere Informationen zu den wichtigsten Details finden Sie im offiziellen Blog:

Ihr Web, eine halbe Sekunde früher

Der Anzeigencode muss nicht geändert werden.

Salman A.
quelle