Làm cách nào để hiển thị hoặc chặn quảng cáo Adsense được cá nhân hóa dựa trên sự đồng ý đối với IAB TCF v2.0 với Quantcast Choice?

Aug 16 2020

Tôi đã chọn Quantcast Choice làm nền tảng quản lý sự đồng ý cho trang web của mình. Tuy nhiên, với giải pháp cơ bản của họ, quảng cáo Google Adsense vẫn được phục vụ cho khách truy cập trước khi họ đồng ý cho nhà cung cấp liên quan (Google). Kể từ 2 ngày, có một thông báo trong Adsense xác nhận vấn đề này và sau thời gian gia hạn 90 ngày sẽ không có quảng cáo nào được phân phát nữa. Thông báo lỗi: " 2.1a: Thẻ hoặc SDK không nhận được chuỗi CTV do trạng thái CMP là sơ khai, đang tải hoặc lỗi. "

Tôi không quen thuộc với các script, nhưng có vẻ như tôi phải sử dụng một số để làm cho Quantcast Choice thực sự hoạt động. Về cơ bản, tôi cần biết cách:

  • không phân phát bất kỳ quảng cáo nào của Google trước khi khách truy cập đồng ý với Google
  • phân phát quảng cáo được cá nhân hóa sau khi được sự đồng ý
  • phân phát quảng cáo không được cá nhân hóa sau khi không có sự đồng ý

Những gì tôi đã học được cho đến nay:

Trước khi có sự đồng ý của khách truy cập, tôi có thể thêm tập lệnh này vào mã Google Adsense của mình để không hiển thị bất kỳ quảng cáo nào:

<script>(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1;</script>

Không có vấn đề gì cho đến nay. Tuy nhiên, sau đó tôi có thể biết liệu khách truy cập có đồng ý cho nhà cung cấp Google hay không. ID nhà cung cấp của Google trong TCF v2.0 là 755. Tôi đã tìm thấy hỗn hợp mã và văn bản sau trên một trong các trang Quantcast, nhưng tôi không biết cách sử dụng mã này. Tôi có nên đặt điều này trên các trang web của mình trong tập lệnh Quantcast Choice hay ...? (nguồn liên kết bên dưới)

{{QC - __cmpConsents.iabVendorConsentIds}} matches the regular expression (^|,)755(,|$).

Vì vậy, nếu ID 755 được tìm thấy, tôi nên gọi:

(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=0

và nếu ID 755 không được tìm thấy, tôi nên gọi:

(adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1
(adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=0

Nhưng làm cách nào để thực hiện những "cuộc gọi" này?

Vì vậy, tôi nghĩ rằng tôi đã hiểu các bước để làm theo, chỉ là tôi không biết làm thế nào để thực hiện các bước này và kết nối các dấu chấm. Bất kì sự trợ giúp nào đều được đánh giá cao!

Các nguồn tôi đã sử dụng:

  • https://support.google.com/adsense/answer/9042142
  • https://help.quantcast.com/hc/en-us/articles/360051794434

Ví dụ về một trang web dường như làm được những gì tôi muốn đạt được: Carscoops.com

Trả lời

3 quick Sep 18 2020 at 07:52

Tôi muốn giới thiệu một giải pháp đơn giản hơn nhiều. Với TCF 2.0, bạn không phải định cấu hình thủ công các thông số Adsense (quảng cáo được cá nhân hóa, v.v.) dựa trên sự đồng ý nhất định. Bạn chỉ cần đảm bảo rằng, bạn bắt đầu tải quảng cáo sau khi tải thành công sự đồng ý. Thư viện Adsense tự động đọc các chuỗi đồng ý và hiển thị quảng cáo theo sự đồng ý nhất định.

Mã ví dụ để tích hợp Lựa chọn Quantcast với Adsense:

<!-- Quantcast Choice. Consent Manager Tag v2.0 (for TCF 2.0) -->
...
<!-- End Quantcast Choice. Consent Manager Tag v2.0 (for TCF 2.0) -->

<script>
__tcfapi('addEventListener', 2, function(tcData, success) {
    if (success) {
        if (tcData.eventStatus == 'useractioncomplete' || tcData.eventStatus == 'tcloaded') {
            var hasStoreOnDeviceConsent = tcData.purpose.consents[1] || false;

            if (hasStoreOnDeviceConsent) {
                var adsbygoogle_script = document.createElement('script');
                adsbygoogle_script.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
                document.head.appendChild(adsbygoogle_script);
            }
        }
    }
});
</script>
2 RyanBaron Aug 17 2020 at 17:04

Chỉ để giúp mọi người hiểu, Lỗi 2.1a Google IAB TCF v2 có thể do Thẻ sản phẩm quảng cáo của Google được thêm vào trang web trước khi có sự đồng ý của người dùng. Đây là một đoạn video ngắn thể hiện hành vi mong đợi, quảng cáo không tải cho đến khi người dùng đồng ý. Nếu bạn thấy quảng cáo tải trong nền trước khi người dùng chọn sự đồng ý của họ thì bạn đang gặp phải lỗi 2.1a vì bạn đang thêm thẻ Google mà không đợi sự đồng ý.

Giải pháp cho điều này sẽ khác nhau tùy thuộc vào cách bạn thêm thẻ Sản phẩm Quảng cáo của Google vào trang web của mình nhưng hy vọng thông tin dưới đây và ví dụ Adsense sẽ giúp ích.

Trình quản lý thẻ của Google

Nếu bạn đang sử dụng Trình quản lý thẻ của Google để thêm thẻ Choice và Google vào trang web của mình, bạn có thể sử dụng hướng dẫn tại đây https://help.quantcast.com/hc/en-us/articles/360051794434 và https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking như tài liệu tham khảo.

Ví dụ cụ thể về Adsense

Lấy ví dụ từ https://support.google.com/adsense/answer/9042142 Tôi tin rằng đây là cách bạn cần phải làm lại ví dụ để đợi tín hiệu đồng ý thích hợp từ Quantcast Choice TCF v2.0.

Tôi chưa có cơ hội để kiểm tra hoàn toàn điều này, vì vậy vui lòng cho tôi biết nếu bạn có bất kỳ vấn đề nào với mã và tôi sẽ cập nhật ví dụ.

XEM DƯỚI ĐÂY KHỐI MÃ NÀY ĐỂ BIẾT MỘT SỐ CẬP NHẬT

<html>
  <head>
    <title>Your site title</title>
  </head>
  <body>

    <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <script>
      // Initially pause adsbygoogle (wait for consent to unpause)
      (adsbygoogle=window.adsbygoogle||[]).pauseAdRequests=1;
    </script>

    <script>
      ( function() {
        // Run this in an interval (every 0.1s) just in case we are still waiting for consent
        var cnt = 0;
        var consentSetInterval = setInterval(function(){
          cnt += 1;

          // Bail if we have not gotten a consent response after 60 seconds.
          if( cnt === 600 )
            clearInterval(consentSetInterval);

          if( typeof window.__tcfapi !== 'undefined' ) { // Check if window.__tcfapi has been set
            clearInterval( consentSetInterval );

            window.__tcfapi( 'addEventListener', 2, function( tcData,listenerSuccess ) {
              if ( listenerSuccess ) {
                if( tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete' ) {
                  if ( ! tcData.gdprApplies ) {

                    // GDPR DOES NOT APPLY, UnpauseAdRequests

                    // Set request non-personalized ads to false as GDPR does not apply.
                    (adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=0;

                    // Unpause ads, as GDPR does not apply.
                    (adsbygoogle = window.adsbygoogle || []).pauseAdRequests=0;

                  }
                  else {

                    // GDPR DOES APPLY

                    // Purpose 1 refers to the storage and/or access of information on a device.
                    var hasDeviceStorageAndAccessConsent = tcData.purpose.consents[1] || false;

                    // Google Requires Consent for Purpose 1
                    if (hasDeviceStorageAndAccessConsent) {
                      // GLOBAL VENDOR LIST - https://iabeurope.eu/vendor-list-tcf-v2-0/
                      // CHECK FOR GOOGLE ADVERTISING PRODUCTS CONSENT. (IAB Vendor ID 755)
                      var hasGoogleAdvertisingProductsConsent = tcData.vendor.consents[755] || false;

                      // Check if the user gave Google Advertising Products consent (iab vendor 755)
                      if(hasGoogleAdvertisingProductsConsent) {
                        var hasPersonalizedProfileConsent = tcData.purpose.consents[3] || false;
                        var hasPersonalizedAdsConsent = tcData.purpose.consents[4] || false;

                        // Check if have add personalization consent Purpose 3 and 4
                        if( hasPersonalizedAdsConsent && hasPersonalizedProfileConsent ) {
                          // Set request non-personalized ads to false.
                          (adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=0;
                        }
                        else {
                          // Set request non-personalized ads to true.
                          (adsbygoogle=window.adsbygoogle||[]).requestNonPersonalizedAds=1;
                        }

                        // Unpause ads , the user has granted consent for purpose 1 and given google consent.
                        (adsbygoogle = window.adsbygoogle || []).pauseAdRequests=0;
                      }
                    }
                  }
                }
              }
            } );
          }
          cnt++;
        }, 100);
      })();
    </script>

    <!-- One test unit for GDPR -->
    <ins class="adsbygoogle"
         style="display:inline-block;width:970px;height:250px"
         data-ad-client="ca-pubxxx"
         data-ad-slot="slot_id">
    </ins>

    <!-- Another test unit for GDPR -->
    <ins class="adsbygoogle"
         style="display:inline-block;width:250px;height:250px"
         data-ad-client="ca-pubxxx"
         data-ad-slot="slot_id">
    </ins>

    <script>
      // This will trigger the ad request if ads were unpaused in the CMP consent check above.
      (adsbygoogle = window.adsbygoogle || []).push({});
    </script>

  </body>
</html>

Chỉnh sửa: Đã thêm phiên bản cập nhật mới (ngày 18 tháng 8)


Đây có thể là một phiên bản tốt hơn phiên bản trên. Điều này một lần nữa chưa được kiểm tra, vì vậy hãy kiểm tra và đưa ra phản hồi nếu bạn gặp sự cố. Sự khác biệt chính với phiên bản cập nhật này là:
  1. Chúng tôi không còn kiểm tra tcData.purpose.consents [3] và tcData.purpose.consents [4] thay vào đó chúng tôi dựa vào google để quyết định giữa hiển thị quảng cáo được cá nhân hóa hay không.

  2. Chúng tôi không thêm https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.jsvào trang cho đến khi chúng tôi có sự đồng ý, ngăn chặn bất kỳ cookie không mong muốn nào được thêm vào cho đến khi chúng tôi chắc chắn rằng chúng tôi đã đồng ý làm như vậy. Điều này cũng cho phép chúng tôi xóa (adsbygoogle = window.adsbygoogle || []). PauseAdRequests = 1; các mặt hàng cũng vậy

  <html>
    <head>
      <title>Your site title</title>
    </head>
    <body>
      <script>
        ( function() {
          var insertAdsByGoogleJs = function() {
            var element = document.createElement('script');
            var firstScript = document.getElementsByTagName('script')[0];
            var url = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js";
            element.async = true;
            element.type = 'text/javascript';
            element.src = url;
            firstScript.parentNode.insertBefore(element, firstScript);
          };
          // Run this in an interval (every 0.1s) just in case we are still waiting for consent
          var cnt = 0;
          var consentSetInterval = setInterval(function(){
            cnt += 1;
            // Bail if we have not gotten a consent response after 60 seconds.
            if( cnt === 600 )
              clearInterval(consentSetInterval);
            if( typeof window.__tcfapi !== 'undefined' ) { // Check if window.__tcfapi has been set
              clearInterval( consentSetInterval );
              window.__tcfapi( 'addEventListener', 2, function( tcData,listenerSuccess ) {
                if ( listenerSuccess ) {
                  if( tcData.eventStatus === 'tcloaded' || tcData.eventStatus === 'useractioncomplete' ) {
                    if ( ! tcData.gdprApplies ) {
                      // GDPR DOES NOT APPLY
                      // Insert adsbygoogle.js onto the page.
                      insertAdsByGoogleJs();
                    }
                    else {
                      // GDPR DOES APPLY
                      // Purpose 1 refers to the storage and/or access of information on a device.
                      var hasDeviceStorageAndAccessConsent = tcData.purpose.consents[1] || false;
                      // Google Requires Consent for Purpose 1
                      if (hasDeviceStorageAndAccessConsent) {
                        // GLOBAL VENDOR LIST - https://iabeurope.eu/vendor-list-tcf-v2-0/
                        // CHECK FOR GOOGLE ADVERTISING PRODUCTS CONSENT. (IAB Vendor ID 755)
                        var hasGoogleAdvertisingProductsConsent = tcData.vendor.consents[755] || false;
                        // Check if the user gave Google Advertising Products consent (iab vendor 755)
                        if(hasGoogleAdvertisingProductsConsent) {
                          // Insert adsbygoogle.js onto the page.
                          insertAdsByGoogleJs();
                        }
                      }
                    }
                  }
                }
              } );
            }
            cnt++;
          }, 100);
        })();
      </script>
      <!-- One test unit for GDPR -->
      <ins class="adsbygoogle"
           style="display:inline-block;width:970px;height:250px"
           data-ad-client="ca-pubxxx"
           data-ad-slot="slot_id">
      </ins>
      <!-- Another test unit for GDPR -->
      <ins class="adsbygoogle"
           style="display:inline-block;width:250px;height:250px"
           data-ad-client="ca-pubxxx"
           data-ad-slot="slot_id">
      </ins>
      <script>
        // This will trigger the ad request if ads were unpaused in the CMP consent check above.
        (adsbygoogle = window.adsbygoogle || []).push({});
      </script>
    </body>
  </html>