Có thể sử dụng google adsense không đồng bộ, tức là không chặn?


Câu trả lời:


6

cái này làm được

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

xem mục blog này "Đồng bộ hóa quảng cáo Google (không đồng bộ) " về cơ bản tôi đã tìm được cách để mã quảng cáo chạy thực sự không đồng bộ ..


1
+1 cho giải pháp thông minh được cung cấp trong liên kết. Thật thú vị khi cách nó sao lưu tiêu chuẩn document.write functionvà khôi phục nó sau này. Nhược điểm duy nhất là tôi đang tự hỏi liệu Google Adsense TOS có cho phép thực hiện loại công cụ này không?
Marco Demaio

+1 cho ý tưởng, tôi lấy nó và làm cho nó hoạt động tốt hơn một chút và đăng nó ở đây. Tôi không thể làm cho GS_googleAddAdSenseService này hoạt động với ý tưởng khác.
Aristos

5

Vâng, có một cách - sử dụng iframe. Chúng tôi tải nội dung quảng cáo không đồng bộ trên một trong các trang web của khách hàng.

Trước tiên, bạn phải liên hệ với Google để được hỗ trợ về quảng cáo của họ trong iframe (vốn không có sẵn rộng rãi khi chúng tôi xây dựng trang web đó). Sau đó, bạn có thể sử dụng JavaScript để kích hoạt tải nội dung iframe AdSense, đây là những gì chúng tôi làm.

Giải pháp thực sự rất đơn giản khi bạn có hỗ trợ iframe của Google.

Chỉnh sửa: Có vẻ như - từ các bài đăng được tham chiếu bởi Virtuosi Media - thực tế này có thể không được Google chào đón ...

Chỉnh sửa 2: Đây là mã chúng tôi sử dụng trong iframe. Hãy dùng thử để xem nó có hoạt động không, thậm chí có thể không yêu cầu Google hỗ trợ. Xóa type="text/javascript" language="JavaScript"để dễ đọc hơn:

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

Chúng tôi điền vào tất cả các vị trí của mình thông qua id quảng cáo, vì vậy chúng tôi không thấy bất kỳ PSA nào.


1
Bạn có thể cung cấp thêm chi tiết về việc liên hệ với Google về điều này? Tôi không thấy gì về nó trong tài khoản AdSense của mình.
Truyền thông Virtuosi

Ngoài ra, tôi tò mò muốn biết liệu các đơn vị quảng cáo vẫn phân phối quảng cáo có liên quan hay chỉ PSA và cách bạn giải quyết vấn đề đó.
Truyền thông Virtuosi

Trên thực tế, chúng tôi điền vào tất cả các vị trí của mình thông qua id adslot, vì vậy chúng tôi không thấy bất kỳ PSA nào.
Oliver

Khi sử dụng phương pháp này, tôi nhận được GA_googleFillSlotWithSize không được xác định lỗi
Timo Huovinen

@YuriKolovsky: có vẻ như tập lệnh của Google không tải đúng cách. Xem Chỉnh sửa 2 của tôi: bạn có thể cần phải áp dụng phương pháp này với Google.
Oliver

2

Họ hiện không cung cấp tùy chọn, theo như tôi có thể thấy. Tùy chọn tốt nhất của bạn, nếu được Google Tosh cho phép, sẽ là sử dụng phần tử giữ chỗ và thay thế nó một cách linh hoạt bằng JavaScript sau khi trang được tải. Tuy nhiên, nó xuất hiện như thể nó có thể chống lại ĐKDV. Xem chủ đề này để biết thêm chi tiết.


2

Bạn có thể sử dụng trình giữ chỗ, gọi mã Adsense và sau đó chuyển đổi trình giữ chỗ với quảng cáo. Tôi đang sử dụng một cái gì đó như thế này trên trang web của tôi:

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

Google thậm chí còn khuyên bạn nên làm điều này khi họ nói rằng bạn nên có vị trí quảng cáo quan trọng nhất trước tiên trong mã HTML của mình. Nếu bạn muốn thực hiện điều đó, bạn sẽ phải sử dụng JS hoặc CSS để di chuyển các đơn vị quảng cáo ít quan trọng hơn lên đầu (trực quan) trên trang của bạn.

Nhưng theo như tôi biết thì AdSense đã kết xuất quảng cáo không đồng bộ. Tôi chỉ rất hiếm khi thấy nó chặn tải. Không chắc chắn về điều này mặc dù.


0

Bởi vì google nói "cho phép làm cho web nhanh hơn", tôi thay đổi mã ở trên để tải quảng cáo google chỉ khi chúng hiển thị. Mã này chỉ hoạt động "như hiện tại" cho một quảng cáo địa điểm google, nhưng tôi nghĩ bạn có thể dễ dàng sửa đổi nó cho nhiều quảng cáo hơn. Khác với các mã khác là

  • Chỉ tải quảng cáo nếu người dùng hiển thị
  • Tải quảng cáo và đặt chúng trên div (không phải ở cuối trang)
  • Hoạt động với tất cả các trình duyệt vì tôi tải tất cả các mục cần thiết (không chỉ đầu tiên)

Bắt đầu với việc divtôi đặt quảng cáo sau này.

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

Tôi đã thử nghiệm nó và làm việc với tất cả các trình duyệt, tôi chỉ sử dụng jQuery để an toàn hơn mà tôi tránh được các trình duyệt khó khăn.

ps, tôi đã tạo mã tương tự để tải google plus và facebook và tất cả các mục tải với lý do hầu hết thời gian.


0

Không cần phải làm điều này nữa. Show_ads.js của Google AdSense hiện không đồng bộ. Bạn có thể đọc thêm về các thông tin chi tiết trên blog chính thức:

Web của bạn, sớm hơn nửa giây

Không cần thay đổi mã quảng cáo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.