Piwik und AJAX-Shoutbox


#1

Ich verwende Piwik jetzt seit ca. 2 Monaten und mir gefällt dieses Analysetool sehr gut. Installation und Integration ist aus meiner Sicht sehr einfach und hat gleich problemlos geklappt.

Ich habe aber folgende Frage:
Auf meiner Site ist eine Ajax-Shoutbox integriert. Diese wird öfters sehr stark genutzt ohne dass ein kompletter Site-Reload stattfindet - es wird ja nur ein Posting in der Shoutbox bzw. ein Nachladen der neuen Shouts durchgeführt und das Piwik-Skript nicht erneut aufgerufen.
Ich bin also der Meinung, dass sich die Verweildauer der Benutzer auf meiner Site nicht korrekt in der Statistik niederschlägt, obwohl diese sogar aktiv sind. Manche Benutzer sind sogar stundenlang in der Shoutbox aktiv und es wird logischerweise nur ein einmaliger Seiten-Aufruf in Piwik vermerkt.

Ist es möglich und wenn ja wie, den Reload der Shoutbox auch über Piwik zu tracken und somit die tatsächliche Verweildauer der User. Ich hab schon nach sowas gesucht, aber wahrscheinlich verwende ich einfach die falschen Suchbegriffe oder habe einen Denkfehler.


#2

Ich denke für den Zweck lässt sich die Funktion “addListener( element )” des Tracker-Objekts ganz gut verwenden. Damit kannst du Piwik mitteilen, dass jeder Klick auf den Button zum Absenden der Shouts registriert werden soll. Siehe http://piwik.org/docs/javascript-tracking/#toc-list-of-all-methods-available-in-the-tracking-api. Als Parameter “element” müsstest du das dem Shoutbox-Button / -Link entsprechende DOM-Element übergeben. Das könnte dann z.B. so aussehen:


[...]
<button id="myShoutboxButton" name="shout" value="" type="button">Shout!</button>
[...]

[...]
var shoutboxButtonElem = document.getElementById( "myShoutboxButton" )
try {
  var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$IDSITE});
  piwikTracker.addListener( shoutboxButtonElem )
  piwikTracker.trackPageView();
  piwikTracker.enableLinkTracking();
} catch( err ) {}
[...]

Gruß,
Chris


#3

Ok, das könnte das Absenden von Shouts registrieren. :slight_smile:

Aber wie ermittelt man die Mitlesenden, um so die Verweildauer besser zu erfassen?


#4

Hmm, ich habe keine Idee wie das momentan sinnvoll möglich wäre. Es müsste dazu die Möglichkeit geben Piwik durch verschiedene Events (abgesehen vom Klick auf Links) einen Hinweis darauf zu geben, dass ein Besucher sich immer noch auf der Seite aufhält. Das könnten z.B. Mausbewegungen oder Scrollen sein. Erst wenn in einem definierten Zeitraum keine Events ausgelöst wurden gilt der Besuch als beendet. Um das umzusetzen könnte evtl. die addListener-Methode ausgebaut werden, so, dass als Parameter auch Events übergeben werden können. Wäre vielleicht einen Feature-Request wert.

Kann natürlich sein, dass es bereits eine Möglichkeit gibt das zu machen von der ich nichts weiß :wink:


#5

Naja, in der AJAX-Shoutbox finden ja immer wieder DB-Querys statt und die Shouts anderer User werden ausgegeben. AJAX ist ja asynchrones Javascript, das Teile einer Website dynamisch verändern kann.

Irdendwo müßte man da innerhalb des Javascripts einen Event auslösen können wenn das Script den Inhalt der Shoutbox aktualisiert.

Ich hab nur bisher nicht durchschaut, wie bzw. welche Piwik-Funktion innerhalb das Javascripts aufgerufen werden könnte.


#6

Stimmt, das Auftauchen neuer Shouts wäre auch so ein Event das zeigt, dass die Seite noch geöffnet ist.
Die addListener-Methode ist momentan wohl die einzige, die in diese Richtung geht. Es fehlt eben “nur” die Möglichkeit Events übergeben zu können. Das könnte denke ich in vielen AJAX-Anwendungen hilfreich sein. Ich plädiere für einen Feature-Request :slight_smile:

Wenn es dir nur um die Aufenthaltsdauer geht (bzw. als vorübergehende Lösung), könntest du beim Auftauchen eines neuen Shouts auch einfach die trackPageView-Methode aufrufen.


#7

Ja, das hat mir jetzt geholfen :slight_smile:

Ich habe einfach folgende Befehle in das Shoutbox-Script an der Stelle, wo die Shouts neu geladen werden, eingebaut:


var pkBaseURL = (("https:" == document.location.protocol) ? "https://www.meinedomain.com/piwik/" : "http://www.meinedomain.com/piwik/");
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 1);
piwikTracker.trackPageView();

Das funktioniert jetzt schon mal, und die Besucher werden als weiterhin online in Piwik erfaßt bzw. wird jede Shoutbox-Aktualisierung als Seitenansicht gezählt. Somit habe ich alle 15 Sekunden eine Seitenansicht.

Nachdem das aber halt keine effektive Seitenansicht ist, werde ich jetzt mal ein Ziel definieren und damit experimentieren, ob dies mein gewünschtes Ergebnis
"Verweildauer, durch Tracking des Shoutbox-Refreshs erfassen"
besser abdeckt.


#8

Es läuft jetzt seit ein paar Tagen, mit dem Aufruf eines Ziels. Zwar wird durch diese Variante sehr viel Besucher-Log generiert (je Besucher alle 15 Sekunden ein Shoutbox-Refresh generiert einen Ziel-Eintrag) aber die Erfassung der Besuchslänge ist jetzt wesentlich genauer. Die durchschnittliche Besuchsdauer liegt jetzt im Stunden- und nicht mehr im Minutenbereich.

Schöner wäre natürlich eine andere Möglichkeit des Trackings für solch dynamische Komponenten wie eine Shoutbox :slight_smile:


#9

Hi pc.net,

vielleicht wäre bei der großen Anzahl der Piwik-Calls das asynchrone Tracking was für dich: http://piwik.org/docs/javascript-tracking/#toc-asynchronous-tracking

Auch so wird allerdings noch viel Overhead erzeugt, da es dir ja lediglich um die Besuchszeiten geht. Werd im englischen Forum mal was dazu schreiben. Dort treiben sich mehr Entwickler rum :slight_smile:

Update: Thread im englischen Forum: 301 Moved Permanently

Gruß,
Chris


#10

danke für die formulierung des requests :slight_smile:


#11

Gerne.

Bin eben auf ein Ticket gestoßen, dass genau dieses Problem zu lösen versucht: Support Ping requests to report a better 'time on page' · Issue #2041 · matomo-org/matomo · GitHub
Eine neue Methode, die Piwik mitteilt, dass ein Besucher die Seite immer noch betrachett, soll in Version 1.5 verfügbar sein.