Besuche nach Besuchsdauer bzw. nach Seitenanzahl falsch?

Hallo,
ich habe mich gerade neu angemeldet um hier mal eine Frage loszuwerden.
Und zwar habe ich auf dem Dashboard die Widgets “Besuche nach Seitenanzahl” & “Besuche nach Besuchsdauer” eingerichtet.
Entgegen der Anzeige “Besuche in Echtzeit” zeigen diese beiden Widgets meines Erachtens andere Werte an, nämlich immer die geringsten.
Foto als Beispiel:

Ich vermute, dass bei diesen Anzeigen sämtliche Bots mit 1 Sekunden mitgezählt werden.

Hier mal mein Tracking Code, der eigentlich Bots nicht erfassen sollte, wie ich ihn mir nach einigen Beispielen hier zusammengesetzt habe:

<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['disableCookies']); // Ab sofort verteilt Matomo keine Kekse (Cookies) mehr
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
_paq.push(['enableHeartBeatTimer', 5]); // Matomo bekommt Herzrasen: Der "Herzschlag" von Matomo wird auf alle 5 Sekunden erhöht
	setTimeout(function() { // ← Timeout 1 second
    var u="https://www.example.com/matomo/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
  var d = document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
  g.type = 'text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); }, 2000); // ← Timeout 2 seconds
setTimeout(function() { // ← Timeout 2 seconds
_paq.push(['ping']); // ← Ping after 2 seconds
}, 2000); // ← Timeout 2 seconds
window.addEventListener('beforeunload', function(e) {
	_paq.push(['ping']);
});
</script>
<!-- Matomo Image Tracker-->
<noscript><img referrerpolicy="no-referrer-when-downgrade" src="https://www.fmb.de/matomo/matomo.php?idsite=1&amp;rec=1&amp;action_name=FMB+GmbH" style="border:0" alt="matomopixel" /></noscript>
<!-- End Matomo -->

<!-- Video Tracking Code -->
<script>
  document.addEventListener("DOMContentLoaded", function(event) {
  var videos = document.getElementsByTagName("video");
  for (var index = 0; index < videos.length; ++index) {
    var video = videos[index];
    video.addEventListener("playing", function() {
      _paq.push(['trackEvent', 'video', 'play', this.currentSrc]);
    }, true);
    video.addEventListener("pause", function() {
      if(this.currentTime < this.duration){
        _paq.push(['trackEvent', 'video', 'pause', this.id, this.currentTime]);
      }
    }, true);
    video.addEventListener("ended", function() {
      _paq.push(['trackEvent', 'video', 'completed', this.id, this.currentTime]);
    }, true);
    video.addEventListener("seeking", function() {
      _paq.push(['trackEvent', 'video', 'seek', this.id, this.currentTime]);
    }, true);
    video.addEventListener("error", function() {
      _paq.push(['trackEvent', 'video', 'error', this.id]);
    }, true);
  }
});
</script>
<!-- End Video Tracking Code -->

Kann mir vielleicht jemand die starken Unterschiede erklären?
Oder kann man den Code noch optimieren?

Vielen Dank im Voraus,
VG Wolfgang

Hallo FBM,

zuerst einmal solltest du den Code in deinem Posting editieren, solange es noch möglich ist, und deine Domain herausnehmen (ersetzen durch example.com).

Bei dir wird das matomo.js nach 2 Sekunden geladen. Soweit meine Matomo-Beobachtung gehen, wird der Timestamp vom Laden der Webpage als Anfangszeit verwendet. In meinem Matomo Code sind es 3100 Millisekunden. Dennoch erscheinen in der Statistik Visits mit 2 Sekunden. Wie das möglich ist, weiß ich noch nicht. Also vermutlich muss es um mindestens 1 Sekunde höher als gewünscht gesetzt werden. Bei dir erklärt es, warum mit 2000 Millisekunden weiterhin 1 Sekunden Visits getrackt werden.

Dein zweiter setTimeout hat ebenso 2000 Millisekunden. Das Senden von einem einzigen Ping nach 2 Sekunden kann die Time on Page dahingehend manipulieren, dass nur diese 2 Sekunden (die vermutlich als 1 Sekunde getrackt werden) im Tracking erkannt werden, weshalb dann viele solcher Time on Page in der Statistik vorhanden sind. Wenn es nicht zuviel ist, wäre es besser, die ersten 11-12 Sekunden je Sekunde einen Ping zu senden. Das ermöglicht, dass die Visits möglicherweise die Time on Page Zusammenfassung mit “1-10 Sekunden” überschreiten und die Statistik demgegenüber positiv manipulieren.

_paq.push(['enableHeartBeatTimer', 5]);
Der Matomo HeartBeatTimer sendet seit 2 Jahren keine Pings mehr alle x Sekunden. Die Funktion des Matomo HeartBeatTimers wurde grundlegend geändert. Der HeartBeatTimer erkennt page leave (Seite verlassen) und not in focus (geöffneter Browser-Tab, aber Content nicht aktiv sichtbar). Die Funktion springt erst nach x Sekunden Time on Page (Verweilzeit) an. “5” ist das aktuelle Minimum.

Es gibt unzählige Phänomene, bei denen nur Teile des Visits getrackt werden. In meinem Matomo erscheinen Visits ohne Page Name und auch ohne Time on Page. Es gibt so viele Möglichkeiten, wieso, weil es so viele verschiedene Devices, Browser und Plugins gibt, die dafür verantwortlich sein können.

Hallo melbao,

vielen Dank für deine Antwort.
Da ich meinen Code aus mehreren deiner Post´s zusammengesetzt habe, hatte ich auch auf Hilfe von dir gehofft :slight_smile:
Trotz deiner ausführlichen Antwort verstehe ich leider nur Bahnhof von der ganzen Thematik… bin eigentlich nur Anwender, der eine aussagekräftige Statistik sehen möchte.
Kannst du mir vielleicht im Detail schreiben wie du meinen Code abändern würdest, so dass möglichst realistische Werte in der Statistik herauskommen und Bots trotzdem weitestgehend ignoriert werden?

Hallo FMB, meine hier geteilten Erfahrungen sind genau dafür gedacht. Es kommt allerdings speziell ganz individuell auf exakt deine Besucher an, wie der Matomo Tracking Code gestaltet wird. Das kann eine langwierige Angelegenheit sein. Bei mir hat es ein paar Monate gedauert bis meine Beobachtungen zu einem einigermaßen akzeptablen Ergebnis führten. Mein Matomo Tracking Code ist genau auf die Besucher meiner Websites ausgerichtet. Es werden bei mir mehrere sehr verschiedene Websites mit ein und demselben Code getrackt. Da es auf einer Website viele menschliche Besucher mit einer Time on Page zwischen 0 und 10 Sekunden gibt, habe ich einen eigenen Heartbeat (setInterval) mit Ping, der ab Start 11 Sekunden läuft. Das ist mir wichtig, damit die Unterschiede in den ersten Sekunden sichtbar werden. Jedoch werden die Besucher mit 0 bis 1 Sekunde erst gar nicht getrackt, weil das entweder Bots oder Schnellklicker ohne Interesse sind. Jedoch ist es auf einer meiner Websites normal, dass Besucher sehr schnell durchklicken (ab 0 Sekunden Time on Page). Diese werden getrackt, da der soeben erwähnte Filter nur bei Einstiegsseiten aktiv ist. Wie zu sehen ist, ist es sehr individuell.

Was noch beachtet werden sollte ist, dass es Devices, Browser und Plugins gibt, die das Tracking nicht komplett, sondern nur teilweise unterbinden. Das kann zu seltsamen Tracking-Ergebnissen führen. Dagegen gibt es allerdings kein Mittel.

Du könntest bei dir einmal ausprobieren, wie das Ergebnis mit “3100” (3,1 Sekunden) bei deinem ersten setTimeout und mit “11100” (11,1 Sekunden) bei deinem zweiten setTimeout aussieht. Der Zweite würde dir anzeigen, wann Besucher länger als 10 Sekunden auf der Page waren. Das ist für die Wolken-Statistik der Time on Page im Dashboard relevant, da dort der erste Wert 0-10 Sekunden ist.

Hallo melbao,
vielen Dank, so versuche ich das mal.