Dacă rulezi campanii Google Ads sau folosești Google Analytics 4 cu vizitatori din Spațiul Economic European, Consent Mode v2 nu mai e opțional: fără semnalele lui, Google nu poate folosi datele pentru personalizarea reclamelor și pentru măsurarea conversiilor. Problema e că multe implementări arată corect, dar nu transmit nimic: bannerul apare, utilizatorul apasă „Accept”, iar în GA4 nu apare niciun vizitator.
Ghidul explică ce face Consent Mode v2, care e ordinea corectă a scripturilor, cum actualizezi consimțământul la acord, cum se leagă Meta Pixel și TikTok și cum testezi că totul funcționează. Rețeta vine din implementările noastre de pe maxdev.ro, Praxi și alte proiecte, nu din documentația copiată. Nu este sfat juridic: pentru deciziile care țin de GDPR sau de legislația cookie-urilor, consultă un specialist.
Pe scurt: setezi consimțământul implicit pe „refuzat” înainte să se încarce gtag.js, apoi trimiți „acordat” când utilizatorul acceptă, și retrimiți configurarea GA4 în acel moment. Consent Mode nu înlocuiește bannerul de cookie-uri și nu retrimite retroactiv vizita deja trimisă sub „refuzat”. Testează în Network și în GA4 Realtime, nu doar în cod.
Ce este Consent Mode v2 și de ce contează
Consent Mode este mecanismul prin care site-ul îi spune etichetelor Google ce are voie să facă în funcție de alegerea vizitatorului. Versiunea 2 a adăugat două semnale pentru reclame, ad_user_data și ad_personalization, care se cer pentru utilizatorii din Spațiul Economic European în cazul personalizării reclamelor și al măsurării conversiilor. Fără ele, remarketingul și o parte din măsurare nu funcționează cum te aștepți.
De reținut: Consent Mode nu este un banner. Bannerul colectează alegerea utilizatorului; Consent Mode transmite acea alegere către Google. Ai nevoie de ambele, iar textul bannerului trebuie să fie în acord cu politica ta de cookie-uri.
Cele șase semnale
| Semnal | Ce controlează | Valoare implicită uzuală |
|---|---|---|
| analytics_storage | Cookie-uri de analytics (GA4) | denied |
| ad_storage | Cookie-uri de publicitate | denied |
| ad_user_data | Trimiterea datelor utilizatorului către Google pentru reclame | denied |
| ad_personalization | Personalizarea reclamelor (remarketing) | denied |
| functionality_storage | Funcții ale site-ului (preferințe) | granted |
| security_storage | Securitate și prevenirea fraudei | granted |
Primele patru sunt cele care se schimbă la acordul utilizatorului. Ultimele două sunt, de regulă, strict necesare, deci rămân acordate.
Mod de bază sau mod avansat
Există două moduri de a implementa. În modul de bază, etichetele Google nu se încarcă deloc până când utilizatorul acceptă; nu trimiți nimic înainte de acord. În modul avansat, etichetele se încarcă de la început cu consimțământul implicit pe „refuzat” și pot trimite semnale fără cookie-uri, pe care Google le folosește pentru modelare. Alegerea între ele ține de politica ta de confidențialitate și de ce spune consultantul tău juridic, nu de o preferință tehnică. Implementarea de mai jos urmează modul avansat, adică exact varianta pe care o folosim noi.
Ordinea corectă a scripturilor
Regula care strică cele mai multe implementări: consimțământul implicit trebuie setat înainte de gtag.js. Dacă gtag.js se încarcă primul, primul hit pleacă fără regulile tale.
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('consent', 'default', {
analytics_storage: 'denied',
ad_storage: 'denied',
ad_user_data: 'denied',
ad_personalization: 'denied',
functionality_storage: 'granted',
security_storage: 'granted',
wait_for_update: 500
});
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
Parametrul wait_for_update: 500 dă bannerului 500 de milisecunde să restaureze un consimțământ deja salvat, la vizitele ulterioare. E suficient pentru restaurarea automată, dar nu pentru decizia activă a unui utilizator nou, care are nevoie de mult mai mult timp ca să citească și să apese. Din cauza asta apare capcana din secțiunea următoare.
Actualizarea la acord: capcana care ascunde vizitatorii
Când utilizatorul apasă „Accept”, trimiți actualizarea. Dar ai o problemă: hit-ul automat de la încărcarea paginii a plecat deja, sub „refuzat”, cu mult înainte de clic, iar Consent Mode nu retrimite hit-urile vechi, ci se aplică doar viitorului. Rezultatul: vizita nu apare în GA4. Soluția, documentată de Google pentru acest caz, este să retrimiți configurarea după actualizare:
function acceptaTot() {
gtag('consent', 'update', {
analytics_storage: 'granted',
ad_storage: 'granted',
ad_user_data: 'granted',
ad_personalization: 'granted'
});
// retrimite masurarea, altfel vizita deja trimisa sub "denied" nu apare in GA4
gtag('config', 'G-XXXXXXXXXX');
}
Două detalii pe care le-am verificat în practică. Primul: un gtag('event', 'page_view') trimis manual nu merge, pentru că gtag.js îl tratează ca duplicat al paginii și îl ignoră; funcționează doar retrimiterea config. Al doilea: apelează funcția globală gtag creată de scriptul din <head>, nu un wrapper propriu care face manual dataLayer.push, pentru că într-un proiect varianta locală nu a funcționat, iar cea globală a rezolvat problema.
Retrimite config doar la tranziția din „refuzat” în „acordat”, nu la fiecare încărcare, altfel dublezi vizitele. La vizitele următoare, cu consimțământul deja salvat, îl restaurezi imediat ce se încarcă pagina.
Meta Pixel și TikTok
Pixelii de marketing au propriile mecanisme, simetrice cu cele ale Google. La Meta, apelezi fbq('consent', 'revoke') înainte de fbq('init', ...), ca să nu se trimită nimic până la acord, iar la acceptare faci fbq('consent', 'grant') și retrimiți manual PageView, pentru că Meta nu deduplică la fel ca gtag.js. La TikTok, apelezi ttq.holdConsent() înainte de ttq.load(...), apoi ttq.grantConsent() sau ttq.revokeConsent() după alegerea utilizatorului. Dacă nu ții pixelii sub consimțământ, bannerul de pe site spune un lucru și site-ul face altul.
Cum testezi
- Deschide consola și verifică
typeof window.gtag: trebuie să fie"function"înainte să apeși „Accept”. - Inspectează
dataLayerși caută comandaconsent defaultca prim element, înaintea oricărei alte comenzi. - Deschide fila Network, filtrează pe
collectși apasă „Accept”: ar trebui să apară o cerere nouă imediat. Parametrulgcsdin cerere arată starea de consimțământ trimisă către Google; de obicei, o valoare ca G100 înseamnă refuzat, iar G111 înseamnă acordat pentru analytics și reclame. - Verifică GA4 Realtime după acceptare și, dacă ai nevoie de detalii, DebugView.
- Testează refuzul: apasă „Doar necesare” și verifică să nu apară cookie-uri de analytics sau de publicitate și să nu plece cereri către pixeli.
- Testează revenirea: reîncarcă pagina cu consimțământul salvat și verifică să fie restaurat de la prima încărcare.
Dacă toate trec și GA4 tot nu arată vizitatori, problema nu e în cod: caută în configurația proprietății (filtre de trafic intern, fluxul de date).
Greșeli frecvente
- gtag.js se încarcă înaintea consimțământului implicit.
- Lipsesc
ad_user_datașiad_personalization, deci implementarea e de fapt versiunea 1. - Retrimiți
page_viewmanual, în loc deconfig, și nu apare nimic. - Bannerul nu salvează alegerea, iar utilizatorul îl vede la fiecare pagină.
- Pixelii de marketing se încarcă înainte de acord.
- Mai multe layout-uri, o singură implementare. Dacă aplicația are zone diferite (site public și cont), fiecare trebuie să includă bannerul și parametrii; la Praxi au fost două.
- Bannerul promite altceva decât face site-ul. Textul trebuie să corespundă cu ce se întâmplă efectiv.
Ce rămâne în sarcina ta
Consent Mode rezolvă partea tehnică a transmiterii consimțământului. Nu rezolvă textul bannerului, politica de cookie-uri, categoriile pe care le oferi sau modul de păstrare a dovezii alegerii. Dacă pornești o campanie plătită, configurarea corectă a măsurării face diferența dintre date utilizabile și date incomplete, iar la nivelul site-ului, un audit de SEO tehnic verifică tagurile, scripturile și indexarea împreună.
Întrebări frecvente
Consent Mode v2 înlocuiește bannerul de cookie-uri?
Nu. Bannerul colectează alegerea utilizatorului; Consent Mode doar o transmite către Google. Ai nevoie de ambele.
De ce nu apar vizitatori în GA4 după ce acceptă cookie-urile?
Pentru că hit-ul de la încărcare a plecat sub „refuzat”, iar actualizarea nu îl retrimite. Retrimite gtag('config', ID) la tranziția în „acordat”.
Care e diferența dintre modul de bază și cel avansat?
În modul de bază nu se încarcă nicio etichetă până la acord. În modul avansat, etichetele se încarcă și trimit semnale fără cookie-uri înainte de acord. Alegerea se face cu consultanță juridică.
Trebuie să schimb ceva și pentru Meta Pixel?
Da. Pixelul Meta are propriul mecanism de consimțământ (revoke înainte de init, apoi grant), iar TikTok la fel, cu holdConsent și grantConsent.
Cum aflu dacă implementarea mea merge?
Verifică în fila Network cererile către collect și parametrul gcs, apoi GA4 Realtime. Dacă apare o cerere nouă imediat după „Accept” și vizita e vizibilă, merge.
Dacă vrei să verificăm împreună măsurarea și consimțământul pe site-ul tău, descrie-ne situația și revenim cu un plan.
