비동기 Google 애드 센스 (예 : 비 차단)를 사용할 수 있습니까?


답변:


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 (비동기) "를 참조하십시오. 기본적으로 광고 코드가 실제로 비동기로 실행되도록하는 방법을 찾았습니다.


1
링크에서 제공되는 스마트 솔루션의 경우 +1 표준을 백업하고 document.write function나중에 복원 하는 방식이 매우 흥미 롭습니다 . 유일한 단점은 Google Adsense TOS가 이러한 종류의 작업을 허용하는지 궁금합니다.
Marco Demaio

아이디어 +1, 나는 그것을 가지고 조금 더 잘 작동하게 만들고 여기에 게시하십시오. 이 GS_googleAddAdSenseService를 다른 아이디어와 함께 사용할 수 없습니다.
Aristos

5

예, iframe을 사용하는 방법이 있습니다. 고객 사이트 중 하나에 광고 콘텐츠를 비동기식으로로드합니다.

먼저 iframe에서 광고를 지원하려면 Google에 문의해야합니다 (Google에서 해당 사이트를 구축 할 때 널리 사용되지 않았 음). 그런 다음 자바 스크립트를 사용하여 애드 센스 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에 문의하는 데 대한 자세한 정보를 제공 할 수 있습니까? 애드 센스 계정에 관련 내용이 없습니다.
Virtuosi Media

또한 광고 단위가 여전히 관련성있는 광고 나 PSA 만 제공하는지 그리고 해당 문제를 해결 한 방법을 알고 싶습니다.
Virtuosi Media

실제로, 우리는 adslot id를 통해 모든 슬롯을 채우므로 PSA가 보이지 않습니다.
Oliver

이 방법을 사용할 때, 나는 GA_googleFillSlotWithSize 정의되지 않은 오류가
티모 Huovinen

@YuriKolovsky : Google 스크립트가 제대로로드되지 않은 것 같습니다. 내 편집 2 참조 : Google 에서이 방법을 신청해야 할 수도 있습니다.
Oliver

2

그들은 내가 볼 수있는 한 현재 옵션을 제공하지 않습니다. Google TOS에서 허용 한 경우 가장 좋은 방법은 자리 표시 자 요소를 사용하여 페이지가로드 된 후 JavaScript로 동적으로 대체하는 것입니다. 그러나 TOS에 위배되는 것처럼 보입니다. 자세한 내용은 이 스레드 를 참조하십시오.


2

자리 표시자를 사용하고 애드 센스 코드를 호출 한 다음 자리 표시자를 광고로 전환 할 수 있습니다. 내 사이트에서 다음과 같은 것을 사용하고 있습니다.

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

HTML 코드에서 가장 중요한 광고 게재 순위를 가져야한다고 말하는 경우에도이 작업을 수행하는 것이 좋습니다. 그렇게하려면 JS 또는 CSS를 사용하여 덜 중요한 광고 단위를 페이지의 (시각적) 맨 위로 이동해야합니다.

그러나 내가 아는 한 애드 센스는 이미 광고를 비동기 적으로 렌더링합니다. 페이지로드를 차단하는 경우는 거의 없습니다. 그래도 확실하지 않습니다.


0

구글은 "웹을 더 빠르게 만든다"고 말하기 때문에 구글 광고가 보일 때만로드되도록 위의 코드를 변경한다. 이 코드는 하나의 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를 사용합니다.

추신 : 나는 구글 플러스, 페이스 북 및 대부분의 이유없이로드되는 모든 항목을로드하는 비슷한 코드를 만들었습니다.


0

더 이상이 작업을 수행 할 필요가 없습니다. Google 애드 센스의 show_ads.js는 이제 다소 비동기 적입니다. 공식 블로그에서 gory 세부 사항에 대해 자세히 읽을 수 있습니다.

당신의 웹, 반 초 빨리

광고 코드를 변경할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.