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:

  1. Trackingsystem von Piwik umschreiben
  2. Aktionen vort├Ąuschen, wenn der Besucher noch auf der Website ist

Aufenthaltsdauer

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 man folgenden Tracking-Code

<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>

Absprungrate

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.


32 Kommentare zu “Piwik: richtige Aufenthaltsdauer und Absprungrate anzeigen”

  1. Niklas Rotheram 14. December 2011 um 15:18 Uhr

    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…

  2. Maximam 14. December 2011 um 17:06 Uhr

    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.

  3. Niklas Rotheram 14. December 2011 um 21:31 Uhr

    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”.

  4. Maximam 14. December 2011 um 21:38 Uhr

    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.

  5. Niklas Rotheram 15. December 2011 um 14:46 Uhr

    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.

  6. Maximam 15. December 2011 um 15:17 Uhr

    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();

  7. Niklas Rotheram 7. January 2012 um 15:59 Uhr

    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;

  8. Maximam 10. January 2012 um 14:36 Uhr

    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.

  9. Niklas Rotheram 10. January 2012 um 18:28 Uhr

    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 ;)

  10. Maximam 10. January 2012 um 19:35 Uhr

    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

  11. […] 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, […]

  12. Niklas Rotheram 20. January 2012 um 18:29 Uhr

    Ich hab mir das ganze jetzt noch mal angesehen, meine Ergebnisse stehen hier: http://niklas-rother.de/artikel/richtige-aufentshaltdauer-mit-piwik-ermitteln/

  13. Patrickam 11. February 2012 um 11:51 Uhr

    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.

  14. Maximam 11. February 2012 um 11:54 Uhr

    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.

  15. Patrickam 11. February 2012 um 12:02 Uhr

    Habe die entsprechenden Kommentare leider erst nach dem Kommentieren gelesen :D

  16. Pierream 18. March 2012 um 17:03 Uhr

    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 :)

  17. Henryam 30. July 2012 um 12:08 Uhr

    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?

  18. Maximam 30. July 2012 um 15:30 Uhr

    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.

  19. Fragenderam 20. September 2012 um 23:03 Uhr

    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?

  20. Maximam 22. September 2012 um 21:45 Uhr

    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.

  21. Fragenderam 22. September 2012 um 22:48 Uhr

    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?

  22. Maximam 22. September 2012 um 22:56 Uhr

    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.

  23. Amerlanderam 4. November 2012 um 22:17 Uhr

    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?

  24. Maximam 4. November 2012 um 22:22 Uhr

    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.

  25. mbrock.euam 12. June 2013 um 14:36 Uhr

    Falls es noch irgendwie interessant ist, ich habe den Code von Niklas 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');

    }
    }

  26. Henryam 1. July 2014 um 21:41 Uhr

    Moin Maxim,

    ich bin’s, der Henry von oben nochmal :D

    Mittlerweile hat sich an dem Code ja einiges getan und ich blicke bei den Kommentaren ├╝ber mir nicht ganz durch, magst du nochmal ein Update im Blogpost machen wie es mit dem aktuellen Code funktioniert?

  27. Maximam 1. July 2014 um 21:53 Uhr

    Hi,
    habe mich lange damit nicht mehr besch├Ąftigt, aber ich kann es mir in den n├Ąchsten Tagen anschauen.
    Schau doch bald wieder vorbei.

  28. Henryam 1. July 2014 um 22:02 Uhr

    Hab die Kommentare gebucht, danke! ;)

  29. Henryam 1. July 2014 um 22:02 Uhr

    *abonniert

  30. Maximam 5. July 2014 um 20:42 Uhr

    Habe jetzt gesehen, dass Piwik einen neuen Code zum einbinden hat (teste ich gerade). Die alte Methode funktioniert aber weiterhin.
    Das Problem mit den nicht gez├Ąhlten Interaktionen besteht weiterhin. Ich werde noch einige Tage ein paar Sachen testen und melde mich dann zur├╝ck.

  31. Frankam 24. July 2014 um 16:10 Uhr

    F├╝r neueste Erkenntnisse bin auch ich sehr empf├Ąnglich. Danke!

  32. Maximam 30. July 2014 um 15:32 Uhr

    Ich habe einen neuen Code f├╝r das oben beschriebe Problem geschrieben: http://www.virtual-maxim.de/piwik-aufenthaltsdauer-und-absprungrate-korrigieren/

    Ist jetzt etwas benutzerfreundlicher.

Trackback URI | Kommentare als RSS

Einen Kommentar schreiben

XHTML: Du kannst folgende Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <sub> <sup>

Hinweis: Ich behalte mir das Recht vor solche Kommentare, die Beleidigungen oder rechtswidrige Inhalte beinhalten erst nach einer Editierung freizugeben oder kommentarlos zu löschen. Ähnliches gilt auch für Kommentare die offensichtlich nur der Suchmaschinenoptimierung dienen.