非同期のGoogle AdSense、つまり非ブロッキングを使用することは可能ですか?


回答:


6

これはそれを行います:

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

このブログアイテム「Google Ads Async(asynchronous)」を参照してください。基本的に、広告コードを完全に非同期に実行する方法を見つけました。


1
リンクで提供されるスマートソリューションの+1。標準document.write functionをバックアップして後で復元する方法は非常に興味深いです。唯一の欠点は、Google Adsense TOSがこの種のことを許可するかどうか疑問に思っていることです。
Marco Demaio 2011

アイデアの+1、私はそれを受け取り、少しうまく機能させて、ここに投稿します。このGS_googleAddAdSenseServiceを他のアイデアと連動させることができません。
アリストス2012年

5

はい、方法があります-iframeを使用します。お客様のサイトの1つで広告コンテンツの非同期読み込みを行います。

iframeでの広告のサポートについては、最初にGoogleに連絡する必要があります(このサイトを作成した当時はあまり利用できませんでした)。次に、JavaScriptを使用して、AdSense iframeコンテンツの読み込みをトリガーできます。

Googleのiframeをサポートすれば、ソリューションは本当に簡単です。

編集:のように見えます-Virtuosi Mediaによって参照される投稿から-この実践はGoogleによって歓迎されないかもしれません...

編集2: これは、iframeで使用するコードです。Googleにサポートを依頼しなくても、うまくいくかどうか試してみてください。type="text/javascript" language="JavaScript"読みやすくするために削除:

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

すべてのスロットをadslot IDで埋めるため、PSAは表示されません。


1
これについてGoogleに連絡する際の詳細を教えてください。AdSenseアカウントに何も表示されません。
Virtuosi Media

また、広告ユニットが関連性のある広告を配信するのか、PSAのみを配信するのか、そしてその問題をどのように回避したのか知りたいです。
Virtuosi Media

実際には、adslot IDを通じてすべてのスロットを埋めるため、PSAは表示されません。
オリバー

このメソッドを使用すると、GA_googleFillSlotWithSize is not definedエラーが発生します
Timo Huovinen

@YuriKolovsky:Googleのスクリプトが正しく読み込まれていないようです。私の編集2を参照してください。Googleでこの方法を申請する必要があるかもしれません。
オリバー

2

私が見る限り、彼らは現在オプションを提供していません。Google TOSで許可されている場合、最良のオプションは、プレースホルダー要素を使用し、ページが読み込まれた後に動的にJavaScriptに置き換えることです。ただし、TOSに違反しているように見えます。詳細については、このスレッドを参照してください。


2

プレースホルダーを使用してAdSenseコードを呼び出し、プレースホルダーを広告に切り替えることができます。私のサイトでは次のようなものを使用しています:

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

Googleは、HTMLコードで最も重要な広告の位置を最初にする必要があると彼らが言った場合にも、これを行うことを推奨しています。それを実現したい場合は、JSまたはCSSを使用して、重要度の低い広告ユニットをページの(視覚的な)上部に移動する必要があります。

しかし、私の知る限り、AdSenseはすでに広告を非同期でレンダリングしています。ページローディングをブロックすることはほとんどありません。これについてはよくわかりません。


0

グーグルは「レッツがウェブをより速くする」と言うので、それらが見えるときだけグーグル広告をロードするように上のコードを変更します。コードは1つのGoogleプレイス広告でのみ「現状のまま」機能しますが、他の広告でも簡単に変更できると思います。他のコードとの違いは

  • ユーザーに表示される場合にのみ広告を読み込みます
  • 広告を読み込み、divに配置します(ページの最後ではありません)
  • (最初のものだけでなく)必要なすべてのアイテムをロードするため、すべてのブラウザーで動作します

div後で広告を配置することから始めます。

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

私はそれをテストし、すべてのブラウザーで作業しています。ブラウザーを回避するのが難しいので、jQueryを使用してより安全にするだけです。

PS、私はグーグルプラスをロードするための同様のコードと、ほとんどの場合理由なしでロードされるFacebookとそのすべてのアイテムを作成しました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.