Passa al contenuto principale

Debug mode e ordine dei tag Google

I tag Google leggono lo stato del consenso quando partono. Se partono troppo presto, possono leggere uno stato sbagliato. Questa pagina spiega l'avviso che Avacy stampa nella console del browser, come accendere la debug mode e cosa fare quando un tag è in ritardo.

NOTA: Questa pagina vale per il nuovo banner Avacy (v3). Il banner precedente non fa questo controllo e non ha window.Avacy.

Ordine dei tag Google​

Perché l'ordine conta​

Quando parte il core di Avacy, controlla se un tag Google (gtag.js, Google Tag Manager, analytics.js) è partito prima:

  • della chiamata default di Google Consent Mode, oppure
  • dello stub TCF.

Un tag Google che parte prima può leggere uno stato di consenso sbagliato.

Il controllo gira una sola volta, all'avvio del core. Gira solo se la configurazione ha Google Consent Mode o TCF. Senza nessuno dei due non stampa nulla. Non blocca mai l'aggiornamento del consenso.

L'avviso in console​

Quando un tag Google è in ritardo, la console mostra sempre un avviso che comincia così, anche con la debug mode spenta. Il testo è in inglese:

[Avacy] Google tags ran before the Consent Mode default or the TCF stub: Google may have read the wrong consent state. …

L'avviso riporta i passi descritti più sotto in «Cosa fare se l'esito è LATE» e rimanda a questa pagina.

L'avviso compare al massimo una volta per pagina.

Se la pagina usa Google Tag Manager e TCF, il messaggio è diverso. Vedi GTM e TCF.

Accendere e spegnere la debug mode​

La debug mode stampa più dettagli in console, compreso l'esito di questo controllo. Apri la console del browser ed esegui:

window.Avacy.debugModeOn();

La chiamata salva il flag in localStorage (chiave avacy:debug) e ricarica la pagina. Per spegnerla:

window.Avacy.debugModeOff();

Si accende anche con una configurazione che ha il logger console.

PASS e LATE​

Con la debug mode accesa, la console stampa sempre un esito.

  • PASS: nessun tag Google è partito prima del default di Consent Mode o dello stub TCF.
  • LATE: un tag Google è partito prima. Viene stampato anche l'avviso qui sopra.

La riga mostra anche i dati dietro l'esito. Contiene l'istante del controllo in ms, la posizione del default e del primo comando Google nel dataLayer, lo stato di consenso di Google e lo stato dello stub TCF.

Esempio:

Google tag order: PASS (check at 412 ms; dataLayer: default #0, first Google command #1; Google consent state (google_tag_data.ics): usedDefault true, Google wasSetLate: false; Google scripts already downloaded (info only): none; TCF stub: not needed)

Come si decide l'esito​

Decide l'ordine dei comandi nel dataLayer.

  • Consent Mode: il consent default deve stare prima del primo comando Google. Sono js, config o event di gtag, oppure l'evento gtm.js. Se è così, l'esito è PASS.
  • TCF: se nel dataLayer ci sono già comandi Google e lo stub __tcfapi manca, l'esito è LATE. Se non ci sono ancora comandi Google, l'esito è PASS.

Un default messo da un tag di Google Tag Manager non compare nel dataLayer. In questo caso Avacy legge lo stato di consenso interno di Google (google_tag_data.ics). Se un default è stato impostato e nessun tag Google aveva letto il consenso prima, l'avviso non parte.

Se l'unico comando Google è gtm.js e nessun default è visibile, Avacy aspetta prima di avvisare. Aspetta l'evento load della pagina, al massimo 3 secondi. Se la pagina è già caricata, aspetta mezzo secondo. Poi rifà il controllo una volta.

Un nome diverso per il dataLayer non viene letto dal controllo.

Cosa fare se l'esito è LATE​

  1. Verifica se il tag in ritardo usa Google Tag Gateway (GTG). Vedi Come verificare se un tag è enrolled in GTG.
  2. Se lo usa, segui la pagina Google Tag Gateway e gestione del consenso.
  3. Se non lo usa, carica lo snippet di Avacy prima dei tag Google.

Guida di Google: Set up consent mode on websites.

GTM e TCF​

Con Google Tag Manager e TCF non puoi caricare lo snippet di Avacy prima di GTM. Il banner parte dopo. Quello che deve stare prima è lo stub TCF. È un piccolo script che installa window.__tcfapi e mette in coda le chiamate finché il banner non parte.

Se GTM parte senza stub, l'esito è LATE. L'avviso in console comincia così (il testo è in inglese):

[Avacy] Google Tag Manager ran before the TCF stub: Google may have read the wrong consent state. …

Succede quando sono vere tutte queste condizioni:

  • TCF è nella configurazione.
  • Ci sono già comandi Google nel dataLayer. Il template GTM di Avacy è attivo, oppure il primo comando è l'evento gtm.js.
  • Non c'è la funzione __tcfapi.

Per risolvere, carica lo stub come script sincrono nell'<head>. Mettilo prima dello snippet GTM e di qualunque script che chiami __tcfapi.

<head>
<!-- 1. Stub TCF: sincrono, prima di GTM. -->
<script src="https://<tenant>.avacy-cdn.com/v3/tcf-stub.js"></script>
<!-- 2. Snippet GTM. -->
<!-- ... -->
<!-- 3. Banner Avacy. -->
</head>

<tenant> è un segnaposto: usa lo stesso dominio dello snippet del banner. Questo indirizzo serve sempre l'ultima versione dello stub. Se lo stub è già in pagina, il banner non lo sovrascrive.