QuantcastChoiceを使用したIABTCF v2.0の同意に基づいて、パーソナライズされたAdSense広告を表示またはブロックする方法は?

Aug 16 2020

Webサイトの同意管理プラットフォームとしてQuantcastChoiceを選択しました。ただし、基本的なソリューションでは、Google Adsense広告は、訪問者が関連ベンダー(Google)に同意する前に引き続き配信されます。2日以降、AdSenseにこの問題を確認する通知があり、90日の猶予期間が過ぎると、広告は配信されなくなります。エラーメッセージ:「2.1a:CMPステータスがスタブ、ロード、またはエラーであるため、タグまたはSDKがTC文字列を受信して​​いません。

私はスクリプトにまったく精通していませんが、QuantcastChoiceを実際に機能させるにはスクリプトを使用する必要があるようです。基本的に私は方法を知る必要があります:

  • 訪問者がGoogleに同意する前にGoogle広告を配信しない
  • 同意後にパーソナライズされた広告を配信する
  • 同意なしにパーソナライズされていない広告を配信する

私がこれまでに学んだこと:

訪問者の同意の前に、このスクリプトをGoogle Adsenseコードに追加して、広告を表示しないようにすることができます。

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

今のところ問題ありません。ただし、訪問者がベンダーのGoogleに同意したかどうかを知ることができるはずです。TCF v2.0でのGoogleのベンダーIDは755です。Quantcastページの1つで次のコードとテキストの混合物を見つけましたが、これを使用する方法がわかりません。これをQuantcastChoiceスクリプト内のWebページに配置する必要がありますか...?(以下にリンクされているソース)

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

したがって、ID 755が見つかった場合は、次のように呼び出す必要があります。

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

ID 755が見つからない場合は、次の電話番号に電話する必要があります。

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

しかし、どうすればこれらの「呼び出し」を行うことができますか?

だから私は従うべきステップを理解していると思います、それは私がこれらのステップを実装してドットを接続する方法がわからないということだけです。どんな助けでも大歓迎です!

私が使用したソース:

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

私が達成したいことをしているように見えるウェブサイトの例:carscoops.com

回答

3 quick Sep 18 2020 at 07:52

はるかに簡単な解決策をお勧めします。TCF 2.0では、指定された同意に基づいてAdSenseパラメーター(パーソナライズされた広告など)を手動で構成する必要はありません。同意が正常に読み込まれた後、広告の読み込みを開始することを保証する必要があります。AdSenseライブラリは、同意文字列を自動的に読み取り、指定された同意に従って広告を表示します。

Quantcast Choicesを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

誰もが理解できるように、2.1a Google IAB TCF v2エラーは、ユーザーの同意が設定/確立される前にGoogle Advertise ProductTagsがWebサイトに追加されたことが原因である可能性があります。これは予想される動作を示す短い動画で、ユーザーが同意するまで広告が読み込まれません。ユーザーが同意を選択する前にバックグラウンドで広告が読み込まれている場合は、同意を待たずにGoogleタグを追加しているため、2.1aエラーが発生します。

これに対する解決策は、Google Advertising Productタグをサイトに追加する方法によって異なりますが、以下の情報とAdSenseの例が役立つことを願っています。

Googleタグマネージャー

Googleタグマネージャーを使用してChoiceタグとGoogleタグをサイトに追加している場合は、こちらのガイドを使用できます https://help.quantcast.com/hc/en-us/articles/360051794434 そして https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking 参考として。

AdSenseの具体例

から例を取る https://support.google.com/adsense/answer/9042142 これが、Quantcast Choice TCFv2.0からの適切な同意シグナルを待つために例を作り直す必要がある方法だと思います。

これを完全にテストする機会がなかったので、コードに問題がある場合はお知らせください。例を更新します。

更新されたバージョンについては、このコードブロックの下を参照してください

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

編集:新しい更新バージョンが追加されました(8月18日)


これは上記よりも良いバージョンかもしれません。これもテストされていないため、問題が発生した場合はテストしてフィードバックを送信してください。この更新されたバージョンとの主な違いは次のとおりです。
  1. tcData.purpose.consents [3]とtcData.purpose.consents [4]をチェックしなくなりました。代わりに、パーソナライズされた広告を表示するかどうかをGoogleに依存しています。

  2. 追加しません https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js同意が得られるまでページに移動し、同意が得られるまで不要なCookieが追加されないようにします。これにより、(adsbygoogle = window.adsbygoogle || [])。pauseAdRequests = 1;を削除することもできました。アイテムも

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