Piwik: richtige Aufenthaltsdauer und Absprungrate anzeigen
Piwik zeigt die Aufenthaltsdauer von Besuchern nicht richtig an. Die Aufenthaltsdauer in Piwik entspricht der Zeitdifferenz zwischen der ersten und letzten Aktionen auf einer Website, wobei unter einer Aktion ein Klick auf einen Link bzw. das Neuladen der Website gemeint ist.
Kommt ein Besucher auf die Website, liest 30 Minuten lang einen Artikel und schließt danach das Fenster, so erkennt Piwik nur eine Aktion und als Aufenthaltsdauer werden 0s und eine Absprungrate von 100% angezeigt.
Um diesen Designfehler zu beheben gibt es generell zwei Möglichkeiten:
- Trackingsystem von Piwik umschreiben
- Aktionen vortäuschen, wenn der Besucher noch auf der Website ist

Die Aufenthaltsdauer von einer auf neuen Minuten angestiegen.
Die erste Möglichkeit wäre die beste, aber auch die komplizierteste.
Dagegen ist die zweite Möglichkeit ziemlich schnell realisiert: Wird die Website neu geladen, so startet man einen Timer, der nach einer bestimmter Zeit Piwik neu aufruft und so eine Aktion vortäuscht. So lange der Besucher sich auf der Website befindet bekommt Piwik immer den (mehr oder weniger) letzten Aufenthaltszeitpunkt und kann daraus die Aufenthaltsdauer bestimmen.
Bevor man den Timer implementiert muss man sich überlegen wie oft der Timer aufgerufen werden soll. Jede Sekunde eine Serveranfrage zu senden ist nicht empfehlenswert.
Ich habe folgende Zeiten gewählt: 10s, 30s, 1min, 4min, 24min, 84min. Danach wird der Timer nicht weiter aufgerufen um die Statistik nicht unnötig zu verfälschen, wenn jemand vergessen hat das Browserfenster zu schließen.
Letztendlich muss folgenden Tracking-Code auf der Website:
<script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script>
durch diesen ersetzen:
<script type="text/javascript">
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
function prtc(i)
{
// Piwik aufrufen
try {
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
// Zeiten festlegen (in Millisekunden)
// Unterteilung selbst wählen.
if(i == 5)
rt = 10000;
else if(i==4)
rt = 20000;
else if(i==3)
rt = 30000;
else if(i==2)
rt = 3*60000;
else if(i==1)
rt = 20*60000;
else if(i==0)
rt = 60*60000;
if(i >= 0)
{
i--;
// Funktion soll nach einer Recall-Time starten
window.setTimeout("prtc("+i+")",rt);
}
}
// Piwik-Tracking-Funktion aufrufen
prtc(5);
</script>

Die Absprungrate von 80% auf 20% gesunken.
Durch diese Änderung habe ich endlich realistische Werte für meinen Blog bekommen. Die durchschnittliche Besuchszeit ist von einer Minute auf neun angestiegen und die Absprungrate von ungefähr 80% auf 20% gesunken.
Der Nachteil dieser Methode ist, dass die Aktionenanzahl nicht mehr stimmt. Jeder muss für sich entscheiden an welcher Information er mehr interessiert ist. Für mich persönlich ist die Aufenthaltsdauer und die Absprungrate wichtiger als die Aktionenanzahl, da ich daran sehe, ob meine Arbeit sinnvoll ist oder nicht.
- Kategorie: Homepage/Blog , Programmieren
- Letzte Aktualisierung am: 14. December 2011
- 24 Kommentare


Danke für den Tipp! Aber würde es nicht reichen, bei Laden der Seite eine Aktion auszulösen, dann müsste ja die Zeit erste-letzte Aktion richtig berechnet werden.
Im Grunde ist das doch ein Piwik Bug: Als erste Aktion müsste das initiale laden der Seite gerechnet werden, das Piwik ja mitbekommt…
Das geschieht sowieso. Aber für den Die Aufenthaltsdauer brauchst du zwei Punkte. Beim Laden setzt Piwik sein t1. Aber wenn der Besucher diese Seite nach dem Durchlesen verlässt, so wird nie t2 gesetzt, damit man t = t2 – t1 berechnen kann. Durch den oberen Code setzt man also t2 manuell.
Ah ;) Das hier:
Kommt ein Besucher auf die Website, liest 30 Minuten lang einen Artikel und schließt danach das Fenster, so erkennt Piwik nur eine Aktion und als Aufenthaltsdauer werden 0s und eine Absprungrate von 100% angezeigt.
Klang für mich so, als wäre die eine erkannte Aktion das Verlassen… Müsste es nicht auch möglich sein, das zu erkennen? Dann müsste man nur noch ein Event “facken”.
Nein, es war das Laden gemeint.
Es gibt keinen Verlassen-Event bzw. ist mir zumindest nicht bekannt.
Man kann das alles auch sauber implementieren, damit die richtige Anzahl von Aktionen herauskommt, aber dann müsste man an Piwik-Code herumschrauben.
Es gibt wohl ein passendes Event: http://bytes.com/topic/javascript/insights/825556-using-onbeforeunload-javascript-event
Ich weiss aber nicht, wie das mit Browser-Support aussieht, und ob man da noch Sachen an Piwik schicken kann (oder ob der Browser schon zu “tot” ist).
Wäre sicher interessant, damit würde dann ja ein falschen Event reichen.
Hey danke, werde ich ausprobieren.
EDIT: Habe ausprobiert. Irgendwie geht es nicht, so wie ich es mir vorgestellt habe oder ich verstehe die Funktion einfach nicht.
function ptrack(){
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
}
ptrack();
window.onbeforeunload = ptrack();
Oh, ich hab deinen EDIT nicht gesen ;) (Der löst kein Mail-Benachrichtigung aus ;))
Ich würde sagen du hast am Ende eine Klammer zu viel… Du willst ja nicht das Ergebnis von ptrack speichern sondern die Funktion selber. So müsste es funktionieren:
function ptrack()
{
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
}
ptrack();
window.onbeforeunload = ptrack;
Ich habe es noch mal ausprobiert. Es funktioniert teilweise. Bei manchen Besuchern sieht man, dass es genau zwei Aktionen auf einer Seite gibt, also gehe ich davon aus, dass die Tracking-Funktion beim Verlassen aufgerufen wurde.
Es gibt aber auch viele 0s Einträge. Woran das liegt kann ich nicht sagen. Offensichtlich wird die Funktion nicht immer aufgerufen.
Das ist seltsam… Zumindest ein Event müsste ja zu finden sein, da du die Funktion einmal selber aufrufst.
Ich werde mir das wohl mal selber ansehen ;)
Naja, ein mal wird sie ja immer aufgerufen. Man braucht aber noch den zweiten Aufruf.
Hier ist ein Beispiellog:
http://www.virtual-maxim.de/wp-content/uploads/2012/01/piwiklog.png
[...] ich ja nun Piwik, um die Besucherzahlen meiner Website zu messen. Vor ein paar Wochen hat dann ein Beitrag bei virtual-maxim meine Aufmerksamkeit erregt. Dabei ging es darum, das Piwik die Aufenthaltsdauer auf einer Website, [...]
Ich hab mir das ganze jetzt noch mal angesehen, meine Ergebnisse stehen hier: http://niklas-rother.de/artikel/richtige-aufentshaltdauer-mit-piwik-ermitteln/
Wie wäre es, wenn du dich einfach beim Verlassen der Seite nochmal einklinkst? :)
window.onbeforeunload = leavingPage;
function leavingPage(){
alert("Leaving!");
}
Am Besten wäre es natürlich, wenn Piwik dafür noch eine Schnittstelle bereit stellt, um die Verweildauer zu aktualisieren, ohne den View-Counter zu erhöhen.
Kommentare gelesen? :P
Genau dies funktioniert nicht bei jedem Browser. Es ist eher Zufall, ob ein Request noch abgeschickt wird, bevor der Browser geschlossen wird.
Habe die entsprechenden Kommentare leider erst nach dem Kommentieren gelesen :D
Geil! Danke!
Gerade bei meinen Opt In Seiten war es oft so bisher, dass viele Leute nicht lange blieben – oder sich DIREKT in den Optin eintrugen. Jetzt kann ich das endlich mal ein bisschen besser messen.
Und: Es hat auch direkt funktioniert :)
Hey Maxim!
Danke für den Artikel, hab mich echt schon lange gefragt ob die Daten die mir Piwik anzeigt wirklich so stimmen können… .
Gibt es mittlerweile eigentlich irgendeine “saubere Lösung” des ganzen? Habe jetzt auf eine meiner Seiten den Code so modifiziert aber wie du schon selbst sagtest, damit werden anderere Werte verfälscht.
Ich mein, dass muss doch bei Piwik bekannt sein, oder nicht?
Hallo Henry!
Soweit mir bekannt ist, gibt es keine Veränderung was dieses Problem angeht.
Den Piwik-Entwicklern sollte dieses Problem bekannt sein, da es auch schon im Piwik-Forum angesprochen wurde.
Hey,
danke für den Code! Super! :)
Da ich mich aber nicht so recht an diesen herantraue, um ihn zu modifizieren, wollte ich fragen, was ich machen muss, um:
12 Minuten
16 Minuten
20 Minuten
24 Minuten
28 Minuten
32 Minuten
36 Minuten
40 Minuten
44 und 48 Minuten zu messen?
Inwieweit muss ich ihn noch modifizieren?
Die Zeilen kann man wie oben bereits gemacht mit den if-Abfragen einteilen (nur Zahlen ersetzen). Bei noch mehr Werten bietet sich die Verwendung von einem Array an um die vielen Ifs zu vermeiden.
Dann frage ich mal anders:
Du schreibst von den Zeitabständen 10s, 30s, 1min, 4min, 24min, 84min. Wenn ich da aber jetzt mal alles gegenrechne, komme ich auf 20s statt 30 sekunden und auf 3 min statt 4 minuten (rt = 3*60000;)
Wie kommt das?
Ach so. Die Zeitangaben im Beitrag haben nichts (mehr) mit den Zeiten in dem Code zu tun. Die Zeiten im Code sind, wie du bereits bemerkt hast verschieden. Durch 1000 teilen und dann hat man die Angaben in Sekunden.
In der Aktuellen Piwik Version 1.9.1 wurde ja anscheinend eingeführt, das man sehen kann wo der Besucher die Website verlassen hat:
»On what pages your visitors exited your website and whether they clicked an outlink to do so.«
Wird damit dann dieser Workaround hinfällig, da das verlassen der Seite als Aktion erkannt wird, oder hat sich dahingehend nichts geändert?
Wo findet man diese Übersicht? “Ausstiegsseiten”-Übersicht gibt es ja schon seit einer Ewigkeit.
Es hat sich nichts verändert. Es wäre sonst sofort an der durchschnittlichen Verweildauer sichtbar.