Google Consent Mode v2 richtig einrichten
Default-Deny, Update bei Zustimmung, GA4-Anbindung. Mit Code-Snippets, Stolperfallen und unserem eigenen Setup als Vorlage.
Seit März 2024 ist Google Consent Mode v2 verpflichtend, wenn du Google-Werbeprodukte (Ads, Floodlight, GA4-Audiences) im EWR nutzt. Ohne korrekt konfigurierten Consent Mode siehst du in GA4 leere Reports und in Ads brechen Audiences zusammen. Was es genau ist, wie es technisch funktioniert und wie du es in unter 30 Minuten korrekt einrichtest – inklusive Code, das wir auf dieser Website selbst verwenden.
Was ist Consent Mode v2?
Consent Mode ist Googles Antwort auf europäische Datenschutzregeln. Vor jeder Datenübertragung wird dem Browser-Tag mitgeteilt, ob der Nutzer zugestimmt hat. Ohne Zustimmung sendet Google nur Cookieless Pings – aggregierte, anonymisierte Signale ohne Cookies und ohne identifizierende Daten. Das ist datenschutzkonform und liefert dir trotzdem grobe Reichweitenzahlen via Modeling.
Version 2 erweitert das Modell um zwei zusätzliche Signale: ad_user_data und ad_personalization – beide Pflicht für jeden Werbetreibenden im EWR.
Schritt 1: Default-Deny vor jedem GA4-Aufruf
Bevor das gtag-Script lädt, muss der Default-Status gesetzt werden. Wichtig: vor dem Laden, sonst werden Tags initial mit ungewollten Settings ausgelöst.
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){ dataLayer.push(arguments); }
// Default: alles abgelehnt, bis Nutzer zustimmt
gtag('consent', 'default', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
'analytics_storage': 'denied',
'functionality_storage': 'granted',
'personalization_storage': 'denied',
'security_storage': 'granted',
'wait_for_update': 500
});
</script>
wait_for_update: 500 sagt Google: warte 500 ms auf eine Update-Antwort des Cookie-Banners, bevor du das Tag mit Defaults auslöst. Realistischer Wert für die meisten CMP-Setups.
Schritt 2: GA4 deferred laden
Erst nach der Zustimmung in der Statistik-Kategorie soll das GA4-Script geladen werden. Wir injizieren es dynamisch:
const GA4_ID = 'G-XXXXXXXXXX';
function loadAnalytics(consent){
if(!consent || !consent.statistics) return;
if(window._ga4Loaded) return;
window._ga4Loaded = true;
const s = document.createElement('script');
s.async = true;
s.src = 'https://www.googletagmanager.com/gtag/js?id=' + GA4_ID;
document.head.appendChild(s);
gtag('js', new Date());
gtag('config', GA4_ID, { 'anonymize_ip': true });
}
Schritt 3: Update bei Zustimmung
Wenn der Nutzer im Cookie-Banner Statistik aktiviert, sendest du ein Consent-Update an Google. Beispiel:
function applyConsent(consent){
gtag('consent', 'update', {
'analytics_storage': consent.statistics ? 'granted' : 'denied',
'ad_storage': consent.marketing ? 'granted' : 'denied',
'ad_user_data': consent.marketing ? 'granted' : 'denied',
'ad_personalization': consent.marketing ? 'granted' : 'denied'
});
loadAnalytics(consent);
}
Schritt 4: Persistente Speicherung
Die Zustimmung wird in localStorage gespeichert (nicht in einem Cookie, weil das Cookie selbst nach 13 Monaten gelöscht werden muss). Beispiel-Struktur:
{
"necessary": true,
"statistics": true,
"marketing": false,
"ts": 1715342400000
}
Beim nächsten Seitenaufruf wird das Objekt gelesen und sofort an gtag weitergereicht – damit ist der Banner für wiederkehrende Nutzer unsichtbar und das Tracking läuft sofort an.
Schritt 5: Widerrufsmöglichkeit
Pflicht: ein dauerhaft sichtbarer Reset-Button, über den der Nutzer seine Einstellungen ändern kann. Wir nutzen ein kleines Floating-Icon unten links, das den Banner wieder einblendet. Klick darauf → Banner öffnet sich, alte Einstellungen sind vorausgewählt.
Häufige Stolperfallen
- Reihenfolge falsch: Default-Set nach dem gtag-Skript = Tags feuern mit ungewollten Defaults.
- Update vergessen: Nach „Akzeptieren“-Klick wird das Update nicht gesendet → Modeling bleibt deaktiviert.
- Cookie statt localStorage: Cookie wird nach 6–13 Monaten automatisch gelöscht → Banner erscheint wieder, obwohl der Nutzer zugestimmt hat.
- ad_user_data / ad_personalization weglassen: Reicht für reine Analytics, ist aber für Ads-Audiences erforderlich.
- Test mit Adblocker: Adblocker blockieren oft den Tag Manager – immer in einem sauberen Browser ohne Erweiterungen testen.
- Tag-Assistant nicht genutzt: Mit dem Chrome-Tag-Assistant siehst du in Echtzeit, welche Tags mit welchem Consent-Status feuern. Pflichtwerkzeug.
Wie man testet, ob alles richtig läuft
Drei Quick-Checks:
- Im Inkognito-Modus die Seite öffnen, Cookie-Banner ablehnen → Network-Tab zeigt Pings an
collect?mitgcs=G100(= Consent denied). - Banner akzeptieren → Pings haben
gcs=G111(= alles granted). - In GA4 → Verwaltung → Einstellungen für die Datenerfassung sollte „Consent Mode aktiv“ angezeigt werden, sobald die ersten Hits eintreffen.
Unser eigenes Setup
Auf dieser Website verwenden wir genau diese Architektur in einer schlanken Vanilla-JS-Implementierung – ohne CMP-Abo, ohne externes Tool. Der gesamte Cookie-Logik-Block liegt in assets/main.js mit etwa 120 Zeilen Code. Wer das Pattern kopieren oder lizensieren will: schreib uns kurz, wir teilen den aktuellen Stand gerne.
Fazit
Consent Mode v2 ist konzeptionell einfach, aber im Detail tückisch. Wer ihn richtig aufsetzt, behält rechtssichere DSGVO-Compliance und nutzbares Tracking-Datenmaterial. Wer ihn ignoriert, riskiert Werbe-Wirkungsverluste und Bußgelder. Das hier beschriebene Setup ist seit über einem Jahr produktiv im Einsatz – auf dieser Website und auf rund einem Dutzend Kundensites.
Edgar Oganisjan ist Gründer von Skins4You und implementiert seit der ersten Beta-Version den Google Consent Mode auf Kundenprojekten in DACH.