Das 0s-Problem: Tats�chliche Aufenthaltsdauer mit Piwik erfassen

Update Ende 2014: Inzwischen hat sich wieder einiges ge�ndert. Ich habe dem Javascript-Trackingcode nun folgendes angeh�ngt: var onBeforeUnLoadEvent = false; //sorgt daf�r, dass es nur einmal gesendet wird
window.onunload = window.onbeforeunload= function(){ //Cross-Browser-Kompatibilit�t
if(!onBeforeUnLoadEvent){ onBeforeUnLoadEvent = true; _paq.push(['trackPageView','Verlassen']); }; //Pageview feuern
};

Das sorgt daf�r, dass beim Schlie�en des Browsers ein Pageview gez�hlt wird. Funktioniert nicht bei allen Benutzern, liefert aber einen sehr guten �berblick �ber die Bounce-Geschwindigkeit, die f�r SEO sehr wichtig ist.

Es folgt die alte Vorgehensweise...

Das Problem

Unternimmt ein Besucher nur eine Aktion, so kann das kostenlose Online-Analytics-Tool Piwik die Besuchsdauer nicht auf die tats�chliche Zeit erh�hen und bleibt bei Null Sekunden stehen:

M�gliche L�sungen

Als Informatiker wei� ich, dass es immer mehrere Wege zum Ziel gibt. Folgende sind mir spontan eingefallen:

  1. Mittels "Pagination" den Besucher zwingen, bei l�ngeren Artikeln zu bl�ttern
  2. Ein Keep-Alive-Signal an Piwik weitergeben, indem man die Kernfunktionen der Software modifiziert
  3. Das Tracker-Skript alle paar Sekunden neu laden.

Die 3. M�glichkeit ist die einfachste und greift am wenigsten in die Abl�ufe ein, hat allerdings den Nachteil, dass auff�llig viele Symbole f�r ein und die selbe Seite in der Statistik erscheinen, wenn man die Zeit recht genau erfassen m�chte:

Es stimmt also die Zahl der Aktionen pro Besuch nicht mehr. Daf�r wird die Aufenthaltsdauer korrekt gemessen. In der detaillierten Statistik kann man weiterhin die einmaligen Seitenansichten aufschl�sseln lassen.

Der Code am Beispiel meines Servers


Was hier passiert ist eigentlich ganz einfach erkl�rt. Ich umschlie�e den Piwik-PHP-Aufruf von einer Funktion, die sich alle paar Sekunden selbst aufruft. Damit es nicht zu un�bersichtlich wird und da es mich nicht interessiert, wenn jemand das Browserfenster mehrere Tage offen l�sst, habe ich die Erneuerung der Werte auf 5 Mal eingeschr�nkt. Der erste Refresh findet nach 20 Sekunden statt, der zweite nach einer weiteren Minute, der dritte nach je 2 Minuten und die letzten 2 nach je 11 Minuten.
Die Funktion selber hat als Parameter die Anzahl der restlichen Aufrufe. Daher wird mittels i-- der Wert stets um 1 verkleinert. Damit es keine Endlosschleife gibt, mache ich die Abfrage, ob i gr��er als 0 ist.

Copy 'n' Paste

<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://deinserver.de/" : "http://deinserver.de/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
function countdown (i) {
if (i > 0) {
try {
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
if (i == 5) { refreshtime = 20000; }
else if (i == 4) { refreshtime = 60000; }
else if (i == 3) { refreshtime = 120000; }
else { refreshtime = 660000; }

i--;
var timeout = window.setTimeout("countdown(" + i + ")", refreshtime);
}
}
countdown(5);
</script><noscript><p><img src="http://deinserver.de/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

Denkt daran, alle Parameter gegen eure eigenen auszutauschen, wenn ihr den Code verwendet. Vor allem auch die Site-ID, wenn ihr mehrere Webseiten �berwacht.

Fazit

Endlich kann ich erkennen, ob meine Artikel f�r die Besucher �berhaupt interessant sind und wie schnell sie wieder zu Google fl�chten.

 
© 2005-2015 DerMarki.de by Markus Schiele