GA vs. Matomo on premise vs. Matomo Logdateien

Das Thema Matomo versus Google ist schon in verschiedenen Beiträgen diskutiert, doch meist mit Bezug zu Google Ads oder Google Search Console. Und da es mir um GA4 geht und ich zudem nicht so computeraffin bin, erlaube ich mir, das Thema nochmal für Anfänger aufzugreifen.

In einem begrenzten Testzeitraum habe ich die Werte von Google Analytics mit denen von Matomo verglichen, wobei ich für Matomo zwei IDs ausgewertet habe:

  • In der einen ID verarbeite ich die Log-Datei des Hosters (= Matomo (LOG)),
  • in der anderen ID das on-premise installierte Matomo, wobei nicht nur Daten anonymisiert werden, sondern auch “Tracking ohne Cookies erzwingen” aktiviert wurde und zudem Besucher-IDs mit Hilfe einer sogenannten Salted-hash-Funktion pseudonymisiert werden, weshalb Matomo nicht in die Consent-Abfrage des CMPs integriert ist (= Matomo (o-p)).

Die Ergebnisse:

Meine Fragen:

  1. Weshalb ist die Zahl der Besucher bei GA4 höher als bei Matomo (o-p)?
    Ich hatte erwartet, dass dies umgekehrt der Fall sein dürfte, denn GA darf nur zählen, wenn in der Consent-Abfrage zugestimmt ist, wohingegen Matomo aufgrund der gewählten Installation auch zählen darf, wenn der Besucher Statistik-Cookies ablehnt. Laut Statistik meines CMPs verweigern 46 % der Besucher das Setzen von Statistik-Cookies, so dass der Matomo (o-p)-Wert eigentlich um 54 % über dem GA-Wert liegen müsste – stattdessen liegt er um 7,2 % darunter. Und die Differenz vergrößert sich noch, wenn man bedenkt, dass nicht jedem Besucher das Consent-Banner auch angezeigt wird (bei meinem vorherigen CMP waren es laut eigener Auskunft nur 47 % (!) - das derzeitige CMP ist angeblich besser, kann aber keine Zahlen nennen).
    Weshalb also liegt bei diesen Rahmenbedingungen die Zahl der Besuche bei Matomo (o-p) noch unter dem in etwa adäquaten GA4-Wert?

  2. Weshalb sind die Werte von Matomo (o-p) und Matomo (LOG) so stark abweichend?
    Hier hatte ich erwartet, dass die unterschiedlichen Erhebungsmethoden allenfalls leichte Abweichungen zeigen würden, doch tatsächlich klaffen die Werte weit auseinander. Korrekterweise muss man allerdings von den 94.768 Besuchern noch die 32.390 Bots als Besucher abziehen, so dass es sich damit um 62.378 reale Besucher handeln würde. Doch auch 62.378 Besucher laut Log-Datei sind das 4,2-fache der von Matomo on-premise ermittelten Besucherzahl in Höhe von 14.945.
    Ein noch größeres Missverhältnis gibt es bei den Seitenansichten: Dort beträgt der Wert aus der Log-Datei (546.305) das 18,9-fache des von Matomo on-premise ermittelten Werts (28.870). Ein Teil der Differenz ist allerdings vermutlich auf den Umstand zurückzuführen, dass wahrscheinlich der Log-Datei-Wert auch die von Bots getätigten Seitenaufrufe enthält – einen Wert für “Seitenansichten durch Bots” habe ich leider nirgendwo gefunden.
    Wie also lassen sich diese starken Unterschiede erklären?

Vielen Dank für jede (und vor allem für mich als Laien verständliche :wink: ) Antwort

Hallo @Matta,
damit machst du ein “großes Fass der Philosophien” auf :slight_smile:
Gerne würde ich hier ausführlich antworten, aber dazu fehlt gerade die Zeit. Vielleicht komme ich später darauf zurück.

Aber ein paar erste, kurze Gedanken zu deinen Fragen gibt es hier:

Bei GA4 werden Besuche auf andere Art definiert als bei Matomo. Insofern sind diese Zahlen nie miteinander vergleichbar. Eher sind die Seitenaufrufe vergleichbar. Warum hier zwischen Daten mit Consent und Daten ohne Consent eine so geringe Differenz ist, kann ich nicht sagen. Ist das Consent-Banner wirklich korrekt integriert?

Deine zweite Frage zur Abweichung von Matomo-per-Javascript und Matomo-per-Logfiles ist sehr einfach zu beantworten: Das sind mit hoher Wahrscheinlichkeit Botzugriffe. Denn in den Logfiles werden alle Zugriffe erfasst, während Bots, die kein JavaScript ausführen, nie im Matomo per JavaScript auftauchen werden. Auch hier empfinde ich die Abweichung aber als eher gering. Häufig sehe ich weit höhere Differenzen bei der Loganalytics gegenüber der Erfassung per JavaScript.

Vielleicht hilft dir diese erste Einschätzung bereits.

Hab noch einen schönen Tag.
Joachim

Hallo @Matta ,

vor 10 Jahren hatte ich auch mal Google Analytics (GA) und Matomo (und auch Google Ads) parallel laufen. Es gab zwar Unterschiede, aber waren egal. Wie Joachim schon schrieb messen beide (Firmen) anders. Das betrifft wiederkehrende Besucher und vieles mehr. Da Fragen wie die deine öfters kommen, und es die Tendenz gab, dass dem Tracking vertraut wird, dass die meisten anzeigt (und das andere “betrügt”), weiß keiner, inwieweit Google da möglicherweise “tolerant” ist und auch ein paar Bots durchlässt. Die Bots-Liste wird von Matomo (Plugin: Device Detector) stetig gepflegt: https://github.com/matomo-org/device-detector/issues
Du kannst zudem in Matomo das Plugin “TrackingSpamPrevention” installieren/aktivieren, dann werden es noch weniger.
Desweiteren kannst du eigene Regeln aufstellen, welche Visits anhand ihrer Browser Request Header nicht getrackt werden sollen: Bots und Tracking Infos
Zudem kannst du, wenn der Referrer von außerhalb ist, ein Consent-Banner einblenden, dass erst nach Klick auf einen Button (“Ich bin ein Mensch.”) getrackt werden soll.
… und es werden immer weniger, aber “echte” Besucher.

Zum Unterschied: Es kommt drauf an, wie viele Bots durchrutschen und als Besucher zählen sowie wie viele Webpages eine Website hat. Weil jeder durchrutschende Bot je wenige oder viele Webpages besucht. Hat die Website wenige Webpages, dann ist der Unterschied gering. Hat die Website sehr viele Webpages, dann ist der Unterschied sehr groß. Die Bots kommen bei vielen Webpages öfters bis sehr oft und zählen jeweils als eigener Besuch.

Eine meiner Websites hat mehrere 10.000te Webpages. Mit Matomo in den Default-Einstellungen waren das 5.000 Besucher im Monat. Dann hatte ich ein (Fake) Consent-Banner mit Tracking erst nach Button-Klick und es waren nur noch 500 Besucher im Monat. Mittlerweile habe ich eine ganze Reihe an Regeln, welcher Besuch getrackt werden soll und welcher nicht. Mir geht es dabei darum nur “echte” (human) Besucher zu tracken. Die Server-Logs waren schon vorher (bei den 5.000 Besuchern) doppelt so hoch, also 10.000 Besucher, wobei da wohl schon ein paar Bots gefiltert wurden.

Eine andere (unscheinbare) Website (mit nur 1 Webpage + Impressum-Pages) hat in Matomo 0 Besucher/Monat. Aber 3.000 Besucher im Server Log. In den Server Logs ist mittels User Agent zu sehen, dass diese Bots massenweise Urls requesten, die es auf der Website nicht gibt. Darunter Urls für Wordpress und dergleichen (obwohl gar kein Wordpress installiert ist), sowie irgendwelche möglichen Schwachstellen-Dateien. Um es mal deutlich zu sagen: Die Bots requesten vollkommen durchgeknallt alles mögliche und das massenweise.

Möglichkeiten Request zu filtern gibt es viele. Matomo und GA haben einige default inkludiert. Zudem gibt es viele weitere, als Plugin oder eigene Lösung (Code).

Die Frage ist nicht, welches Tracking “echter” ist, sondern ob du willst, dass nur “echte” Besucher getrackt werden. Möglicherweise läuft das auf 0 Besucher/Monat hinaus, aber es ist “echt”.

Danke an
@Joachim Nickel
@melbao

Hmmm, ja, ist schon offenbar schwierig. Aber warum das auf ein Consent angewiesene Google mehr Besucher meldet als das vom Consent ausgenommene Matomo ist schon mysteriös (und nicht durch eine fehlerhafte Einbindung des Consent-Banners zu erklären). Auch die unterschiedlich Zählweise von Besuchern bei Google bzw. Matomo scheint mir die Differenz nicht vollständig erklären zu können.

Bzgl. des Vergleichs des JS-basierten Matomo mit dem die Logdatei auswertenden Matomo habe ich gelernt, dass Matomo in der Basis-Version zwar Bots ausweist, aber offenbar viele Bots nicht erkennt. Das scheint mir insofern plausibel, als z.B. die Zahl der unbekannten Browser oder der Besucher aus den USA (woher meine Seiten kein einziger realer Mensch aufrufen dürfte) immer leicht höher liegt als die Zahl der ausgewiesenen Bots. Aber eben nur leicht und nicht um das 4,2-fache. Ich weiß auch nicht, ob das Phänomen, dass größere Seiten proportional mehr Bots und damit eine größere Differenz zwischen JS- und Log-Version haben, bei mir zutrifft - meine Site hat momentan gut 1.100 Seiten/Beiträge. Jedenfalls habe ich beschlossen, mit dem Plugin “TrackingSpamPrevention” aufzurüsten (danke für den Hinweis), was allerdings momentan auf Schwierigkeiten stößt: https://forum.matomo.org/t/password-not-accepted-support/62431

Nochmals danke und beste Grüße

Matta

Adblocker nicht vergessen, beim Vergleich Log vs JS :grinning:

Vielleicht hilft dir in dem Zusammenhang die Folien von Simon.
https://simon-frey.com/files/slides/AdBlocker%2520überlisten%2520-%2520Matomo%2520Camp%25202024.pdf

Danke Thomas, aber der Link funktioniert leider nicht … :disappointed_relieved:

Hm komisch … bitte such bei Google mal nach …. Matomo camp adblocker

Da wird ein PDF gelistet von Simon

Hier ist der richtige Link (Dank an Simon!): https://simon-frey.com/matomo-camp-24-de

AdBlocker bei JavaScript Tracking austricksen geht zu weit. Wenn dann ein zweites Matomo mit PHP-Tracking aufsetzen.

Aber da werden wie beim access.log Tracking nicht alle Bots erkannt. Wie zB der googlezip.net Bot. Der verwendet zwar kein JavaScript, ist aber ansonsten nicht zu erkennen (bzw. nur am IP-Range). Weil damit auch Bots getrackt werden, die keine JavaScript-Bots sind.

@melbao

Danke für den Hinweis. Wenn ich richtig verstanden habe, gibt es neben der Nutzung von Matomo durch a) JS-Tracking (= Standardmethode) und b) Auswertung der Logdateien noch eine (für mich bislang nicht erkennbare) Variante c), die auf PHP-Tracking basiert und mit dem GitHub-Script realisiert wird. Nach etwas Herumsuchen habe ich auch den Link zur ZIP-Datei gefunden und das Paket heruntergeladen und entpackt. Nur: Was mache ich jetzt damit???

Wie ich eingangs schrieb: Ich kann zwar kochen, bin aber “nicht so computeraffin”… Was also tun mit den entpackten Dateien?

Und wo muss ich die “Required variables” hineinschreiben? In der MatomoTracker.php und in composer.json habe ich keinen Platz dafür erkennen können.

Und was ist $matomoToken = “”? Ist das mein Matomo-Backend-Passwort, mit dem ich mich einlogge, oder ein zusätzlicher Token?

Und ob ich die genannten Voraussetzungen (JSON extension bzw. cURL or stream extension) habe – keine Ahnung.

Immerhin ist es mir mit Wikipedia gelungen, herauszufinden was “composer” ist und sogar zu installieren :wink:

Und mutig wie ich bin, habe ich gleich mal ins Terminal

composer require matomo/matomo-php-tracker

eingegeben, u.z. mit diesem Resultat:

Das lässt aber noch mehr Fragen entstehen (Habe ich nun Composer 1 oder 2 oder gar 3.3?) und vor allem habe ich auch dort keinen Platz zum Eintragen oben genannter Variablen entdeckt.

Der Aufforderung, ext-curl zu installieren, habe ich durch Eingabe von “ext-curl” im Terminal nachzukommen versucht, doch mit dem Resultat “ext-curl: Befehl nicht gefunden.”.

Was also muss ich tun?

Und falls es mir gelingen sollte, diese PHP-basierte Auswertungsvariante zu installieren: Wie kriege ich sie DSGVO-konform? (Wo z.B. stelle ich sicher, dass IP-Adressen gekürzt werden usw. - dafür sollte es ja irgendwo auch eine GUI, vielleicht innerhalb von Matomo, geben)

Danke und LG

Hallo @melbao
darf ich fragen, was genau hier aus deiner Sicht “zu weit geht”?
Adblocker arbeiten mit simplen URL-Listen. Wenn man die URL des JavaScript-Codes und den Endpunkt ändert und nicht mehr durch diesen Listenvergleich ausgeschlossen wird, kommt man entspannt an vielen Adblockern vorbei. Was genau würde daran “zu weit gehen”? Ich würde gerne deine Ansicht verstehen, warum ich stattdessen auf Server-Side-Tracking setzen sollte, wo ich doch so viel mehr Müll-Grundrauschen erhalte, was dann wiederum gefiltert werden muss.
Denn bei einem sind wir uns hoffentlich einig: 100% echte Daten im Sinne von “nur menschliche Zugriffe” gibt es nicht.

@Matta , dieses Matomo PHP-Tracking solltest du nur verwenden, wenn:

  • kein CMS, auf dem getrackt werden soll (außer du codest dir ein Plugin)
  • PHP Kenntnisse
  • separate Matomo-Instanz (kein zusätzliches Java-Script Tracking)

Die PHP-Variablen und der PHP-Code müssen in die eigene Website implementiert werden. Separate Matomo-Instanz, weil sonst in eine Datenbank doppelt getrackt wird.

Mein Tipp: Lass es. Da hast du scheinbar zu wenig Ahnung von.

@jbn , die Tricks helfen (meist) nicht mehr. Die AdBlocker verwenden ihre eigenen Tricks zum Austricksen der Tricks. Katz und Maus Spiel. Zeitverschwendung. Das ist ähnlich, wie diese Aufforderungen von Google, deren stetig neuesten Kram mitzumachen, schon ab Testphase. Und dann wird die super neue Idee verworfen und alles umsonst.

Das Umbenennen der matomo.js und matomo.php dient mehr dazu, dass Bots die nicht automatisch anfragen und/oder triggern.

Bei mir wird sogar Do Not Track (DNT) akzeptiert. Eigenes PHP Test-Tracking ergibt, dass doch einige (wenige) human visits DNT nutzen. Es gibt sogar ein Tracking Consent-Banner. Wer bei meinen Websites nicht getrackt werden will, wird es auch nicht. Egal ob DNT, AdBlocker oder ohne JavaScript oder Consent-Banner. Wobei ohne Consent kein Content sichtbar. Worauf es (mir) ankommt ist, ungefähr zu wissen, wie viele human visits nicht getrackt werden.

Mein Consent-Banner ist ähnlich wie bei heise.de. Die komplette Webpage wird nach Consent neu geladen. Dadurch sehe ich im eigenen PHP Test-Tracking, welche Visits das Consent nicht klicken - wenn nur 1 Seitenaufruf/Besuch. Es müssen mindestens 2 sein. Den Consent-Banner per AdBlocker ausblenden ist so gut wie unmöglich, da JavaScript DOM generiert und random eingebunden ohne ID und Class. Und diejenigen, die sich die Mühe machen diesen mit dem Browser Inspektor auszublenden … gegönnt.

Tracking mit 100% nur human visits und zudem alle human visits gibt es nicht. Da kann gemacht werden was will. Es gilt herauszufinden, wie viele Bots getrackt und wie viele Humans nicht getrackt werden, um diese Zahlen mit den Statistiken zu kopfverrechnen.

Ich habe mir die letzten Tage (mal wieder) ein eigenes PHP-Tracking für Testzwecke programmiert. Da ist zu sehen, dass einige Human das DNT verwenden und dass einige den/meinen Consent nicht klicken. Beides ist voneinander unabhängig. Also auch mit DNT wird das Consent-Banner angezeigt. Es ist zudem zu sehen, dass einige Bots durchkommen. Sogar solche, die auch sonst nicht erkennbar sind, außer dass sie keine JavaScript-Bots sind. Als (neues) Feature habe ich mir eine IP to ASN Datenbank eingebunden und lasse die ASN Namen anzeigen. Es gibt seltsame Visits von seltsamen ASN. Das Resultat dieses Test-Trackings: Beide Trackings (JavaScript und eigenes PHP) sind sehr unterschiedlich.

@melbao

[quote=“melbao, post:12, topic:62406”]
Mein Tipp: Lass es. Da hast du scheinbar zu wenig Ahnung von.
[/quote]

Danke :roll_eyes:. Dass ich Anfängerin bin, hatte ich eingangs angemerkt. Nun hab ich schon Composer erfolgreich installiert und nun das. Wie schriebst du so schön an jbn? “Zeitverschwendung”

@Matta , schau doch mal ob der Webhoster, der von dir genutzt wird, auch Statistiken erstellt. Die meisten machen das. Das sind server access log Statistiken. Mit denen kannst du die von Matomo und GA vergleichen.

@Matta , wenn du in deinem Matomo eine Geo-IP Datenbank aktiviert hast, dann aktiviere auch das Provider Plugin. Dann wird in den Reports der Provider (Telekom, Vodafone, Telefonica, …) angezeigt. Daran kannst du dann auch die seltsamen Visits erkennen.

Falls nur eine Free Datenbank aktiviert ist, dann verwende bei
System → Geolocation → Setup automatic updates of geolocation databases
neben der (default) Location Database
https://download.db-ip.com/free/dbip-city-lite-2025-03.mmdb.gz
bei ISP Database die free “IP to ASN” database
https://download.db-ip.com/free/dbip-asn-lite-2025-03.mmdb.gz

Also:
Zuerst Plugin GeoIp2 aktivieren.
Dann System → Geolocation → Setup automatic updates of geolocation databases.
Location Database
https://download.db-ip.com/free/dbip-city-lite-2025-03.mmdb.gz
ISP Database
https://download.db-ip.com/free/dbip-asn-lite-2025-03.mmdb.gz
Dann Plugin Provider aktivieren.

@melbao
Danke für den Tipp. Die Umsetzung hat technisch gesehen geklappt. Nun habe ich zwar eine neue Tabelle “Anbieter”, doch nach ein paar Stunden sind 68 % der Anbieter als unbekannt kategorisiert. Sind dies nun alles Bots? Laut Matomo scheint dies nicht unbedingt der Fall zu sein. Und ich selbst denke das auch nicht, da (laut Tabelle “Land”, die sich ebenso wie “Anbieter” auf “eindeutige Besucher” bezieht) kein einziger der Besucher aus den USA kam, wo in der Regel wohl die Bot-Zugriffe herstammen (jedenfalls hatte ich zeitweise schon mehr Zugriffe aus den USA als aus Deutschland). Insofern ist mir jetzt ehrlich gesagt der Nutzen der Tabelle “Anbieter” hinsichtlich einer realstischeren Einschätzung der tatsächlichen, realen Mesucher nicht klar, und darum geht es ja hier eigentlich (mit welcher Telefongesellschaft die Leute nun meine Seite aufrufen, ist mir ziemlich egal).

Hallo @Matta , das verstehe ich jetzt nicht.

Habe selbst zu tun gehabt dieses Plugin “Provider” wie von mir gewünscht zu aktivieren. Danke für den Link. Das ist mir neu. Habe nicht gewusst und wurde mir auch nicht mitgeteilt, dass dieses Plugin “Provider” auch ohne IP Datenbank funktioniert.

Hast du denn nun in den Einstellungen die Geo-IP Datenbank aktiviert?
: https://matomo.org/faq/how-to/setting-up-accurate-visitors-geolocation/
Hast du zudem eine “Location Database” und eine “ISP Database” installiert? Die “ISP Database” zeigt die Provider.
Einstellungen:
→ Standorterkennung → Standorterkennungsdienst
da muss der grüne Button bei “DBIP / GeoIP 2 (Php)” und es muss da “Installiert” angezeigt werden. In Der Sidebar die Infos zu deiner IP.

Aber, was in dem Screenshot im Link nicht zu sehen ist, weiter unten ist ein Feld mit “Automatische Aktualisierungen für Geolocation-Datenbanken einrichten” Da müssen die beiden Datenbanken zum download angegeben werden (wie oben erklärt).

Matomo hat ein Problem, wenn nur eine “ISP Database” (Internet Anbieter Datenbank) und keine “Location Database” (Standortdatenbank) installiert ist. Dann sind die kleinen Flaggen im “Visit Log” alle “unknown”. Weil Matomo das uralte Problem hat, dass es Location und Language zusammenwürfelt.

Du kannst die IP-Adressen bei denen mit “unknown” hier testen: https://www.maxmind.com/en/geoip-demo

Grüner Button und “Installiert” werden bei bei “DBIP / GeoIP 2 (Php)”angezeigt, doch das scheint nur vage zu funktionieren, denn ich werde in der Sidebar in Hannover verortet, und das ist (Gott sei Dank :grinning:) 150 km entfernt.
Weiter unten sind auch die beiden von dir genannten gz-Dateien eingetragen.
Insofern scheinbar alles gut.
Die Frage ist nur, was bringt mir das bzgl. der Genauigkeit der Ermittlung der Besucheranzahl, wenn die Anbieter von 68 % der “eindeutigen Besucher” nicht identifiziert werden (s.o.)?

Da ist die Frage, wieso bei dir bei so vielen die IP nicht einem ASN (Firma) zugeordnet werden können. Bei mir werden da vorwiegend die herkömmlichen Firmen (Telekom, Vodafone, Telefonica, Versatel, …) angezeigt. Nur sehr sehr wenige sind “unknown”. Heute gar keine.

Prüfe doch mal die IPs der “unknown” in der
Maxmind Database: https://www.maxmind.com/en/geoip-demo (scrollen)
DB-IP Database: https://db-ip.com/ (oben rechts)
und teile hier mit, welche Firma diese beiden den IPs zuteilen, also ob da auch “unknown”.

Der aktuelle Wasserstand: Heute sind nur noch 30 % der Anbieter unkown.

Aber: Was macht dein Vorschlag, die IPs der Besucher mit unbekanntem Anbieter herauszusuchen und in den beiden genannten Services zu verorten zu versuchen, für einen Sinn? Bestenfalls könnte ich dann alle “eindeutigen Besucher” einer Telefongesellschaft zuordnen - und inwiefern bringt mich das meinem Ziel näher, genauere Auskunft über die reale Anzahl der Besucher zu bekommen?