LW IT Solutions
« Blog-Übersicht /Digital Analytics / GA4 Consent Mode v2: Der gcd-Parameter, CMP-Wettläufe...
Diesen Artikel in anderen Sprachen lesen:

GA4 Consent Mode v2: Der gcd-Parameter, CMP-Wettläufe und serverseitiges Debugging

Teil 3 von 4 der Reihe Einwilligung richtig verdrahten

GA4 Consent Mode v2: Der gcd-Parameter, CMP-Wettläufe und serverseitiges Debugging
Inhalt
  1. GA4 Consent Mode v2: Der gcd-Parameter entschlüsselt (Deep Dive in Network Requests)
  2. 1. Die Struktur des gcd-Parameters
  3. 2. Identifikation von CMP-Race-Conditions
  4. 3. Server-Side GTM Debugging & Validierung
  5. Fragen und Antworten
  6. Quellen

GA4 Consent Mode v2: Der gcd-Parameter entschlüsselt (Deep Dive in Network Requests)

In modernen Digital-Analytics-Architekturen erfordert die Validierung des Datenschutzes weit mehr als die reine Kontrolle, ob ein Cookie-Banner auf der Website sichtbar ist. Während der Standard-Parameter gcs in den Netzwerk-Requests von Google Analytics 4 (GA4) nur ein simples Gesamtergebnis liefert (wie etwa g110 oder g111), verbirgt sich die exakte Logik des Google Consent Mode v2 im kryptischen gcd-Parameter (z. B. 11r1r1r1r5).

Diese technische Analyse schlüsselt die Bit-Logik des gcd-Strings präzise auf, zeigt Methoden zum Debugging im Server-Side Google Tag Manager (ssGTM) und demonstriert, wie sich Race-Conditions zwischen Consent Management Plattformen (wie Usercentrics) und dem initialen Pageview zuverlässig identifizieren lassen.

1. Die Struktur des gcd-Parameters

Im Gegensatz zum gcs-Wert, der ausschließlich meldet, ob Werbe- oder Analyse-Cookies zugestimmt wurde, bildet der gcd-Parameter den vollständigen Lebenszyklus jedes einzelnen Consent-Signals ab. Er zeigt exakt, ob ein Status durch einen Default-Befehl initialisiert, per User-Interaktion aktualisiert (Update) oder gar nicht konfiguriert wurde.

Ein typischer gcd-String folgt immer derselben Struktur: 11<ad_storage>1<analytics_storage>1<ad_user_data>1<ad_personalization>5

BuchstabencodeConsent-StatusTechnische Bedeutung
lNicht gesetztKein Default und kein Update; Consent Mode ist für dieses Signal nicht konfiguriert.
pDenied (Default)Default-Status abgelehnt, bislang kein Update eingegangen.
qDenied (Default + Update)Default-Status abgelehnt, Update ebenfalls abgelehnt.
rGranted (Update)Default-Status abgelehnt, Update auf Zustimmung.
tGranted (Default)Default-Status zugestimmt, bislang kein Update eingegangen.
uDenied (Update)Default-Status zugestimmt, Update auf Ablehnung.
vGranted (Default + Update)Default-Status zugestimmt, Update ebenfalls Zustimmung.
mDenied (Update)Kein Default-Befehl, Update auf Ablehnung.
nGranted (Update)Kein Default-Befehl, Update auf Zustimmung.

Google dokumentiert diese Buchstabencodes nicht offiziell; die Tabelle beruht auf beobachtetem Verhalten und kann mit einer Änderung der Tags ihre Gültigkeit verlieren. Der Wert gcd=11p1p1p1p5 steht beispielsweise für eine restriktive Ausgangslage, bei der alle vier Parameter (ad_storage, analytics_storage, ad_user_data, ad_personalization) per Default auf Ablehnung stehen und noch kein Update eingegangen ist (p). Ein String wie gcd=11r1r1r1r5 verifiziert hingegen, dass ein Update-Event erfolgreich verarbeitet wurde und alle vier Signale vom abgelehnten Default auf Zustimmung gewechselt sind (r). Ein String aus v-Codes beschreibt dagegen einen anderen Fall: Zustimmung bereits im Default, durch das Update bestätigt.

Der gcd-String 11r1r1r1r5 als zehn Zellen mit den Buchstaben für ad_storage, analytics_storage, ad_user_data und ad_personalization an den Stellen 2, 4, 6 und 8, eine Legende der Buchstaben für abgelehnt, zugestimmt und nicht gesetzt, drei Karten zum Wettlauf mit der CMP vom Symptom bis wait_for_update und die Prüfung von Stelle 6 im Server
So liest sich gcd: vier Buchstabenstellen, neun Codes und der Wettlauf zwischen CMP und erstem Seitenaufruf.

2. Identifikation von CMP-Race-Conditions

Ein häufiger Architekturfehler in Analytics-Setups ist eine Race-Condition zwischen der Initialisierung der CMP (z. B. Usercentrics) und dem Auslösen des ersten GA4-Configuration-Tags. Wenn wiederkehrende Besucher mit bereits gespeicherter Zustimmung beim ersten Pageview im Netzwerk-Request den Code p statt r aufweisen, wurde das Tracking-Tag abgefeuert, bevor die CMP das Update-Event in den DataLayer pushen konnte.

  • Symptom: Der erste Pageview-Hit trägt gcd=11p1p1p1p5 (Default Denied, noch kein Update), nachfolgende Event-Hits jedoch gcd=11r1r1r1r5 (Default Denied, Update auf Zustimmung).
  • Ursache: Das GA4-Tag wird über All Pages oder Consent Initialization ausgelöst, ohne die asynchrone Status-Auflösung der CMP abzuwarten.
  • Lösung: Tracking-Tags ausschließlich an spezifische CMP-Events (wie consent_status) koppeln oder den Parameter wait_for_update mit 500 ms Latenz im Default-Snippet setzen.

3. Server-Side GTM Debugging & Validierung

Im Server-Side Google Tag Manager (ssGTM) dient der eingehende GA4-HTTP-Request als Datenträger für sämtliche nachgelagerten Marketing-Tags wie Meta Conversions API (CAPI) und Google Ads. Die Prüfung des gcd-Parameters im ssGTM Preview Mode ist zwingend erforderlich, um illegale Datenweiterleitungen zu unterbinden.

// Beispiel: ssGTM Custom Variable zur Validierung von ad_user_data
// Struktur: 11<ad_storage>1<analytics_storage>1<ad_user_data>1<ad_personalization>5
// ad_user_data liegt damit auf Index 6; Index 7 ist die feste Trennziffer "1"
const gcd = getRequestQueryParameter("gcd");
const adUserData = gcd ? gcd.charAt(6) : "";
// Granted-Codes: t (Default), v (Default und Update), r (Default denied, Update granted), n (kein Default, Update granted)
if (adUserData === "t" || adUserData === "v" || adUserData === "r" || adUserData === "n") {
  return true; // ad_user_data liegt als granted vor
}
return false;

Durch die Implementierung serverseitiger Trigger-Bedingungen auf Basis des decodierten gcd-Status bleibt die Datenarchitektur absolut rechtskonform (DSGVO & DMA) und verhindert zuverlässig den Versand von Marketing-Payloads, solange sich der Consent im Default-Denied-Zustand befindet.

Fragen und Antworten

Was liefert die Servervariable mit charAt(6), wenn eine Anfrage den gcd-Parameter gar nicht mitbringt?

Dann fehlt gcd, die Variable nimmt statt charAt(6) direkt eine leere Zeichenkette und gibt false zurück. Das Verhalten ist richtig, denn im Zweifel wird nicht gesendet, aber es verdeckt einen Unterschied, der später gebraucht wird.

Ein fehlender Parameter bedeutet nämlich nicht „abgelehnt“, sondern „diese Anfrage stammt nicht aus dem erwarteten Aufbau“: ein anderer Client im Server-Container, ein Treffer aus dem Measurement Protocol, ein Proxy, der Parameter kürzt. Wer beides gleich behandelt, sucht die Ursache später in der Einwilligung statt in der Herkunft der Anfrage.

Zwei kleine Ergänzungen lösen das: den Fall eines fehlenden gcd eigens protokollieren, statt ihn in false aufgehen zu lassen, und die Positionsannahme absichern, indem vor dem Lesen die Länge geprüft wird. Der Aufbau der Zeichenkette ist nicht als dauerhafte Zusage dokumentiert; eine Auswertung, die auf Position 6 zeigt, gehört deshalb an eine Stelle, an der auffällt, wenn sich dort etwas ändert.

Einwilligung richtig verdrahten

  1. Google Consent Mode v2 implementieren
  2. Wie cookielose Pings im Google Consent Mode funktionieren
  3. GA4 Consent Mode v2: Der gcd-Parameter, CMP-Wettläufe und serverseitiges Debugging
  4. Consent-Status an Server-Side GTM übergeben
Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Abweichende Zahlen aus anderen Konten und Rückfragen zur Einrichtung sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

Artikel & Kategorien

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Data Privacy

Alle 19 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 58 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 37 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Music Production

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

SaaS & Internet Earning

Diese Rubrik per RSS verfolgen

Smart Home

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Alle 11 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Alle 14 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen