Demo-Report · synthetische Testdaten — keine realen Kundendaten.
CuonzTech · Privacy Chaos Gate

Demo-Portal Prüfbericht

Aggressiver Consent-Stresstest: 15 ausgeführte Chaos-Szenarien, 34 dokumentierte Befund-Zeilen, 56 beobachtete Tracker-Requests. Beweise mit Zeitlinie und Storage-Vergleich.

9 Befundgruppen — aus 34 dokumentierte Befund-Zeilen destilliert. Was zuerst zu beheben ist, steht unter Code-Lösungen.

Ziel: http://127.0.0.1:8787/index.html Scan: 21.10.2026, 20:27:38 Dauer: 40.9 s
Technisches Gate: BLOCKED Verletzt: «Keine Analytics-Requests vor Zustimmung», «Kein Tracking ohne gültige Einwilligung», «Kein Tracking nach Widerruf», «Kein Tracking nach gespeicherter Ablehnung», «Keine Drittanbieter-Embeds vor Zustimmung», «Keine doppelten Analytics-Events». 1 Szenario konnten nicht abschliessend bewertet werden. Eine rechtliche Gesamtbewertung erfolgt nicht.

01Executive Summary

Ausschliesslich abgeleitet aus den tatsächlich ausgeführten Szenarien dieses Scans.

Der Scan führte 15 Szenarien aus: happy-path-denied, happy-path-accepted, fast-click, state-manipulation, network-drop, consent-revoked, category-selective, consent-persistence, banner-ignored, subpage-spa, cmp-failure, embed-leaks, consent-mode-v2, duplicate-events, mobile-usability. Ergebnis: 2 bestanden · 12 auffällig · 1 nicht prüfbar · 0 nicht anwendbar.

Geführt werden 34 dokumentierte Befund-Zeilen und 56 beobachtete Requests mit erkanntem Tracker (Timelines aller Szenarien — auch dort, wo keine Violation-Row entstand).

15Szenarien geprüft
2bestanden
12auffällig
34Befunde (Leaks)
56beobachtete Requests
Hinweis: Technisches Hilfsmittel, keine Rechtsberatung. / Technical aid, not legal advice. Die Schweregrad-Einstufung je Rechtsraum ist eine technisch-juristische Einordnungshilfe und ersetzt keine Beratung.

02Jurisdictions

Dieselben technischen Fakten, unterschiedliche Konsequenz. Die Einstufung erfolgt je Rechtsraum — eine globale Compliance-Aussage wäre unseriös.

P1

Schweiz

In diesem Rechtsraum gilt für personalisierte Werbung in der Praxis häufig eine Einwilligungslösung (vergleichbare Aufsichtspraxis); Pre-Consent-Tracking ist ein Risiko, nicht zwingend ein klarer Rechtsbruch. Zweck und Technologie mit einbeziehen.

revDSG (nDSG) · FDPIC-Richtlinien · UWG (irreführende Praktiken)

P0

Europäische Union

Opt-In-Pflicht für nicht-essenzielle Tracker. Ein vor der Einwilligung beobachteter Request ist ein schwerwiegender Compliance-Hinweis — die rechtliche Einstufung als Verstoß erfordert die Prüfung von Zweck, Technologie und Consent-Zustand.

GDPR/DSGVO · ePrivacy-Richtlinie · TTDSG (DE) · Google Consent Mode v2 (EEA)

P0

Vereinigtes Königreich

Opt-In-Pflicht für nicht-essenzielle Tracker. Ein vor der Einwilligung beobachteter Request ist ein schwerwiegender Compliance-Hinweis — die rechtliche Einstufung als Verstoß erfordert die Prüfung von Zweck, Technologie und Consent-Zustand.

UK GDPR · PECR

P2

USA — Kalifornien (CCPA/CPRA)

Opt-out-Modell: technischer Befund ohne per-se-Verstoß. Offenlegung, Opt-out-Wege und GPC-Unterstützung prüfen.

CCPA/CPRA · Do Not Sell / Share · Global Privacy Control (GPC) · Opt-out model

P1

Brasilien (LGPD)

In diesem Rechtsraum gilt für personalisierte Werbung in der Praxis häufig eine Einwilligungslösung (vergleichbare Aufsichtspraxis); Pre-Consent-Tracking ist ein Risiko, nicht zwingend ein klarer Rechtsbruch. Zweck und Technologie mit einbeziehen.

LGPD

P2

Rest der Welt

Nicht bewertet — länderspezifische Prüfung erforderlich. Reiner technischer Befund.

Landesspezifisch (z. B. PIPEDA, PDPA, APPs)

03Szenarien & Beweise

Jedes ausgeführte Szenario mit Status, Ablauf, Tracker-Requests, Storage-Diff und Screenshots. Ein nicht gefundenes Merkmal ergibt kein grünes Häkchen — sondern «nicht prüfbar».

happy-path-denied auffällig

Pre-Consent-Leak bereits beim Seitenaufruf (2 Request(s)). Szenario wurde trotzdem ausgeführt und vollständig dokumentiert.

Ablauf

gotopre-consent-leak-on-load(2)click:rejectphase:post-reject

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:26:57 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:26:57 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ

Storage-Diff

localStorage: + dp_marketing + dp_analytics + dp_consent

Consent-Werte: + dp_marketing = 0 + dp_analytics = 0 + dp_consent = denied

geprüft 21.10.2026, 20:26:58 · http://127.0.0.1:8787/index.html
happy-path-accepted auffällig

Pre-Consent-Leak bereits beim Seitenaufruf (3 Request(s)). Szenario wurde trotzdem ausgeführt und vollständig dokumentiert.

Ablauf

gotopre-consent-leak-on-load(2)click:acceptphase:post-accept

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:26:58 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:26:58 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:26:58 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:26:58 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&

Storage-Diff

localStorage: + dp_marketing + dp_analytics + dp_consent

Consent-Werte: + dp_marketing = 1 + dp_analytics = 1 + dp_consent = accepted

geprüft 21.10.2026, 20:27:00 · http://127.0.0.1:8787/index.html
fast-click auffällig

4 Tracker-Request(s) in unzulässiger Phase (pre-consent/post-reject/post-wipe/post-revoke).

Ablauf

goto:commitclick:same-origin-link

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:00 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:00 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:00 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:00 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
geprüft 21.10.2026, 20:27:01 · http://127.0.0.1:8787/index.html
state-manipulation auffällig

Pre-Consent-Leak bereits beim Seitenaufruf (3 Request(s)). Szenario wurde trotzdem ausgeführt und vollständig dokumentiert.

Ablauf

gotopre-consent-leak-on-load(2)click:acceptphase:post-acceptwipe:storage+cookies phase:post-wipereload:post-wipeevents:post-wipe

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:01 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:01 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:01 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:01 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:02 Google Analytics 4 post-wipe https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:02 YouTube Embed post-wipe https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
geprüft 21.10.2026, 20:27:03 · http://127.0.0.1:8787/index.html
network-drop auffällig

2 Tracker-Request(s) in unzulässiger Phase (pre-consent/post-reject/post-wipe/post-revoke).

Ablauf

goto:cmp-blocked

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:03 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:03 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
geprüft 21.10.2026, 20:27:04 · http://127.0.0.1:8787/index.html
consent-revoked auffällig

Nach Widerruf (Beobachtungsfenster 2000 ms, Seitenwechsel + Events): 1 Tracker-Request(s), 0 Rest-ID(s). Widerruf-Diff: 3 Storage-Eintrag(e) entfernt, 0 verblieben (Peak nach Accept → Endzustand).

Ablauf

gotoscreenshot:01-bannerclick:acceptsnapshot:after-acceptscreenshot:02-after-acceptphase:post-revokeclick:revokepost-revoke:gotopost-revoke:events observe=2000msscreenshot:03-after-revoke
Aktions-Zeitlinie (10)
21.10.2026, 20:27:04goto
21.10.2026, 20:27:04screenshot:01-banner
21.10.2026, 20:27:04click:accept
21.10.2026, 20:27:05snapshot:after-accept
21.10.2026, 20:27:05screenshot:02-after-accept
21.10.2026, 20:27:05phase:post-revoke
21.10.2026, 20:27:05click:revoke
21.10.2026, 20:27:06post-revoke:goto
21.10.2026, 20:27:06post-revoke:events observe=2000ms
21.10.2026, 20:27:08screenshot:03-after-revoke

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:04 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:04 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:04 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:04 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:05 Google Analytics 4 post-revoke https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&

Storage-Diff Widerruf (Peak nach Accept → Endzustand)

Widerruf-Diff localStorage: − dp_marketing − dp_analytics − dp_consent

Widerruf-Diff Consent-Werte: − dp_marketing = 1 − dp_analytics = 1 − dp_consent = accepted

Keine Residual-IDs nach Widerruf.

01-banner 21.10.2026, 20:27:04
01-banner
02-after-accept 21.10.2026, 20:27:05
02-after-accept
03-after-revoke 21.10.2026, 20:27:08
03-after-revoke
geprüft 21.10.2026, 20:27:08 · http://127.0.0.1:8787/index.html
category-selective bestanden

Kategorie-Auswahl bestanden (keine Marketing-Tracker nach «nur Statistik»); zusätzlich 2 Pre-Consent-Request(s) vor der Auswahl dokumentiert. Erlaubtes Analytics-Tracking nach Freigabe belegt (1 Request(s), Phase post-selection). Gespeicherte Kategorien: dp_marketing=0, dp_analytics=1, dp_consent=categories. Prüfumfang: Klick auf «Auswahl speichern» (Marketing aus, Statistik an), danach 1,8 s Beobachtungsfenster mit 1 Tracker-Request(s) in Phase post-selection. Interaktionen: Settings öffnen, Checkboxen setzen, Speichern.

Ablauf

gotoclick:settingscategories:marketing-off(2)click:save-choices

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:08 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:08 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:08 Google Analytics 4 post-selection https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&

Storage-Diff

localStorage: + dp_marketing + dp_analytics + dp_consent

Consent-Werte: + dp_marketing = 0 + dp_analytics = 1 + dp_consent = categories

geprüft 21.10.2026, 20:27:10 · http://127.0.0.1:8787/index.html
consent-persistence auffällig

4 Tracker-Request(s) trotz gespeicherter Ablehnung.

Ablauf

gotoclick:rejectreloadgoto:subpagerestart:storageState

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:10 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:10 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:11 Google Analytics 4 post-reject https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:11 YouTube Embed post-reject https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:12 Google Analytics 4 post-reject-restart https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:12 YouTube Embed post-reject-restart https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
geprüft 21.10.2026, 20:27:13 · http://127.0.0.1:8787/index.html
banner-ignored auffällig

3 Tracker ohne Consent-Klick aktiv (Timer/Scroll/Interaktion).

Ablauf

gotoscreenshot:01-loadedwait:2500msscroll:bottomclick:page-bodytype:testscreenshot:02-after-interact
Aktions-Zeitlinie (7)
21.10.2026, 20:27:13goto
21.10.2026, 20:27:13screenshot:01-loaded
21.10.2026, 20:27:16wait:2500ms
21.10.2026, 20:27:16scroll:bottom
21.10.2026, 20:27:17click:page-body
21.10.2026, 20:27:18type:test
21.10.2026, 20:27:19screenshot:02-after-interact

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:13 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:13 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:16 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
01-loaded 21.10.2026, 20:27:13
01-loaded
02-after-interact 21.10.2026, 20:27:19
02-after-interact
geprüft 21.10.2026, 20:27:19 · http://127.0.0.1:8787/index.html
subpage-spa auffällig

4 Tracker auf Unterseite/SPA ohne Consent.

Ablauf

goto:subpage/blog/goto:subpage/kontakt.htmlgoto:subpage/shop/goto:subpage/impressum.htmlscreenshot:01-subpagesgoto:rootspa:pushStatespa:click-internalscreenshot:02-after-spa
Aktions-Zeitlinie (9)
21.10.2026, 20:27:19goto:subpage/blog/
21.10.2026, 20:27:20goto:subpage/kontakt.html
21.10.2026, 20:27:21goto:subpage/shop/
21.10.2026, 20:27:21goto:subpage/impressum.html
21.10.2026, 20:27:22screenshot:01-subpages
21.10.2026, 20:27:22goto:root
21.10.2026, 20:27:22spa:pushState
21.10.2026, 20:27:23spa:click-internal
21.10.2026, 20:27:24screenshot:02-after-spa

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:22 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:22 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:23 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:23 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
01-subpages 21.10.2026, 20:27:22
01-subpages
02-after-spa 21.10.2026, 20:27:24
02-after-spa
geprüft 21.10.2026, 20:27:24 · http://127.0.0.1:8787/index.html
cmp-failure auffällig

4 Tracker im Zeitfenster bei verzögertem/defektem CMP.

Ablauf

route:cmp-delay-2500msgotowait:window-2000msscreenshot:01-delay-windowroute:cmp-abortreload:without-cmpscreenshot:02-cmp-abort
Aktions-Zeitlinie (7)
21.10.2026, 20:27:24route:cmp-delay-2500ms
21.10.2026, 20:27:24goto
21.10.2026, 20:27:26wait:window-2000ms
21.10.2026, 20:27:26screenshot:01-delay-window
21.10.2026, 20:27:26route:cmp-abort
21.10.2026, 20:27:28reload:without-cmp
21.10.2026, 20:27:28screenshot:02-cmp-abort

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:24 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:24 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:26 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:26 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
01-delay-window 21.10.2026, 20:27:26
01-delay-window
02-cmp-abort 21.10.2026, 20:27:28
02-cmp-abort
geprüft 21.10.2026, 20:27:28 · http://127.0.0.1:8787/index.html
embed-leaks auffällig

1 Embed-/Widget-Request(s) vor Consent-Freigabe.

Ablauf

gotoembeds:found(1)scroll:halfscreenshot:01-embeds
Aktions-Zeitlinie (4)
21.10.2026, 20:27:28goto
21.10.2026, 20:27:28embeds:found(1)
21.10.2026, 20:27:30scroll:half
21.10.2026, 20:27:31screenshot:01-embeds

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:28 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:28 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:31 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
01-embeds 21.10.2026, 20:27:31
01-embeds
geprüft 21.10.2026, 20:27:32 · http://127.0.0.1:8787/index.html
consent-mode-v2 nicht prüfbar

consent-mode states: analytics_storage=unset, ad_storage=unset, ad_user_data=unset, ad_personalization=unset · google requests: 1 · ga cookies: none · Kein Consent Mode (dataLayer) gefunden — nicht prüfbar.

Ablauf

gotoconsent:default(none)click:rejectconsent:after(none)screenshot:01-after-choice
Aktions-Zeitlinie (5)
21.10.2026, 20:27:33goto
21.10.2026, 20:27:33consent:default(none)
21.10.2026, 20:27:33click:reject
21.10.2026, 20:27:34consent:after(none)
21.10.2026, 20:27:34screenshot:01-after-choice

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:33 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:33 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ

Storage-Diff

localStorage: + dp_marketing + dp_analytics + dp_consent

Consent-Werte: + dp_marketing = 0 + dp_analytics = 0 + dp_consent = denied

01-after-choice 21.10.2026, 20:27:34
01-after-choice
geprüft 21.10.2026, 20:27:34 · http://127.0.0.1:8787/index.html
duplicate-events auffällig

page_view-Beacons nach Consent-Reload: 3 · Doppelte Events möglich (Plugin + GTM parallel). · Keine verdächtigen First-Party-Tracking-Pfade.

Ablauf

gotoclick:acceptreload:after-consentscreenshot:01-after-reload
Aktions-Zeitlinie (4)
21.10.2026, 20:27:35goto
21.10.2026, 20:27:35click:accept
21.10.2026, 20:27:35reload:after-consent
21.10.2026, 20:27:37screenshot:01-after-reload

Tracker-Requests

ZeitTrackerPhaseRequest
21.10.2026, 20:27:34 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:34 YouTube Embed post-accept https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:35 YouTube Embed post-accept https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&
21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&

Storage-Diff

localStorage: + dp_marketing + dp_analytics + dp_consent

Consent-Werte: + dp_marketing = 1 + dp_analytics = 1 + dp_consent = accepted

01-after-reload 21.10.2026, 20:27:37
01-after-reload
geprüft 21.10.2026, 20:27:37 · http://127.0.0.1:8787/index.html
mobile-usability bestanden

Accept und Reject im Mobile-Viewport bedienbar. Accept: gefunden sichtbar=ja 163x46px touch=ok · Reject: gefunden sichtbar=ja 163x46px touch=ok · Tap-Reject: ok

Ablauf

goto:mobile-390x844screenshot:01-mobile-bannerprobe:accept gefunden sichtbar=ja 163x46px touch=okprobe:reject gefunden sichtbar=ja 163x46px touch=oktap:reject=ok
Aktions-Zeitlinie (5)
21.10.2026, 20:27:37goto:mobile-390x844
21.10.2026, 20:27:37screenshot:01-mobile-banner
21.10.2026, 20:27:37probe:accept gefunden sichtbar=ja 163x46px touch=ok
21.10.2026, 20:27:37probe:reject gefunden sichtbar=ja 163x46px touch=ok
21.10.2026, 20:27:37tap:reject=ok

Keine Tracker-Requests in diesem Szenario erfasst.

Storage-Diff

localStorage: + dp_marketing + dp_analytics + dp_consent

Consent-Werte: + dp_marketing = 0 + dp_analytics = 0 + dp_consent = denied

01-mobile-banner 21.10.2026, 20:27:37
01-mobile-banner
geprüft 21.10.2026, 20:27:38 · http://127.0.0.1:8787/index.html

04Befunde (Regelverstösse)

Vollständige Liste der dokumentierten Tracker-Requests ohne gültige Einwilligung — verletzt die konfigurierte Regel «Keine Analytics-Requests vor Zustimmung».

SzenarioTrackerRequestZeit
happy-path-denied Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:26:57
happy-path-denied YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:26:57
happy-path-accepted Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:26:58
happy-path-accepted YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:26:58
happy-path-accepted Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-activation
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-activation
21.10.2026, 20:26:58
fast-click Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:00
fast-click YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:00
fast-click Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:00
fast-click YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:00
state-manipulation Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:01
state-manipulation YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:01
state-manipulation Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-activation
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-activation
21.10.2026, 20:27:01
state-manipulation Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:02
state-manipulation YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:02
network-drop Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:03
network-drop YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:03
consent-revoked Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=revoke-leak
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=revoke-leak
21.10.2026, 20:27:05
consent-persistence Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:11
consent-persistence YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:11
consent-persistence Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:12
consent-persistence YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:12
banner-ignored Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:13
banner-ignored YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:13
banner-ignored Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=timer-leak
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=timer-leak
21.10.2026, 20:27:16
subpage-spa Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:22
subpage-spa YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:22
subpage-spa Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:23
subpage-spa YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:23
cmp-failure Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:24
cmp-failure YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:24
cmp-failure Google Analytics 4
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:26
cmp-failure YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:26
embed-leaks YouTube Embed
marketing
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
21.10.2026, 20:27:28
duplicate-events Analytics page_view
analytics
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
21.10.2026, 20:27:37

05Was zuerst beheben

9 Befundgruppen — gruppiert aus 34 dokumentierte Befund-Zeilen. «N Requests» zählt die dokumentierten Zeilen derselben Ursache, nicht unabhängige Testläufe.

#TrackerRegelReproduktion
1 Google Analytics 4 pre-consent-tracking 14 Requests
2 YouTube Embed pre-consent-tracking 11 Requests
3 Google Analytics 4 tracking-after-deny 2 Requests
4 YouTube Embed tracking-after-deny 2 Requests
5 Google Analytics 4 tracking-without-consent 1 Request
6 YouTube Embed tracking-without-consent 1 Request
7 Google Analytics 4 tracking-after-revoke 1 Request
8 YouTube Embed pre-consent-embed 1 Request
9 Analytics page_view duplicate-events 1 Request

06Beobachtete Tracker-Requests

Alle erfassten Tracker-Requests aus den Szenario-Timelines — auch solche, die keine eigene Violation-Row erzeugt haben. 34 dokumentierte Befund-Zeilen gegenüber 56 Beobachtungen.

SzenarioZeitTrackerPhaseRequest
happy-path-denied 21.10.2026, 20:26:57 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
happy-path-denied 21.10.2026, 20:26:57 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
happy-path-accepted 21.10.2026, 20:26:58 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
happy-path-accepted 21.10.2026, 20:26:58 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
happy-path-accepted 21.10.2026, 20:26:58 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
happy-path-accepted 21.10.2026, 20:26:58 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
fast-click 21.10.2026, 20:27:00 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
fast-click 21.10.2026, 20:27:00 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
fast-click 21.10.2026, 20:27:00 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
fast-click 21.10.2026, 20:27:00 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
state-manipulation 21.10.2026, 20:27:01 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
state-manipulation 21.10.2026, 20:27:01 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
state-manipulation 21.10.2026, 20:27:01 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
state-manipulation 21.10.2026, 20:27:01 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
state-manipulation 21.10.2026, 20:27:02 Google Analytics 4 post-wipe https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
state-manipulation 21.10.2026, 20:27:02 YouTube Embed post-wipe https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
network-drop 21.10.2026, 20:27:03 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
network-drop 21.10.2026, 20:27:03 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
consent-revoked 21.10.2026, 20:27:04 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
consent-revoked 21.10.2026, 20:27:04 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
consent-revoked 21.10.2026, 20:27:04 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
consent-revoked 21.10.2026, 20:27:04 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
consent-revoked 21.10.2026, 20:27:05 Google Analytics 4 post-revoke https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=revoke-
category-selective 21.10.2026, 20:27:08 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
category-selective 21.10.2026, 20:27:08 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
category-selective 21.10.2026, 20:27:08 Google Analytics 4 post-selection https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=categor
consent-persistence 21.10.2026, 20:27:10 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
consent-persistence 21.10.2026, 20:27:10 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
consent-persistence 21.10.2026, 20:27:11 Google Analytics 4 post-reject https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
consent-persistence 21.10.2026, 20:27:11 YouTube Embed post-reject https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
consent-persistence 21.10.2026, 20:27:12 Google Analytics 4 post-reject-restart https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
consent-persistence 21.10.2026, 20:27:12 YouTube Embed post-reject-restart https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
banner-ignored 21.10.2026, 20:27:13 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
banner-ignored 21.10.2026, 20:27:13 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
banner-ignored 21.10.2026, 20:27:16 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=timer-l
subpage-spa 21.10.2026, 20:27:22 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
subpage-spa 21.10.2026, 20:27:22 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
subpage-spa 21.10.2026, 20:27:23 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
subpage-spa 21.10.2026, 20:27:23 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
cmp-failure 21.10.2026, 20:27:24 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
cmp-failure 21.10.2026, 20:27:24 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
cmp-failure 21.10.2026, 20:27:26 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
cmp-failure 21.10.2026, 20:27:26 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
embed-leaks 21.10.2026, 20:27:28 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
embed-leaks 21.10.2026, 20:27:28 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
embed-leaks 21.10.2026, 20:27:31 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=timer-l
consent-mode-v2 21.10.2026, 20:27:33 Google Analytics 4 pre-consent https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
consent-mode-v2 21.10.2026, 20:27:33 YouTube Embed pre-consent https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
duplicate-events 21.10.2026, 20:27:34 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
duplicate-events 21.10.2026, 20:27:34 YouTube Embed post-accept https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
duplicate-events 21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
duplicate-events 21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=accept-
duplicate-events 21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&el=head-bootstrap
duplicate-events 21.10.2026, 20:27:35 YouTube Embed post-accept https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ
duplicate-events 21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=load-1
duplicate-events 21.10.2026, 20:27:35 Google Analytics 4 post-accept https://www.google-analytics.com/g/collect?v=2&tid=G-DEMO01&en=page_view&dl=%2Findex.html&el=load-2

07Empfehlungen

Ausschliesslich aus belegten Befunden dieses Scans abgeleitet — Beobachtung und Massnahme getrennt.

  1. Alle Pre-Consent-Tracker und -Embeds bis zur Einwilligung abschalten (Defer-Muster) oder in die CMP-Steuerung hängen — belegt durch die Befunde im Register.
  2. Tracking nach Widerruf/Ablehnung stoppen: Consent-Status server- und clientseitig respektieren — belegt durch die Befunde im Register.
  3. Doppelte Analytics-Einträge vermeiden: genau eine Tracking-Quelle betreiben (z. B. nur gtag oder nur Tag-Manager) — belegt durch die Befunde im Register.
  4. Nicht abschliessend bewertete Szenarien manuell prüfen, bevor das Ergebnis gewertet wird — ein fehlendes Prüfmerkmal ist kein grünes Häkchen.

08Code-Lösungen

Schematische Umsetzungsmuster zu den verletzten Regeln dieses Scans — an die eigene CMP/Tracker-Stack anpassen, kein Copy-Paste-Fix.

Tracker erst nach Einwilligung laden (Defer-Muster)

pre-consent-tracking
<!-- Vorher: feuert sofort im <head> -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){ dataLayer.push(arguments); }
  gtag('js', new Date());
  gtag('config', 'G-XXXX');
</script>

<!-- Nachher: Blockiert bis die CMP die Kategorie freigibt -->
<script type="text/plain" data-cookiecategory="analytics"
        data-src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<script type="text/plain" data-cookiecategory="analytics">
  window.dataLayer = window.dataLayer || [];
  function gtag(){ dataLayer.push(arguments); }
  gtag('js', new Date());
  gtag('config', 'G-XXXX');
</script>

<!-- CMP-Callback: bei Akzeptieren Typ umschreiben und ausführen -->
<script>
  window.addEventListener('consent-given', (e) => {
    if (!e.detail?.analytics) return;
    document.querySelectorAll('script[data-cookiecategory="analytics"]').forEach((s) => {
      const t = document.createElement('script');
      t.type = 'text/javascript';
      if (s.dataset.src) t.src = s.dataset.src;
      else t.text = s.text;
      s.replaceWith(t);
    });
  });
</script>

Auch nach Widerruf-Reset keine Tracker ohne erneute Zustimmung

tracking-without-consent
<!-- Consent-Status ist die einzige Eintrittskontrolle -->
<script>
  function trackerAllowed(category) {
    const c = window.__consent; // von der CMP gesetzt
    return !!(c && c[category] === true);
  }

  // Kein direkter Aufruf von gtag/pixel/fbq ohne diesen Check.
  if (trackerAllowed('analytics')) {
    gtag('config', 'G-XXXX');
  }
</script>

Nach Widerruf: Tracker stoppen und Rest-IDs bereinigen

tracking-after-revoke
// Schematisches Muster — an die eigene CMP/Tracker anpassen.
// In den Revoke-Handler der CMP einhängen.
function onConsentRevoked() {
  // 1. Laufende Tracker abschalten
  window['ga-disable-G-XXXX'] = true;
  if (window.gtag) {
    gtag('consent', 'update', {
      ad_storage: 'denied',
      analytics_storage: 'denied',
      ad_user_data: 'denied',
      ad_personalization: 'denied',
    });
  }

  // 2. Tracker-Cookies löschen (nur IDs, die der Scan als Residual gemeldet hat)
  const names = ['_ga', '_gid', '_gat', '_fbp', '_fbc', 'fr'];
  for (const name of names) {
    for (const path of ['/', '/blog', '/shop']) {
      document.cookie = name + '=; Max-Age=0; path=' + path + '; SameSite=Lax';
      document.cookie = name + '=; Max-Age=0; path=' + path +
        '; domain=.' + location.hostname.replace(/^www\./, '') + '; SameSite=Lax';
    }
  }

  // 3. Tracker-Residual aus localStorage/sessionStorage entfernen.
  // WICHTIG: CMP-Entscheidungsspeicher (OptanonConsent, CookieConsent,
  // usercentrics-consent) NICHT löschen — dort steht die Ablehnung.
  const residualPrefixes = ['_ga', '_gid', '_gat', '_fbp', '_fbc'];
  for (const store of [localStorage, sessionStorage]) {
    for (const key of Object.keys(store)) {
      if (residualPrefixes.some((p) => key === p || key.startsWith(p + '.'))) {
        store.removeItem(key);
      }
    }
  }
}

Ablehnung respektieren: kein Tracking ohne Opt-In

tracking-after-deny
// CMP: Choice speichern und Tracker erst bei explizitem Accept aktivieren
function onConsentChoice(choice) {
  // choice = { analytics: boolean, marketing: boolean }
  if (!choice.analytics) {
    window['ga-disable-G-XXXX'] = true;
    window.gtag?.('consent', 'update', { analytics_storage: 'denied' });
    return; // keine Analytics-Requests
  }
  window['ga-disable-G-XXXX'] = false;
  window.gtag?.('consent', 'update', { analytics_storage: 'granted' });
  gtag('config', 'G-XXXX');
}

Externe Embeds hinter eine Consent-Fassade legen

pre-consent-embed
<!-- Vorher: iframe lädt Drittinhalte ohne Einwilligung -->
<iframe src="https://www.youtube-nocookie.com/embed/VIDEO_ID"></iframe>

<!-- Nachher: Fassade, iFrame erst nach Klick -->
<div class="embed-gate" data-embed="https://www.youtube-nocookie.com/embed/VIDEO_ID">
  <button type="button" class="embed-gate__load">Video laden (setzt Cookies von YouTube)</button>
</div>
<script>
  document.querySelectorAll('.embed-gate').forEach((gate) => {
    gate.querySelector('button').addEventListener('click', () => {
      const src = gate.dataset.embed;
      gate.innerHTML = '';
      const iframe = document.createElement('iframe');
      iframe.src = src;
      iframe.allow = 'accelerometer; autoplay; encrypted-media; picture-in-picture';
      iframe.allowFullscreen = true;
      gate.appendChild(iframe);
    });
  });
</script>

Doppelte Analytics-Einträge vermeiden (ein Tag-Manager)

duplicate-events
<!-- Vorher: Plugin UND GTM senden beide page_view -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<script>gtag('config', 'G-XXXX');</script>
<!-- PLUS GTM-Container, der dasselbe Event noch einmal sendet -->

<!-- Nachher: genau eine Quelle. Entweder gtag ODER GTM — nicht beide. -->
<!-- Variante A: nur gtag -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<script>
  gtag('js', new Date());
  gtag('config', 'G-XXXX'); // sendet page_view genau einmal
</script>

<!-- Variante B: nur GTM-Container (dataLayer statt zusätzlichem gtag-config) -->
<script>
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({ event: 'page_view' });
</script>