Richtige Aufentshaltdauer mit Piwik ermitteln

Seit geraumer Zeit benutze 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, und damit verbunden die Apsprungrate nicht richtig berechnet. Wenn der Besucher nur eine Seite aufruft, und dann den Tab schließt, wird eine Aktion mit einer Besuchslänge von 0 sek gezählt. Das ist natürlich unschön, weil man ja grade Blog-Artikel länger ließt, ohne auf einen Link zu klicken.

Die Lösung, die auch schon in Piwiks Trac diskutiert wird, und auch in dem oben verlinkten Artikel vorgestellt wird, ist es, nach einer gewissen Frist einen „Pulsschlag“ an Piwik zu senden, um anzuzeigen, das der Besucher noch auf der Seite ist. Die Lösung aus dem Artikel hat den Nachteil, das dadurch viele falsche Page-Impression erzeugt werden, weil Piwik (noch) kein API hat, um zu sagen „Besucher ist noch da“. Das einzige, was man machen kann, ist, den Klick auf einen Link vorzutäuschen. (Wenn man nicht im Core etwas ändern will).

Meine Idee (siehe auch die Kommentare) war es jetzt, darauf zu warten, das der Besucher die Seite verlässt, und erst dann einen „Klick“ an Piwik zu senden. Damit würde jeder Besucher pro Seite nur zwei Aktionen auslösen, und die Besuchslänge sollte genau erfasst werden (im Gegensatz zum Pulsschlag alle x Sekunden).

Die meisten Browser (Ausnahme: Opera) bieten auch ein passendes Event für diesen Zweck an: onbeforeunload wird ausgelöst, kurz bevor der Browser die Seite verlässt. Darüber werden zum Beispiel Sicherheitsabfragen realisiert. Es gibt zwar auch onunload, aber das wird z.B. von Firefox nicht ausgelöst, wenn man den Browser schließt.

Ich habe jetzt also in meine Website ein kleines bisschen JavaScript eingefügt:

window.onbeforeunload = trackUnloadPage;
function trackUnloadPage()
{
    if(piwikTracker)
    {
        piwikTracker.trackPageView("unload event");
    }
}

 

Dieser Code signalisiert Piwik jetzt einen Besuch der Seite „unload event“, wenn der Browser geschlossen wird. Wie die Statistik zeigt, funktioniert meine Lösung recht gut.

Seltsamerweise gibt es immer noch (Nicht-Opera) Besucher, die nur eine Aktion auslösen. Evtl. löst ein anderer Browser das Event auch nicht immer aus, oder es kommt zu einer Race-Condition (Browser schon zu, bevor der Aufruf abgeschickt wurde).

Ich hoffe jetzt, das Piwik noch eine API für die „stillen Events“ bietet, damit sie nicht die anderen Statistiken verfälschen… Vielleicht werde ich mir den Code auch selber mal ansehen 😉