Bagaimana cara menampilkan atau memblokir iklan Adsense yang dipersonalisasi berdasarkan persetujuan untuk IAB TCF v2.0 dengan Quantcast Choice?

Aug 16 2020

Saya telah memilih Quantcast Choice sebagai platform manajemen persetujuan untuk situs web saya. Namun dengan solusi dasar mereka, iklan Google Adsense tetap ditayangkan kepada pengunjung sebelum mereka memberikan persetujuan mereka kepada vendor terkait (Google). Sejak 2 hari ada pemberitahuan di Adsense yang mengkonfirmasikan masalah ini dan setelah masa tenggang 90 hari tidak ada iklan yang akan ditayangkan lagi. Pesan kesalahan: " 2.1a: Tag atau SDK tidak menerima string TC karena status CMP adalah stub, memuat, atau error. "

Saya sama sekali tidak terbiasa dengan skrip, tetapi tampaknya saya harus menggunakan beberapa agar Quantcast Choice benar-benar berfungsi. Pada dasarnya saya perlu tahu cara:

  • tidak menayangkan iklan Google apa pun sebelum pengunjung menyetujui Google
  • menayangkan iklan yang dipersonalisasi setelah persetujuan
  • menayangkan iklan yang tidak dipersonalisasi setelah tidak ada persetujuan

Apa yang telah saya pelajari sejauh ini:

Sebelum persetujuan pengunjung, saya dapat menambahkan skrip ini ke kode Google Adsense saya untuk tidak menampilkan iklan apa pun:

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

Tidak ada masalah sejauh ini. Namun kemudian saya harus dapat mengetahui apakah pengunjung telah memberikan persetujuan untuk vendor Google. ID vendor Google di TCF v2.0 adalah 755. Saya menemukan campuran kode dan teks berikut di salah satu halaman Quantcast, tetapi saya tidak tahu cara menggunakannya. Haruskah saya meletakkan ini di halaman web saya dalam skrip Quantcast Choice atau ...? (sumber ditautkan di bawah)

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

Jadi jika ID 755 ditemukan, saya harus menghubungi:

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

dan jika ID 755 tidak ditemukan, saya harus menghubungi:

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

Tapi bagaimana saya melakukan "panggilan" ini?

Jadi saya rasa saya mengerti langkah-langkah yang harus diikuti, hanya saja saya tidak tahu bagaimana menerapkan langkah-langkah ini dan menghubungkan titik-titiknya. Bantuan apa pun akan sangat dihargai!

Sumber yang saya gunakan:

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

Contoh situs web yang sepertinya melakukan apa yang ingin saya capai: carscoops.com

Jawaban

3 quick Sep 18 2020 at 07:52

Saya akan merekomendasikan solusi yang jauh lebih sederhana. Dengan TCF 2.0 Anda tidak perlu mengkonfigurasi parameter Adsense secara manual (iklan yang dipersonalisasi, dll.) Berdasarkan persetujuan yang diberikan. Anda hanya perlu menjamin, Anda mulai memuat iklan setelah persetujuan berhasil dimuat. Perpustakaan Adsense membaca string persetujuan secara otomatis dan menampilkan iklan sesuai dengan persetujuan yang diberikan.

Contoh kode untuk integrasi Quantcast Choices dengan 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

Hanya untuk membantu semua orang memahami, Kesalahan 2.1a Google IAB TCF v2 kemungkinan besar disebabkan oleh Tag Produk Iklan Google yang ditambahkan ke situs web sebelum izin pengguna ditetapkan / ditetapkan. Ini adalah video singkat yang menunjukkan perilaku yang diharapkan, iklan tidak dimuat sampai pengguna memberikan persetujuan. Jika Anda melihat iklan dimuat di latar belakang sebelum pengguna memilih persetujuan mereka, maka Anda mendapatkan kesalahan 2.1a karena Anda menambahkan tag Google tanpa menunggu persetujuan.

Solusi untuk ini akan bervariasi tergantung pada bagaimana Anda menambahkan tag Produk Periklanan Google ke situs Anda tetapi semoga informasi di bawah ini dan contoh Adsense membantu.

Google Tag Manager

Jika Anda menggunakan Google Pengelola Tag untuk menambahkan Pilihan dan tag Google ke situs Anda, Anda dapat menggunakan panduan di sini https://help.quantcast.com/hc/en-us/articles/360051794434 dan https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking sebagai referensi.

Contoh Khusus Adsense

Mengambil contoh dari https://support.google.com/adsense/answer/9042142 Saya percaya ini adalah bagaimana Anda perlu mengerjakan ulang contoh untuk menunggu sinyal persetujuan yang tepat dari Quantcast Choice TCF v2.0.

Saya belum memiliki kesempatan untuk menguji ini sepenuhnya, jadi beri tahu saya jika Anda memiliki masalah dengan kode dan saya akan memperbarui contohnya.

LIHAT DI BAWAH BLOK KODE INI UNTUK VERSI YANG DIPERBARUI

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

Sunting: Versi Diperbarui Baru Ditambahkan (Agustus 18)


Ini mungkin versi yang lebih baik dari yang di atas. Ini lagi-lagi belum teruji, jadi silakan uji dan berikan umpan balik jika Anda mengalami masalah. Perbedaan utama dengan versi yang diperbarui ini adalah:
  1. Kami tidak lagi memeriksa tcData.purpose.consents [3] dan tcData.purpose.consents [4] sebagai gantinya kami mengandalkan Google untuk memutuskan antara menampilkan iklan yang dipersonalisasi atau tidak.

  2. Kami tidak menambahkan https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.jske halaman sampai kami memiliki persetujuan, mencegah cookie yang tidak diinginkan ditambahkan sampai kami yakin kami memiliki persetujuan untuk melakukannya. Ini juga memungkinkan kami untuk menghapus (adsbygoogle = window.adsbygoogle || []). PauseAdRequests = 1; item juga

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