Wie kann ich personalisierte Adsense-Anzeigen basierend auf der Zustimmung zu IAB TCF v2.0 mit Quantcast Choice anzeigen oder blockieren?

Aug 16 2020

Ich habe Quantcast Choice als Einwilligungsverwaltungsplattform für meine Website ausgewählt. Mit ihrer Basislösung werden Google Adsense-Anzeigen jedoch weiterhin an Besucher geliefert, bevor sie ihre Zustimmung für den entsprechenden Anbieter (Google) erteilen. Seit 2 Tagen gibt es in Adsense einen Hinweis, der dieses Problem bestätigt. Nach einer Nachfrist von 90 Tagen werden keine Anzeigen mehr geschaltet. Die Fehlermeldung: " 2.1a: Das Tag oder SDK empfängt keine TC-Zeichenfolge, da der CMP-Status Stub, Laden oder Fehler ist. "

Ich bin überhaupt nicht mit Skripten vertraut, aber es scheint, dass ich einige verwenden muss, damit Quantcast Choice tatsächlich funktioniert. Grundsätzlich muss ich wissen, wie man:

  • Schalten Sie keine Google-Anzeigen, bevor ein Besucher Google zustimmt
  • Schalten Sie nach Zustimmung personalisierte Anzeigen
  • Nicht personalisierte Anzeigen ohne Zustimmung schalten

Was ich bisher gelernt habe:

Vor der Zustimmung eines Besuchers kann ich dieses Skript zu meinem Google Adsense-Code hinzufügen, um keine Anzeigen zu schalten:

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

Bisher kein Problem. Dann sollte ich jedoch wissen können, ob ein Besucher dem Anbieter Google seine Zustimmung gegeben hat. Die Hersteller-ID von Google in TCF v2.0 lautet 755. Ich habe auf einer der Quantcast-Seiten die folgende Mischung aus Code und Text gefunden, weiß aber nicht, wie ich diese verwenden soll. Sollte ich dies im Quantcast Choice-Skript auf meine Webseiten stellen oder ...? (Quelle unten verlinkt)

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

Wenn also die ID 755 gefunden wird, sollte ich anrufen:

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

und wenn ID 755 nicht gefunden wird, sollte ich anrufen:

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

Aber wie mache ich diese "Anrufe"?

Ich glaube, ich verstehe die folgenden Schritte. Ich weiß nur nicht, wie ich diese Schritte implementieren und die Punkte verbinden soll. Jede Hilfe wäre sehr dankbar!

Quellen, die ich verwendet habe:

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

Beispiel einer Website, die das zu tun scheint, was ich erreichen möchte: carscoops.com

Antworten

3 quick Sep 18 2020 at 07:52

Ich würde eine sehr einfache Lösung empfehlen. Mit TCF 2.0 müssen Sie Adsense-Parameter (personalisierte Anzeigen usw.) nicht manuell basierend auf einer bestimmten Zustimmung konfigurieren. Sie müssen nur garantieren, dass Sie mit dem Laden von Anzeigen beginnen, nachdem die Einwilligung erfolgreich geladen wurde. Die Adsense-Bibliothek liest die Zustimmungszeichenfolgen automatisch und zeigt Anzeigen gemäß einer bestimmten Einwilligung an.

Beispielcode für die Integration von Quantcast Choices in 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

Zum besseren Verständnis wird der 2.1a Google IAB TCF v2-Fehler wahrscheinlich dadurch verursacht, dass Google Advertise-Produkt-Tags zur Website hinzugefügt werden, bevor eine Benutzereinwilligung festgelegt / festgelegt wurde. Dies ist ein kurzes Video , das das erwartete Verhalten zeigt. Anzeigen werden erst geladen, nachdem ein Nutzer seine Zustimmung gegeben hat. Wenn Anzeigen im Hintergrund geladen werden, bevor ein Nutzer seine Einwilligung ausgewählt hat, werden 2.1a-Fehler angezeigt, da Sie Google-Tags hinzufügen, ohne auf die Einwilligung zu warten.

Die Lösung hierfür hängt davon ab, wie Sie Ihrer Website Google Advertising Product-Tags hinzufügen. Hoffentlich helfen die folgenden Informationen und das Adsense-Beispiel.

Google Tag Manager

Wenn Sie Google Tag Manager verwenden, um Ihrer Website Choice- und Google-Tags hinzuzufügen, können Sie den Leitfaden hier verwenden https://help.quantcast.com/hc/en-us/articles/360051794434 und https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking als Referenzen.

Adsense-spezifisches Beispiel

Nehmen Sie das Beispiel aus https://support.google.com/adsense/answer/9042142 Ich glaube, auf diese Weise müssten Sie das Beispiel überarbeiten, um auf die richtigen Zustimmungssignale von Quantcast Choice TCF v2.0 zu warten.

Ich hatte noch keine Gelegenheit, dies vollständig zu testen. Bitte lassen Sie mich wissen, wenn Sie Probleme mit dem Code haben, und ich werde das Beispiel aktualisieren.

SIEHE UNTER DIESEM CODE-BLOCK FÜR AKTUALISIERTE VERSIONEN

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

Bearbeiten: Neue aktualisierte Version hinzugefügt (18. August)


Dies könnte eine bessere Version als die oben genannte sein. Dies ist erneut ungetestet. Testen Sie daher und geben Sie Feedback, wenn Sie Probleme haben. Die Hauptunterschiede zu dieser aktualisierten Version sind:
  1. Wir überprüfen nicht mehr tcData.purpose.consents [3] und tcData.purpose.consents [4], sondern verlassen uns auf Google, um zu entscheiden, ob personalisierte Anzeigen geschaltet werden sollen oder nicht.

  2. Wir fügen nicht hinzu https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.jsauf die Seite, bis wir die Einwilligung haben, und verhindern, dass unerwünschte Cookies hinzugefügt werden, bis wir sicher sind, dass wir der Einwilligung dazu zustimmen. Dadurch konnten wir auch die (adsbygoogle = window.adsbygoogle || []) entfernen. PauseAdRequests = 1; Artikel auch

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