GA4 Consent Mode v2: parametr gcd, wyścigi CMP i debugowanie po stronie serwera
Część 3 z 4 serii Jak poprawnie okablować zgodę

Spis treści
GA4 Consent Mode v2: Dekodowanie parametru gcd (Analiza żądań sieciowych)
W nowoczesnych architekturach analityki internetowej weryfikacja zgodności z przepisami o prywatności wymaga znacznie głębszej analizy niż tylko sprawdzanie obecności banera cookie. Standardowy parametr gcs w żądaniach sieciowych Google Analytics 4 (GA4) dostarcza jedynie podstawowej informacji (np. g110 lub g111), nie ujawniając rzeczywistego mechanizmu stanów zgód. Cała złożoność Google Consent Mode v2 jest zakodowana w zagadkowym parametrze gcd (np. 11r1r1r1r5).
Poniższa analiza techniczna wyjaśnia logikę bitową ciągu gcd, przedstawia metody debugowania sygnałów w Server-Side Google Tag Manager (ssGTM) oraz pokazuje, w jaki sposób identyfikować błędy typu race condition między platformami CMP (np. Usercentrics) a pierwszym wyświetleniem strony.
1. Struktura parametru gcd
W przeciwieństwie do parametru gcs, który informuje wyłącznie o ogólnej zgodzie na pamięć reklamową lub analityczną, parametr gcd precyzyjnie określa pełny cykl życia sygnału. Ujawnia on, czy dany status został ustawiony jako domyślny (default), zaktualizowany przez akcję użytkownika (update), czy też pozostał nieskonfigurowany.
Typowy ciąg parametru gcd ma następującą strukturę: 11<ad_storage>1<analytics_storage>1<ad_user_data>1<ad_personalization>5
| Kod literowy | Stan zgody (Consent State) | Znaczenie techniczne |
|---|---|---|
l | Nieustawione | Brak stanu domyślnego i brak aktualizacji; Consent Mode nie jest skonfigurowany dla tego sygnału. |
p | Odrzucono (Domyślnie) | Stan domyślny odmowny, brak aktualizacji. |
q | Odrzucono (Domyślnie + Aktualizacja) | Stan domyślny odmowny, aktualizacja również odmowna. |
r | Wyrażono zgodę (Aktualizacja) | Stan domyślny odmowny, aktualizacja na zgodę. |
t | Wyrażono zgodę (Domyślnie) | Stan domyślny na zgodę, brak aktualizacji. |
u | Odrzucono (Aktualizacja) | Stan domyślny na zgodę, aktualizacja na odmowę. |
v | Wyrażono zgodę (Domyślnie + Aktualizacja) | Stan domyślny na zgodę, aktualizacja również na zgodę. |
m | Odrzucono (Aktualizacja) | Brak polecenia default, aktualizacja na odmowę. |
n | Wyrażono zgodę (Aktualizacja) | Brak polecenia default, aktualizacja na zgodę. |
Przykładowo, wartość gcd=11p1p1p1p5 oznacza restrykcyjny stan wyjściowy, w którym wszystkie cztery parametry (ad_storage, analytics_storage, ad_user_data, ad_personalization) mają domyślnie status odmowny i nie dotarła jeszcze żadna aktualizacja (p). Z kolei wartość gcd=11r1r1r1r5 potwierdza, że nastąpiło zdarzenie aktualizacji i wszystkie cztery sygnały zostały zmienione z domyślnej odmowy na zgodę (r). Ciąg złożony z kodów v opisuje natomiast inny przypadek: zgodę już na poziomie stanu domyślnego, potwierdzoną przez aktualizację.
2. Wykrywanie błędów Race Condition
Częstym błędem architektonicznym jest wyścig (race condition) pomiędzy ładowaniem skryptu CMP (np. Usercentrics) a uruchomieniem pierwszego tagu konfiguracyjnego GA4. Jeśli powracający użytkownik posiada zapisaną zgodę, jednak pierwsze żądanie sieciowe zawiera kody p zamiast r, oznacza to, że tag śledzący wysłał dane, zanim platforma CMP zdążyła przekazać zaktualizowany stan do DataLayer.
- Objaw: Pierwszy hit pageview zawiera
gcd=11p1p1p1p5(domyślna odmowa, brak aktualizacji), podczas gdy kolejne zdarzenia mają już kodgcd=11r1r1r1r5(domyślna odmowa, aktualizacja na zgodę). - Przyczyna: Uruchomienie tagu GA4 następuje na standardowym wyzwalaczu All Pages lub Consent Initialization bez oczekiwania na asynchroniczną inicjalizację CMP.
- Rozwiązanie: Konfiguracja tagów analitycznych w oparciu o dedykowane zdarzenia CMP (np.
consent_status) lub zastosowanie parametruwait_for_updatez limitem 500 ms w kodzie domyślnym.
3. Debugowanie w Server-Side GTM
W środowisku Server-Side Google Tag Manager (ssGTM) przychodzące żądanie HTTP GA4 stanowi podstawowy nośnik danych dla tagów vendorów zewnętrznych, w tym Meta Conversions API (CAPI) czy Google Ads. Analiza parametru gcd w trybie podglądu ssGTM jest kluczowa dla zapobiegania wysyłce niedozwolonych danych.
// Przykład: Logika zmiennej ssGTM weryfikująca stan ad_user_data
// Struktura: 11<ad_storage>1<analytics_storage>1<ad_user_data>1<ad_personalization>5
// ad_user_data znajduje się zatem na indeksie 6; indeks 7 to stały separator "1"
const gcd = getRequestQueryParameter("gcd");
const adUserData = gcd ? gcd.charAt(6) : "";
// Kody oznaczające zgodę: t (default), v (default i update), r (default denied, update granted), n (brak default, update granted)
if (adUserData === "t" || adUserData === "v" || adUserData === "r" || adUserData === "n") {
return true; // ad_user_data ma status granted
}
return false;
Dzięki wdrożeniu reguł wyzwalających opartych na zdekodowanym stanie gcd, architektura danych zachowuje pełną zgodność z RODO oraz Aktem o rynkach cyfrowych (DMA), gwarantując blokadę pakietów marketingowych przy braku zgody użytkownika.
Jak poprawnie okablować zgodę
- Jak wdrożyć Google Consent Mode v2
- Jak działają pingi bez cookies w Google Consent Mode
- GA4 Consent Mode v2: parametr gcd, wyścigi CMP i debugowanie po stronie serwera
- Jak przekazać zgody z Client GTM do Server-Side GTM
Komentarze: 2
Tabela kodów literowych jest tym, czego brakuje w dokumentacji — bez niej ciąg
gcdpozostaje szumem, który wszyscy pomijają w zakładce sieci.Pytanie o granice przydatności: w codziennej kontroli zwykle wystarcza parametr
gcs. Kiedy naprawdę warto sięgać pogcd, a kiedy to nadmiar?Oba odpowiadają na różne pytania i dobrze jest je rozdzielić, zamiast zawsze czytać trudniejszy z nich.
gcsmówi, jaki był stan zgody w chwili wysyłki żądania — i to wystarcza do kontroli typu „czy przy odmowie nadal coś się zapisuje”. Jest krótki, czytelny bez tabeli i nadaje się do zrzutu ekranu w dokumentacji.gcdmówi dodatkowo, skąd ten stan się wziął: czy istniał domyślny stan, czy przyszła aktualizacja, czy sygnał w ogóle nie został skonfigurowany. Ta różnica ma znaczenie w jednym konkretnym przypadku — przy podejrzeniu wyścigu z banerem. Tylkogcdrozróżnia „odmowa z domyślnego stanu, aktualizacja jeszcze nie dotarła” od „odmowa potwierdzona przez użytkownika”, a to są dwa zupełnie różne problemy: pierwszy jest usterką kolejności, drugi poprawnym działaniem.