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