Come visualizzare o bloccare gli annunci Adsense personalizzati in base al consenso per IAB TCF v2.0 con Quantcast Choice?

Aug 16 2020

Ho scelto Quantcast Choice come piattaforma di gestione del consenso per il mio sito web. Tuttavia, con la loro soluzione di base, gli annunci di Google Adsense vengono comunque offerti ai visitatori prima che diano il loro consenso per il relativo fornitore (Google). Da 2 giorni c'è un avviso in Adsense che conferma questo problema e dopo un periodo di grazia di 90 giorni non verranno più pubblicati annunci. Il messaggio di errore: " 2.1a: il tag o l'SDK non riceve una stringa TC a causa dello stato di CMP in fase di stub, caricamento o errore. "

Non ho affatto familiarità con gli script, ma sembra che devo usarne alcuni per far funzionare Quantcast Choice. Fondamentalmente ho bisogno di sapere come:

  • non pubblicare annunci Google prima che un visitatore acconsenta a Google
  • pubblicare annunci personalizzati dopo il consenso
  • pubblicare annunci non personalizzati senza consenso

Quello che ho imparato finora:

Prima del consenso di un visitatore, posso aggiungere questo script al mio codice Google Adsense per non mostrare alcun annuncio:

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

Nessun problema finora. Tuttavia, dovrei essere in grado di sapere se un visitatore ha dato il consenso per il fornitore Google. L'ID del fornitore di Google nel TCF v2.0 è 755. Ho trovato la seguente combinazione di codice e testo su una delle pagine Quantcast, ma non so come usarla. Devo metterlo nelle mie pagine web all'interno dello script Quantcast Choice o ...? (fonte collegata sotto)

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

Quindi, se viene trovato l'ID 755, dovrei chiamare:

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

e se l'ID 755 non viene trovato, dovrei chiamare:

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

Ma come faccio a fare queste "chiamate"?

Quindi penso di aver capito i passaggi da seguire, è solo che non so come implementarli e collegare i punti. Qualsiasi aiuto sarebbe molto apprezzato!

Fonti che ho usato:

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

Esempio di un sito web che sembra fare quello che voglio ottenere: carscoops.com

Risposte

3 quick Sep 18 2020 at 07:52

Consiglierei una soluzione molto semplice. Con TCF 2.0 non è necessario configurare manualmente i parametri di Adsense (annunci personalizzati, ecc.) In base a un dato consenso. Devi solo garantire, inizi a caricare gli annunci dopo che il consenso è stato caricato con successo. La libreria di Adsense legge automaticamente le stringhe di consenso e visualizza gli annunci in base a un determinato consenso.

Codice di esempio per l'integrazione di Quantcast Choices con 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

Solo per aiutare tutti a capire, l' errore 2.1a Google IAB TCF v2 è probabilmente causato dall'aggiunta di tag dei prodotti pubblicitari di Google al sito Web prima che sia stato impostato / stabilito il consenso dell'utente. Questo è un breve video che mostra il comportamento previsto, gli annunci non vengono caricati fino a quando un utente non ha dato il consenso. Se vedi annunci caricati in background prima che un utente abbia selezionato il proprio consenso, ricevi errori 2.1a perché stai aggiungendo tag di Google senza attendere il consenso.

La soluzione a ciò varierà a seconda di come stai aggiungendo i tag dei prodotti pubblicitari di Google al tuo sito, ma si spera che le informazioni di seguito e gli esempi di Adsense siano di aiuto.

Google Tag Manager

Se utilizzi Google Tag Manager per aggiungere Choice e Google tag al tuo sito, puoi utilizzare la guida qui https://help.quantcast.com/hc/en-us/articles/360051794434 e https://help.quantcast.com/hc/en-us/articles/360051794434-TCF-v2-GTM-Implementation-Guide-IAB-Vendor-Tag-Blocking come riferimenti.

Esempio specifico di Adsense

Prendendo l'esempio da https://support.google.com/adsense/answer/9042142 Credo che questo sia il modo in cui dovresti rielaborare l'esempio per attendere i segnali di consenso appropriati da Quantcast Choice TCF v2.0.

Non ho avuto la possibilità di testarlo completamente, quindi per favore fatemi sapere se avete problemi con il codice e aggiornerò l'esempio.

VEDI SOTTO QUESTO BLOCCO DI CODICE PER UNA VERSIONE AGGIORNATA

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

Modifica: aggiunta nuova versione aggiornata (18 agosto)


Questa potrebbe essere una versione migliore della precedente. Anche in questo caso non è stato testato, quindi prova e invia un feedback in caso di problemi. Le principali differenze con questa versione aggiornata sono:
  1. Non stiamo più controllando tcData.purpose.consents [3] e tcData.purpose.consents [4], ma ci affidiamo a Google per decidere se mostrare annunci personalizzati o no.

  2. Non aggiungiamo https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.jsalla pagina fino a quando non abbiamo il consenso, impedendo l'aggiunta di cookie indesiderati fino a quando non siamo sicuri di avere il consenso in tal senso. Questo ci ha anche permesso di rimuovere (adsbygoogle = window.adsbygoogle || []). PauseAdRequests = 1; oggetti pure

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