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

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. Erforderliche Felder sind mit * markiert.