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"); } }
Hi.
Also ist das Problem noch da. Im Prinzip koennte man einen Aufsatz fuer Piwik schreiben, der das ordentlich macht, aber das ist mir ehrlich gesagt zu viel Arbeit.
Ja, aber meine Version kommt mit nur einer falschen Aktion aus 😉
Und ich glaube, ich habe auch schon was gefunden, was die auch noch weglässt (Aktionstyp=ping)
Da ist schon einiges in den Core Files, ich steige da nur noch nicht ganz durch 🙁
Ja. Ich meine schon „deine“ Loesung ^^
Man muss eigentlich nur eine Funktion schreiben, damit keine neue Aktionen hinzugefuegt werden, wenn die Aktion-URL gleich bleibt beim Timeraufruf. Es soll nur die Zeit aktualisiert werden.
Man muss zwar auf die DB zugreifen, aber das ist kein Problem.
Hallo,
endlich mal jemand, der sich mit dieser thematik beschäftigt. ist bei mir auch aufgefallen, dass oft 0-sekunden besucher hab. besonders ärgerlich, wenn man adwords geschaltet hat. da weiß man nie, ob der besucher überhaupt die seite gesehen hat oder nicht… eventuell werde ich in zukunft mal einen hack dazu schreiben, damit sowas auch protokolliert wird. ich werde ab und zu mal hier vorbei schauen, ob es was neues gibt 😉
vg
Falls es noch irgendwie interessant ist, ich habe den Code etwas angepasst und nicht den View getrackt sondern eine Variable die ich eh nie benutze. Das Funktioniert soweit auch ganz gut 😉
window.onbeforeunload = trackUnloadPage;
function trackUnloadPage()
{
if(piwikTracker)
{
piwikTracker.setCustomVariable(1,'leaving',new Date().getDate(), 'visit');
}
}