Für einige Webseite können die beiden Google Analytics KPIs “Average Time on Page” und “Average Session Duration” sehr hohen Einfluss auf das verfolgte Ziel der Webseite haben. Während eCommerce-Seiten meist andere KPIs und andere Metriken für die Analyse und Optimierung heranziehen, ist die Verweildauer auf einer einzelnen Seite oder die Dauer einer Session beispielsweise für Informationsportale wichtig. In der Out-of-the-Box Messung mit Google Analytics sind die Metriken jedoch ungenau und für eine Analyse nicht geeignet. Mit ein wenig Aufwand lässt sich das jedoch im Google Tag Manager optimieren.
Problem: Zeitmessung in Google Analytics
Die Messung von Zeitmetriken in Google Analytics erfolgt recht einfach: Durch die Differenz von zwei Timestamps der Interaction-Hit. Interaction-Hits sind neben Pageviews auch Events, sofern diese nicht als Non-Interaction Events gesendet werden. Non-Interaction-Events können im Google Tag Manager anhand der Einstellung erkannt werden:
Zudem ist in der Browser-Console im Google Analytics Hit bei Non-Interaction-Events „ni=1“ vorhanden.
Die Methodik der Zeitmessung durch Differenz der Timestamps führt aber zu zwei Problemen:
Verlust von Zeitinformationen nach dem letzten Hit
Sehen wir uns folgendes Beispiel an:
Ein User öffnet die Webseite und generiert damit einen Pageview. Nach 60 Sekunden klickt er auf der Seite einen Button, der einen Informationsbereich öffnet. In Google Analytics wird dies als Interaction Event erfasst. Nach dem Klick bleibt der User noch weitere 300 Sekunden auf der Webseite um die Informationen zu lesen und verlässt dann die Webseite ohne weitere Interaktion (bspw. durch Schließen des Browsers).
Die Google Analytics Metrik „Average Time on Page“ gibt dann die Differenz des Timestamps von Pageviews und Event wieder, also 60 Sekunden. Die Information, dass der User noch weitere 300 Sekunden auf der Webseite verbrachte, wird nicht erfasst, da keine späterer Interaction als das Event erfasst wurde. Genauso verhält es sich bei der Metrik „Average Session Duration“. Auch hier würde der erste und letzte Interaction Hit der Sitzung betrachtet. Da der User die Seite verlässt und keine weiteren Daten generiert, werden die 300 Sekunden hier nicht gezählt.
Time on Page und Session-Duration bei nur einem Hit
Generiert ein User nur einen Hit in einer Session, beispielsweise durch Aufruf einer einzelnen Seite, ist die Dauer der Session immer 0 Sekunden, da kein zweiter Timestamp für die Bildung der Differenz vorhanden ist. Dies beeinträchtigt natürlich die Berechnung der „Average Session Duration“.
Optimierung: Zusätzliches Event senden beim Verlassen der Seite
Um diese Metriken in der Erfassung zu optimieren, kann ein Interaction-Event gesendet werden, wenn der User die Seite verlässt. Dies erfolgt zweistufig:
- Implementierung eines before-unload Listeners
- Senden des Events
Das Window: beforeunload event wird vom Browser ausgelöst, wenn der Browser beginnt, das aktuell geladene (HTML-)Dokument auszublenden. Das Dokument ist zu diesem Zeitpunkt noch vollständig sichtbar. Alle gängigen Browser unterstützen diese Funktionalität, auch wenn nicht mit allen Features (siehe https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event).
Das beforeunload Event wird ausgelöst über einen Listener, der per Custom-HTML-Tag auf jeder Seite beim Pageview implementiert wird. Löst der Listener dann das beforeunload-Event aus, erfolgt ein push in den dataLayer, das im Google Tag Manager wiederum als Trigger für das Event genutzt werden kann. Das beforeunload-Event wird im Google Tag Manager als Custom-HTML-Tag mit dem Trigger „Pageview“ implementiert.
Code
(nach https://www.simoahava.com/analytics/fire-trigger-when-user-about-to-leave-page/):
<script>
window.addEventListener('beforeunload', function() {
window.dataLayer.push({
event: 'beforeunload'
});
});
</script>
Nach der Implementierung kann diese nun getestet werden, indem eine Seite im Preview Modus des Google Tag Manager aufgerufen wird. Beim Verlassen der Seite wird das Event „beforeunload“ im dataLayer ausgeöst.
Auf dieses Event im dataLayer wird nun ein Interaction-Event nach Google Analytics gesendet.
Tag:
Trigger:
Das Event wird nun bei beforeunload an Google Analytics gesendet und die Zeitmetriken werden nun ohne die oben genannten Ungenauigkeiten gemessen.
Update: Meine Rechtfertigung 😉
Dieser Artikel wurde im beyond pageview Podcast BP 3.08: Webanalyse besprochen. Offenbar gab es ein wenig Verwirrung um die Lösung bei Michael und Markus. Daher noch ein paar Ergänzungen zu den Fragen:
Wie Michael absolut richtig bemerkt (und ich im Artikel unterschlagen habe) ist bei einer Implementierung die Bounce-Rate immer 0%, da immer ein Event gesendet wird, auch wenn der User die erste Seite der Session ohne weitere Interaktion verlässt. Danke für die Klarstellung, Michael. Daher sollte die Lösung immer in einen gesonderten View einfließen bzw. aus dem Master-View gefiltert werden.
Wofür brauche ich das? Für bestimmte Webseiten kann eine Avg. Session Duration und Time on Page sehr relevant sein. Ein Beispiel: Webseiten mit hohem Video-Anteil können ein Bedürfnis haben, zu verstehen, ob und wie das Starten eines Video die Verweilzeit beeinflusst.
Wie Markus andeutete, kann dies auch mit Timern, d.h. ein alle paar Sekunden per GTM gesendetes Event, erfolgen. Dies hat zwei Nachteile., Erstens führt dies nur einer Näherung, deren Ungenauigkeit durch den Abstand der Events bestimmt wird. Zweitens werden dadurch die gesendeten Events meist vervielfachst, was bei gut besuchten Webseiten zu einem Überschreiten des Hit-Limits bei GA Standard bzw. bei GA 360 zu höheren Kosten führen kann.
Hinsichtlich der Interaction/Non-Interaction verweise ich mal auf https://support.google.com/analytics/answer/1006253?hl=en. Ich lasse mich aber auch gerne eines Besseren belehren.
Die Diskussion ist hiermit eröffnet. Ich freue mich auf zahlreiche Teilnahme.;)
1 thought on “Quick-Tipp: Google Analytics Metrik “Average Time on Page” und “Average Session Duration” optimieren”