Google Tag Manager mit eigenem Cookie-Banner. Tracking passiert erst bei nächstem Seitenaufruf, nicht direkt nach Einwilligung in Cookie-Banner.


Dieses Video verweist Sie auf den Service eines Drittanbieters, um Videoinhalte abzuspielen. Dieser Service kann Daten zu Ihren Aktivitäten sammeln. Mit einem Klick auf „Play" werden Sie zu der Webseite des Drittanbieters weitergeleitet, um das Video anschauen können.

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:

  1. 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.
  2. Obwohl im Tag Manager für den Analytics Tag unter „Integrierte Einwilligungsprüfungen“ steht, dass als Default ad_storage und analytics_storage auf granted 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', ...) mit granted 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 über gtag('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>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.