Ich zeige im Schnelldurchlauf und relativ schematisch die Erkenntnisse des heutigen Tages: Probleme und Stolpersteine beim Einbinden des Google Tag Managers in Verbindung mit Google Analytics und einer eigenen Cookie-Consent Lösung.
Probleme mit eigenem Cookie-Consent-Banner und Google Tag Manager / Google Analytics
Möchte man einen eigenen Cookie-Banner umsetzen, der dem Google Tag Manager erlaubt, Analytics auf der Seite einzubinden, ergeben sich ein paar Probleme:
- Trotz korrekter Einbindung nach Anleitung wird die erste Seite, auf der auch die Einwilligung im Cookie-Banner passiert, nicht in Google Analytics getracked. Erst der nächste Seitenaufruf wird erfasst. Dadurch geht die Seite mit dem Cookie-Banner – sprich die erste Seite, die der User besucht – im Tracking verloren.
- Obwohl im Tag Manager für den Analytics Tag unter “Integrierte Einwilligungsprüfungen” steht, dass als Default
ad_storage
undanalytics_storage
aufgranted
stehen müssen, bevor das Tracking beginnt,wird dies nicht beachtet
. Auch beim Verwenden des default-dataLayers, der diese beiden Variablen auf “denied” setzt,wird der pageView getrackt
.
Zu Punkt 1 waren die Erkenntnisse:
- Ein reines push in den dataLayer über
gtag('consent', 'update', ...)
mitgranted
führt nicht automatisch auch zu einem Einbinden von Google Analytics – und damit zu einem direkten PageView-Tracking! - Alles, was man am dataLayer für
consent.update
setzt, muss VOR der Einbindung des Tag-Managers-Script-Tags passieren, also z.B. unmittelbar nachdem man die Defaults übergtag('consent', 'default', ...)
angibt. Der dataLayer wird komplett “gefüllt”, dann der Tag-Manager eingebunden, der den Container dann abholt und verarbeitet. - Wird im Nachhinein über
gtag('consent', 'update', ...)
die Einwilligung geändert passiert gar nichts. - Events hingegen, die man über
dataLayer.push({'event': 'deinEventName'});
triggern kann, kommen beim Tag Manager an und erlauben es, auch NACH Laden des Tag-Managers Scripte und Tags in die Seite zu injecten / einzufügen.
Zu Punkt 2 waren die Erkenntnisse:
- Die Doku scheint mir irreführend – oder es ist ein Bug. Im Tag-Manager klingt “Integrierte Einwilligungsprüfungen” wie eine Voreinstellung, die “ad_storage” und “analytics_storage” mit “granted” voraussetzt, damit der Google Analytics Tag eingebunden wird. Er wird aber auch mit
consent.default
und “denied” direkt eingebunden. - Interessant daran: Es werden keine Cookies gesetzt – ein pageView-Tracking findet faktisch aber trotzdem statt, was aus DSGVO-Sicht kritisch ist.
- Lösung ist es, “ad_storage” und “analytics_storage” explizit noch mal unter “Zusätzliche Einwilligung zur Auslösung des Tags erforderlich” anzugeben.
Im Video werden die oben beschriebenen Punkte alle gezeigt.
Links:
Die Anleitung und Codes in der Google Tag Manager Dokumentation:
https://developers.google.com/tag-manager/consent
Das Tag Assistant Legacy Plugin für Chrome:
https://chrome.google.com/webstore/detail/tag-assistant-legacy-by-g/kejbdjndbnbjgmefkgdddjlbokphdefk
Und hier der finale Quelltext aus dem Video als Orientierung.
Bitte nur als Skizze / Funktionsprinzip verstehen 🙂
Denkt daran, das XXXXXXXXXXXXXXX
mit Eurer Google-Tag-Manager-ID zu ersetzen.
<html>
<head>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){
dataLayer.push(arguments);
}
// Default ad_storage to 'denied'.
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied'
});
if (document.cookie.indexOf('dsgvo=1') >-1) {
consentWasGranted();
}
function consentWasGranted() {
gtag('consent', 'update', {
'ad_storage': 'granted',
'analytics_storage': 'granted'
});
}
function consentWasClicked() {
consentWasGranted();
dataLayer.push({'event': 'consentChange'});
document.cookie = 'dsgvo=1';
}
</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','XXXXXXXXXXXXXXX');</script>
<!-- End Google Tag Manager -->
</head>
<body>
<button onclick="consentWasClicked()">Send EVENT</button>
</body>
</html>