Skip to content

Instantly share code, notes, and snippets.

@mbaersch
Last active March 16, 2021 12:54
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mbaersch/3deea617eeb0a8452543867a631fecd7 to your computer and use it in GitHub Desktop.
Save mbaersch/3deea617eeb0a8452543867a631fecd7 to your computer and use it in GitHub Desktop.
raw code for handling Google Analytics clientId in a separate secure https cookie and writing it to the dataLayer to be used by ga tracking tags
@mbaersch
Copy link
Author

mbaersch commented Sep 29, 2019

Hinweise zur Verwendung

Der oben stehende Code dient zur Demonstration, wie eine alternative Handhabung einer Client ID zur Wiedererkennung von Besuchern in Google Analytics aussehen kann. Es nutzt nichts, den Code als separate Datei auf den eigenen Server zu laden, sondern die oben stehende Funktionalität muss auf die eine oder andere Weise in das verwendete CMS implementiert werden, so dass sie beim Aufruf aller Seiten ausgeführt wird. Eine Lösung ist je nach System also unterschiedlich komplex. Im einfachsten Fall gibt es eine zentrale Stelle in einem Template, an der die Ausführung updatesicher definiert werden kann. Für Wordpress zum Beispiel könnte dies per Anpassung eines Child-Themes, in der functions.php, als eigenes Plugin oder Teil eines GA- bzw. GTM-Plugins erfolgen.

Da die hier mit einem eigenen Cookie verwaltete Client ID nicht von Google Analytics oder anderen Scripts ausgelesen werden kann, wird sie vom obigen Script in den dataLayer geschrieben oder (auskommentiert) optional für eine direkte Implementierung als globale Variable _secureClientId gespeichert. Wie unten beschrieben ist je nach Nutzung die Platzierung der Ausgabe der globalen Variable bzw. des Eintrags in den dataLayer in Relation zum Trackingcode funktionsrelevant.

Kurz-Anleitung für die Nutzung in einer direkten Implementierung

  • Bei der Initialisierung muss die clientId manuell mit der o. a. globalen Variable besetzt werden. Optional kann auch das Cookie Update des _ga-Cookies deaktiviert werden.
  • Im Fall von Universal Analytics wäre dies z. B. so möglich: ga('create', 'UA-xxxxxxx-1', 'auto', {'cookieUpdate': false, 'clientId': window._secureClientId});
  • Damit dies funktioniert, muss die Ausgabe durch das obige Script vor dem Analytics-Code im Quellcode der Seite erfolgt sein.

Beim Einsatz des Google Tag Managers

Soll im GTM der Eintrag aus dem dataLayer genutzt werden, sind prinzipiell die gleichen Schritte erforderlich.

  • Auslesen der Datenschichtvariable secureClientId als Variable in GA und deren Verwendung als Feld clientId in den Einstellungen aller Analytics-Tags (idealerweise via GA-Einstellungsvariable)
  • Optional auf gleichem Weg setzen des Felds cookieUpdate auf false
  • Anpassung der Trigger aller GA-Tags, die bereits beim Seitenaufruf (gtm.js) feuern auf einen neuen Trigger, der auf das benutzerdefinierte Event clientIdReady aus dem dataLayer reagiert, um sicherzustellen, dass die ID vorhanden und nutzbar ist. Alternativ muss sichergestellt sein, dass die Ausgabe durch den obigen Beispielcode vor dem Code des Google Tag Managers im Quellcode der Seite enthalten ist.

@mbaersch
Copy link
Author

Alternativ zu "cookueUpdate: false" kann auch komplett auf die GA-eigenen Cookies verzichtet werden. Eine Anleitung findet sich unter https://www.markus-baersch.de/blog/cookieloses-tracking-mit-google-analytics/

@DavidHemmerle
Copy link

Hi @mbaersch,

warum soll das Skript nicht als separate Datei auf dem Server funktionieren? Mithilfe eines Custom HTML Tags lässt sich das Skript im GTM initialisieren und mit einem Trigger für alle Seitenaufrufe versehen. Fügt man den Google Analytics Code gleich im Anschluss in das PHP-Skript ein, erhält man einen benutzerdefinierten Pageview ohne ga-Cookie. Übersehe ich etwas oder ist der Beitrag nach den letzten Commits einfach nicht mehr aktuell?

Viele Grüße
David

@mbaersch
Copy link
Author

mbaersch commented Nov 12, 2019

Hallo @DavidHemmerle,

das ist sicher eher ein Missverständnis. Mein Hinweis soll bedeuten, dass es nichts nutzt, das Script als separate Datei auf den Server zu legen und dann nicht "irgendwie" auch aufzurufen. Sie muss also Teil des CMS werden, so dass jeder Seitenaufruf diesen Part ausführt oder man ruft es auf andere Weise auf - freilich geht das auch bei jedem Seitenaufruf via GTM. Ist aber ein separater Hit und damit eben unschön. Dann besser auf die "cookielose" Variante nutzen und auf das _ga-Cookie ganz verzichten; siehe Link im anderen Kommentar.

@DavidHemmerle
Copy link

Hi @mbaersch,

danke für die schnelle Rückmeldung. Angesichts der cookielosen Lösung ist es tatsächlich trivial, diesen Weg zu gehen. Hatte mich nur gefragt, warum beim Senden des Events nicht gleich der Pageview mitgesendet wird. Danke fürs Coding!

@awaismun
Copy link

Hi @mbaersch

Thanks for this solution. How would it work on subdomains which are not part of the same solution as the top domain? The datalayer will be lost when the user navigates from top domain to one of the subdomains which are not part of the topdomain code/solution.

Any solution for that?

@mbaersch
Copy link
Author

Hello @awaismun, just enter your domain starting with a dot to cover all hosts. See comment in the very first line 😉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment