Google Analytics: Stolperfalle Cross Domain Tracking
Google Analytics ist kostenlos, liefert die wichtigsten KPI zu Ihrem Online-Angebot und ist recht einfach in jede Website zu integrieren. Das stimmt soweit, werden jedoch mehrere Subdomains und Klickstrecken auf Domains externer Dienstleister ohne weitere Konfiguration eingesetzt, können Ihre Analysen stark verfälscht werden.
Deshalb möchten wir hier das Problem des Trackings über unterschiedliche Subdomains und Domains hinweg erläutern und Lösungen im Tracking-Code aufzeigen.
[Update 14.10.2010] In den ursprünglichen Beispielen fehlte der Aufruf von _setAllowHash(false). Damit entfällt der Cookie Integritätscheck über einen Hash des Domainnamens. Dieser darf beim Tracking über Domains und Subdomains hinweg nicht durchgeführt werden.
Szenario 1: Tracking über mehrere Subdomains
Nehmen wir an, die Seite www.crazy-tickets.de betreibt unter der Subdomain shop.crazy-tickets.de einen Shop und unter koeln.crazy-tickets.de und berlin.crazy-tickets.de Landingpages für das Suchmaschinenmarketing. Alle Seiten sollen in einem Analytics-Account zusammenfließen, um Besucherströme über die Seitenbereiche zu analysieren, Trafficquellen zu ermitteln und Conversions zu messen.
Google Analytics speichert die Sessiondaten eines Besuchers in einem 1st Party Cookie für die Domain der besuchten Website, da die Akzeptanz für diese Cookies höher ist. Die Gültigkeit des Cookies legt Analytics in der Standardeinstellung nach dem aktuellen Hostnamen der aufgerufenen URL fest. Ein Besucher, der über eine Adwordsanzeige erstmals auf der Seite koeln.crazy-tickets.de ankommt, erhält (vereinfacht dargestellt) folgende Cookies:
Name: __utma Inhalt: 1.1334280718.1283491337.1283499983.1283499983.1 Host: koeln.crazy-tickets.de Name: __utmz Inhalt: utmgclid=CJrm_YPi6qMCFUj-2Aodnhs92g|utmctr=koeln%20tickets Host: koeln.crazy-tickets.de
Im Cookie __utma wird eine eindeutige Benutzerkennung für den Besuch festgelegt. Im Cookie __utmz wird die Trafficquelle festgehalten. In diesem Fall Adwords (utmgclid ist die Auto Tagging ID von Adwords) mit dem Suchbegriff „koeln tickets”.
Für beide Cookies ist die Gültigkeit auf die Subdomain koeln.crazy-tickets.de beschränkt.
Wechselt der Besucher von der Landingpage auf www.crazy-tickets.de, dann prüft Analytics, ob bereits eine Session-Information für den Hostnamen vorliegt. Dies ist nicht der Fall (das Cookie oben ist für diese Domain nicht gültig), also wird ein neues Cookie erzeugt. Damit behandelt Analytics den Besucher jetzt als Neubesucher, die ursprüngliche Quelle des Besuchs, die Adwords-Anzeige, geht verloren, stattdessen wird für den Besuch als Referrer die Landingpage gesetzt.
Als Resultat erhält man eine verfälschte Neubesucherstatistik und Trafficquellen werden nicht sauber nachgehalten, insbesondere die Conversion-Rate und damit die Qualität einer Trafficquelle kann nicht ermittelt werden.
Lösung Teil 1: Tracking Code Konfiguration für Sub-Domain Tracking
Die Behebung dieses Problems ist einfach. Die Tracking API stellt dafür die Methode _setDomainName zur Verfügung. Darin wird auf allen Subdomains die Cookie-Gültigkeit für die Hauptdomain festgelegt.
Für das Beispiel oben sieht der Tracking-Code wie folgt aus:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-xxxxxx-x"); //Analytics Konto ID
pageTracker._setDomainName(".crazy-tickets.de");
pageTracker._setAllowHash(false); //[Update 14.10.2010]
pageTracker._trackPageview();
</script>
So werden alle Besuche auf den Subdomains einem Visit zugeordnet, Trafficquellen und Kampagneninformationen bleiben erhalten.
Lösung Teil 2: Hostnamen als Teil des Seitennamen verwenden
Durch die Verwendung gleicher Pfade auf den einzelnen Subdomains kann es dazu kommen, dass Analytics die Besuche nicht getrennt ausweist, da der Hostname nicht Teil des Seitennamens ist. So werden die Besuche der Seiten
- berlin.crazy-tickets.de/index.php
- www.crazy-tickets.de/index.php
- shop.crazy-tickets.de/index.php
alle unter dem Seitennamen /index.php in Analytics ausgewiesen. Daher ist es empfehlenswert den Hostnamen über eine Filterregel mit im Seitennamen zu erfassen. Die geschieht in den Profileinstellungen unter Filter → Filter hinzufügen:
Google Analytics Filter Hostname im Seitennamen
Jeder Seitenname beginnt jetzt mit dem Hostnamen, so dass eine eindeutige Zuordnung möglich ist.
Szenario 2: Tracking über unterschiedliche Domains
Etwas anders ist das Vorgehen, wenn der Besuch über mehrere Domains hinweg verfolgt werden soll. Ein typisches Beispiel ist die Einbindung von externen Diensten in einem iFrame (z.B. Bezahlservice, Versicherungsrechner, Autokonfigurator).
Nehmen wir an, die Website www.der-neue-superstar.de bindet das Ticketsystem von crazy-tickets.de auf der Seite www.der-neue-superstar.de/tour2010 ein. Hier wird ein iFrame geöffnet, der die Seite superstar.crazy-tickets.de enthält. Vorausgesetzt es kann auf der externen Domain Analytics-Tracking-Code eingesetzt werden, wird dies als Neubesuch mit dem Referrer www.der-neue-superstar.de/tour2010 festgehalten. Informationen zur Trafficquelle sind ab dem Wechsel in den iFrame verloren, der Besucher wird doppelt gezählt.
Lösung
Um hier den Besuch weiterzuverfolgen, müssen die Sessiondaten an die externe Domain übergeben werden. Dazu wird der Tracking-Code der Website wie folgt erweitert:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-xxxxxx-x"); //Analytics Konto ID
pageTracker._setDomainName(".der-neue-superstar.de");
pageTracker._setAllowHash(false); //[Update 14.10.2010]
pageTracker._setAllowLinker(true);
pageTracker._trackPageview();
</script>
Wichtig ist hier das Setzen der Domain und der Aufruf _setAllowLinker(true), der die Sessionweitergabe ermöglicht.
Um die Sessiondaten beim Aufruf des iFrames zu übergeben, muss dessen URL mittels der Methode _getLinkerUrl umgeschrieben werden:
var iframe = document.getElementById('myIFrame');
iframe.src = pageTracker._getLinkerUrl('https://superstar.crazy-tickets.de/');
Auf der externen Seite im iFrame muss ebenfalls der Tracking-Code eingebaut werden:
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-xxxxxx-x"); //Analytics Konto ID
pageTracker._setDomainName("none");
pageTracker._setAllowLinker(true);
pageTracker._trackPageview();
</script>
In der Quelle des iFrame kann überprüft werden, ob die Parameter übergeben wurden. Das sieht beispielsweise so aus:
https://superstar.crazy-tickets.de/tour2010?__utma=1.1334280718.1283491337.1283499983.1283501982.2&__utmb=1.1.10.128133782&__utmc=1&__utmx=-&__utmz=1.1283499983.1.1.utmgclid=CJrm_YPi6qMCFUj-2Aodnhs92g|utmccn=(not%20set)|utmcmd=(not%20set)|utmctr=koeln%20tickets&__utmv=-&__utmk=103037562
Für den Hostnamen der Ticketsystem-Seite müssen nach dem Aufruf Cookies mit der gleichen Besucher-ID (__utma) der Hauptdomain und der gleichen Trafficquelle (__utmz) existieren:
Name: __utma Inhalt: 1.1334280718.1283491337.1283499983.1283499983.1 //muss der ID des __utma Cookies auf der einbindenden Domain entsprechen Host: superstar.crazy-tickets.de Name: __utmz Inhalt: utmgclid=CJrm_YPi6qMCFUj-2Aodnhs92g|utmctr=koeln%20tickets //muss der Trafficquelle des __utmz Cookies auf der einbindenden Domain entsprechen Host: superstar.crazy-tickets.de
Achtung: Einige Browser, unter anderem der Internet Explorer in bestimmten Sicherheitseinstellungen, verbieten iFrames das Setzen von Cookies. Daher muss die Website im iFrame eine P3P Policy im Header übermitteln. Dies sollten externe Dienstleister in den meisten Fällen bereits eingerichtet haben. Weitere Informationen dazu hat Google zusammengestellt.
Fazit
Google Analytics ist ein kostenfreies Tool, das spannende Einblicke in die Performance Ihrer Websites liefern kann. Das richtige Setup ist jedoch Voraussetzung für valide Zahlen – hier sollten Sie nicht am falschen Ende sparen.
Wir unterstützen Sie gern bei der Einrichtung von Analytics.
Happy Tracking!
Referenzen
- Cross Domain Tracking – Google Analytics Tracking Code Documentation
- Tracking mehrerer Domains – Google Analytics Hilfe
Hinweis: alle Beispiele in diesem Post entsprechen dem „traditionellen” Tracking Verfahren. Alle Informationen zur Verwendung des neuen asynchronen Codes finden Sie unter der Infoseite von Google Analytics zum Cross-Domain Tracking.
Kommentare
Verfasst von Gast am 13.10.2010 um 20:59 Uhr.
Verfasst von Marc Zacher am 14.10.2010 um 13:50 Uhr.
Verfasst von Gast am 23.01.2011 um 22:04 Uhr.
Und was meinen Sie?