Comment afficher ou bloquer les publicités Adsense personnalisées en fonction du consentement pour IAB TCF v2.0 avec Quantcast Choice?

Aug 16 2020

J'ai choisi Quantcast Choice comme plateforme de gestion du consentement pour mon site Web. Cependant, avec leur solution de base, les annonces Google Adsense sont toujours diffusées aux visiteurs avant qu'ils ne donnent leur consentement au fournisseur associé (Google). Depuis 2 jours, il y a un avis dans Adsense confirmant ce problème et après une période de grâce de 90 jours, aucune annonce ne sera plus diffusée. Le message d'erreur: « 2.1a: la balise ou le SDK ne reçoit pas de chaîne TC car l'état CMP est stub, chargement ou erreur. »

Je ne suis pas du tout familier avec les scripts, mais il semble que je doive en utiliser pour que Quantcast Choice fonctionne réellement. Fondamentalement, j'ai besoin de savoir comment:

  • ne pas diffuser d'annonces Google avant le consentement d'un visiteur à Google
  • diffuser des annonces personnalisées après consentement
  • diffuser des annonces non personnalisées sans consentement

Ce que j'ai appris jusqu'à présent:

Avant le consentement d'un visiteur, je peux ajouter ce script à mon code Google Adsense pour ne pas afficher d'annonces:

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

Aucun problème pour l'instant. Cependant, je devrais être en mesure de savoir si un visiteur a donné son consentement pour le fournisseur Google. L'ID de fournisseur de Google dans le TCF v2.0 est 755. J'ai trouvé le mélange de code et de texte suivant sur l'une des pages Quantcast, mais je ne sais pas comment l'utiliser. Dois-je mettre cela sur mes pages Web dans le script Quantcast Choice ou ...? (source liée ci-dessous)

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

Donc, si l'ID 755 est trouvé, je devrais appeler:

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

et si l'ID 755 n'est pas trouvé, je devrais appeler:

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

Mais comment faire ces "appels"?

Je pense donc comprendre les étapes à suivre, c'est juste que je ne sais pas comment mettre en œuvre ces étapes et relier les points. Toute aide serait très appréciée!

Sources que j'ai utilisées:

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

Exemple de site Web qui semble faire ce que je veux réaliser: carscoops.com

Réponses

3 quick Sep 18 2020 at 07:52

Je recommanderais une solution très simple. Avec TCF 2.0, vous n'avez pas à configurer manuellement les paramètres Adsense (annonces personnalisées, etc.) en fonction d'un consentement donné. Il vous suffit de garantir que vous commencez à charger les annonces après le chargement du consentement. La bibliothèque Adsense lit automatiquement les chaînes de consentement et affiche des publicités conformément à un consentement donné.

Exemple de code pour l'intégration de Quantcast Choices avec 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

Juste pour aider tout le monde à comprendre, l' erreur 2.1a Google IAB TCF v2 est probablement causée par l'ajout de balises de produit Google Advertise au site Web avant que le consentement de l'utilisateur n'ait été défini / établi. Il s'agit d'une courte vidéo montrant le comportement attendu, les annonces ne se chargeant qu'après qu'un utilisateur ait donné son consentement. Si vous voyez des annonces se charger en arrière-plan avant qu'un utilisateur n'ait sélectionné son consentement, vous obtenez des erreurs 2.1a car vous ajoutez des balises Google sans attendre le consentement.

La solution à ce problème variera en fonction de la façon dont vous ajoutez des balises Google Advertising Product à votre site, mais nous espérons que les informations ci-dessous et l'aide de l'exemple Adsense

Google Tag Manager

Si vous utilisez Google Tag Manager pour ajouter des balises Choice et Google à votre site, vous pouvez utiliser le guide ici https://help.quantcast.com/hc/en-us/articles/360051794434 et https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking comme références.

Exemple spécifique d'Adsense

Prenant l'exemple de https://support.google.com/adsense/answer/9042142 Je pense que c'est ainsi que vous auriez besoin de retravailler l'exemple pour attendre les signaux de consentement appropriés de Quantcast Choice TCF v2.0.

Je n'ai pas eu l'occasion de tester complètement cela, alors faites-le moi savoir si vous rencontrez des problèmes avec le code et je mettrai à jour l'exemple.

VOIR CI-DESSOUS CE BLOC DE CODE POUR UNE VERIONS MISE À JOUR

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

Edit: Nouvelle version mise à jour ajoutée (18 août)


Cela pourrait être une meilleure version que la précédente. Ceci n'a pas encore été testé, veuillez donc tester et donner votre avis si vous rencontrez des problèmes. Les principales différences avec cette version mise à jour sont:
  1. Nous ne vérifions plus tcData.purpose.consents [3] et tcData.purpose.consents [4] au lieu de cela, nous comptons sur Google pour décider entre la diffusion d'annonces personnalisées et non.

  2. Nous n'ajoutons pas https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.jsà la page jusqu'à ce que nous ayons le consentement, empêchant tout cookie indésirable d'être ajouté jusqu'à ce que nous soyons sûrs d'avoir le consentement pour le faire. Cela nous a également permis de supprimer le (adsbygoogle = window.adsbygoogle || []). PauseAdRequests = 1; articles aussi

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