.

Dienstag, Dezember 01, 2009

Asynchrones Tracking mit Google Analytics

Bei einer Seite mit sehr vielen JavaScript Aufrufen (bspw. viele Events oder virtuelle PageViews) wird der Google Analytics Tracking Code nicht am Ende der Seite vor dem schließenden Body Tag eingebunden, sondern vorher.

Der Hintergrund ist, dass der Code zunächst initialisiert werden muss, damit die dazugehörigen Events und virtuellen PageViews auch entsprechend zugeordnet werden können.

Dies hat den Nachteil, dass bei sehr vielen Aufrufen die Ladezeit der Seite verlangsamt werden kann was nicht besonders schön für die User ist.

Also was tun? Weniger Trakken? Nein!

Denn ab sofort steht allen Google Analytics Nutzern das asynchrone Tracking zur Verfügung.

Was heißt asynchrones Tracking?


google analytics asynchrones tracking
Bislang wurden die Daten übermittelt sobald der Code auf der Seite geladen wurde, bzw. wennimmer bspw. ein Event ausgelöst wurde. Daher habe ich auch immer empfohlen den Code idealerweise möglichst weit unten auf der Seite einzubauen, damit zunächst der Content der Seite geladen wird, eher der Tracking Code ausgeführt wird.

Das Surferlebnis der User geht vor der Erhebung irgendwelcher Web Analyse Daten!

Das asynchrone Tracking läuft etwas anders ab. Hier werden die Daten quasi zunächst gesammelt und dann später, wenn die Seite komplett geladen ist gesammelt als "Paket" an Google übermittelt.

Dies hat einen großen Vorteil für die User der Webiste - keine unnötigen Ladezeiten wegen des Aufrufs eines Web Analyse Pixels.

google analytics
[Dass Google asynchrones Tracking anbietet unterstreicht einmal mehr, dass Ladezeiten ein wichtiges Indiz für die Beurteilung von Websites sind!]

Was muss ich tun?

Zunächst einmal gar nichts! Denn der Wechsel ist absolut freiwillig und der alte Code funktioniert wie gehabt weiter - keine Sorge als!

Um das asynchrone Tracking anzuwenden bedarf es einer Änderung des bisherigen Tracking Codes.

Der bisherige Standard Tracking Code sieht folgendermaßen aus:


web analytics inside - google analytics tracking code

Der Code für das asynchrone Tracking so:


google analytics asynchrones tracking

Auf den ersten Blick ist die Reihenfolge des oberen mit dem unteren Teil vertauscht. Wichtig ist nun aber die der Aufruf

_gaq.push([.....

Zunächst muss also die bisherige UA-Nummer definiert werden:

  _gaq.push(['_setAccount', 'UA-XXXXX-X']);

Diese bleibt natürlich identisch mit Ihrer Account-Nummer.

Verwenden Sie den Standard Tracking Code ohne weitere Anpassungen muss nun der eigentliche bisherige Aufruf angepasst werden:

  _gaq.push(['_trackPageview']);


Achtung für Google Analytics Nutzer die immer noch den urchin.js statt den ga.js nutzen - asynchrones Tracking wird nicht (!) von dem urchin.js Code unterstützt. Sollten Sie also bisher noch nicht gewechselt haben wäre es jetzt vielleicht an der Zeit darüber nachzudenken...

Die Platzierung des neuen asynchronen Codes muss nun nicht mehr vor dem schließenden Body Tag sein, sondern vor dem schließenden Head-Tag - also sehr weit oben auf der Seite.

Weiter oben heißt akkuratere Daten!

Sollten Sie einen individualisierten Code nutzen (vielleicht waren oder sind Sie Kunde von Trakken und haben eine individuelle Implementierung auf Ihrer Seite) so sollten sämtliche individuellen Anpassungen entsprechend des asynchronen Trackings abgeändert werden.

Der neue asynchrone Tracking Code bietet auch verschiedene Varianten des Einbaus. So kann ich wie im obigen Beispiel jede Zeile einzeln mit einen _gaq.push versehen oder aber auch verschiedene Felder in einem _gaq.push kombinieren, bspw. folgendermaßen:

_gaq.push(
['_setAccount', 'UA-XXXXX-X'],
['_trackPageview']
);


Der Vollständigkeit halber hier eine kurze Auflistung verschiedener Individualisierungsmöglichkeiten. Über einige davon habe ich in der Vergangenheit bereits hier geposted, alle Individualisierungen wurden in meinem Buch (Google Analytics - Implementieren.Interpretieren.Profitieren) ausführlich dargestellt

Daher befindet sich hinter der Rubrik die Seitenzahl aus meinem Buch mit dem korrespondierenden Artikel und/oder ein Link zu dem entsprechenden Blog Post.


Mehrere Konten/Profile (S. 81 f. - Kapitel 6.11)

_gaq.push(['_setAccount', 'UA-XXXXX-1']);
_gaq
.push(['_trackPageview']);
_gaq
.push(['b._setAccount', 'UA-XXXXX-2']);
_gaq
.push(['b._trackPageview']);



ClientInfo, Hash, Flash, Title (S. 92 ff. - Kapitel 6.19)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setClientInfo', false]);
_gaq
.push(['_setAllowHash', false]);
_gaq
.push(['_setDetectFlash', false]);
_gaq
.push(['_setDetectTitle', false]);
_gaq
.push(['_trackPageview']);



Event Tracking (S. 94 ff. - Kapitel 6.20)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_trackPageview']);
...
<a onclick="_gaq.push(['_trackEvent', 'name', value]);">click me<\a>



Linker (Seite 68 ff. - Kapitel 6.4)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setDomainName', 'none']);
_gaq
.push(['_setAllowLinker', true]);
_gaq
.push(['_trackPageview']);
...
<a href='http://example.com/test.html'
onclick
='_gaq.push(['_link', 'http://example.com/test.html'); return false;'>click me



Linker mit Formular (Seite 68 ff. - Kapitel 6.4)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setDomainName', 'none']);
_gaq
.push(['_setAllowLinker', true]);
_gaq
.push(['_trackPageview']);
...
<form name='f' method='post' onsubmit='_gaq.push(['_linkByPost', this]);'>
...
form>



E-Commerce (S. 76 ff. - Kapitel 6.9)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_trackPageview']);
_gaq
.push(['_addTrans',
'1234', // order ID - required
'Mountain View', // affiliation or store name
'11.99', // total - required
'1.29', // tax
'5', // shipping
'San Jose', // city
'California', // state or province
'USA' // country
]);
_gaq
.push(['_addItem',
'1234', // order ID - required
'DD44', // SKU/code
'T-Shirt', // product name
'Green Medium', // category or variation
'11.99', // unit price - required
'1' // quantity - required
);
_gaq
.push(['_trackTrans']);



Kampagnen-Umbenennung (S. 85 f. - Kapitel 6.15)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setCampNameKey', 'ga_campaign']); // name
_gaq
.push(['_setCampMediumKey', 'ga_medium']); // medium
_gaq
.push(['_setCampSourceKey', 'ga_source']); // source
_gaq
.push(['_setCampTermKey', 'ga_term']); // term/keyword
_gaq
.push(['_setCampContentKey', 'ga_content']); // content
_gaq
.push(['_setCampIdKey', 'ga_id']); // id number
_gaq
.push(['_setCampNOKey', 'ga_nooverride']); // don't override
_gaq
.push(['_trackPageview']);



Suchmaschinen (S. 70 ff. - Kapitel 6.5, S. 83 f. - Kapitel 6.13)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_addIgnoredOrganic', 'ignore']);
_gaq
.push(['_addIgnoredRef', 'urchin.com']);
_gaq
.push(['_addOrganic', 'new_search_engine', 'q']);
_gaq
.push(['_trackPageview']);



Cookie-Pfad (S. 84 - Kapitel 6.14)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setCookiePath', '/path/of/cookie/']);
_gaq
.push(['_trackPageview']);



Cookie Timeout (S. 75 f. - Kapitel 6.8)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setCookieTimeout', '31536000']);
_gaq
.push(['_trackPageview']);



Session Timeout (S. 74 f. - Kapitel 6.7)

_gaq.push(['_setAccount', 'UA-XXXXX-X']);
_gaq
.push(['_setSessionTimeout', '3600']);
_gaq
.push(['_trackPageview']);



Zugegeben - vielleicht etwas schwere Kost. Dennoch hoffentlich interessant für den ein oder anderen Leser. Feedback? Dann schnell einen Kommentar schreiben....!
 
Google