Bot Detection deaktivieren

Mein Anliegen mag seltsam klingen, aber ich bräuchte die Möglichkeit, dass Matomo die Bots nicht ausfiltert. Das passiert zwar bedingt automatisch, wenn ein Bot kein Javascript unterstützt. Dennoch findet eine Filterung statt.

Wofür brauche ich das? Vergleichsweise einfach zu erklären. Ich verwende auf meinem Server sowohl die herkömmliche Javascript Integration als auch die PHP API. Damit sich beides nicht in die Quere kommt und womöglich falsch oder doppelt getrackt wird, hab ich mir ein kleines Script gebastelt, das für die PHP API nur das getrackt wird, was bestimmte Kriterien erfüllt. Die Zugriffe über die API werden außerdem unter einer anderen Site ID gespeichert. Die API Variante hat den Vorteil, dass ich damit nicht nur reguläre Zugriffe auf existierende URLs erfasse, sondern zu 99,99 % auch alle != 200 Zugriffe. Im Grunde genommen erfasse ich damit nahezu alles, wozu ich ansonsten in der access_log nachsehen müsste. Man könnte das Benötigte zwar auch über einen Import der logs machen, aber darin stehen alle Zugriffe, wodurch nichts gewonnen wäre. Meine Lösung ist deswegen in jedem Falle besser, zumal ich diese Zugriffe in Echtzeit bekomme und nicht erst was importieren muss. Bei den für Matomo unbekannten Bots und alle Zugriffe, die eben keine Bots sind, weil diese als solche nicht erkannt werden wollen, funktioniert meine Lösung, aber mir fehlen eben noch die bekannten Bots und die filtert Matomo aus.

Hallo Serpant Driver

Vielleicht hilft dir das schon weiter

_paq.push(['appendToTrackingUrl', 'bots=1']); .Ich

Danke, aber das setzt ja Javascript voraus, wobei ich nicht weiß wie Matomo das überhaupt handelt, wenn mal angenommen der Googlebot eine Seite aufruft?

Google wird über IP Bereiche raus gefiltert.
Ich hab damit aber auch wenig Erfahrung. Will bloß helfen ….

Aber im Quellcode gibt es unter Plugin / Tracker / Visit.php einige Ausschlüsse von IPs oder Spam Referrer.

Wenn man die Dazei leert, müsste es mehr werden ….

Das ist ein sehr guter Ansatz. Das schaue ich mir mal an. Vielen Dank!

Unter dem angegebenen Datei Pfad bin ich leider nicht fündig geworden. Du hast mir aber trotzdem weitergeholfen. Der Googlebot, Bing und Yahoo werden tatsächlich über eine IP Range ausgefiltert. In der
/config/core/Tracker/VisitExcluded.php findet man die dazugehörigen Funktionen getBotIpRanges und getGoogleBotIpRanges. Dann gibt es noch eine /config/vendor/matomo/device-detector/regexes/bots.yml

Also was ich auch anstelle und dazu gehört auch das Leeren von diversen Filterlisten und IP-Ranges, weigert sich Matomo Bots nicht auszufiltern. Die PHP API funktioniert zwar wie gewünscht und fischt mir die entsprechenden Requests raus, aber nur diejenigen, die von Matomo nicht als Bot erkannt werden. Die PHP Api besitzt genauso wie die Javascript API einen Zusatzparameter bots=1, aber egal, ob diesen PArameter verwende oder nicht, ändert sich daran nichts. Ich sehe zwar, dass Matomo auch die Bot Zugriffe in die DB schreibt, will diese aber nicht in der Besucher Log anzeigen. Testweise habe ich mir ein Plugin installiert, welches in einer separaten Tabelle die Bot Zugriffe anzeigt, aber die Infos dazu sind spärlich und beschränken sich auf das Datum des letzten Zugriffs und einen Counter. Das wars dann auch schon, aber zumindest sehe ich darüber, dass die PHP API funktioniert, wenn ich testweise die Javascript API deaktiviere. Das Plugin für den Device Detector Cache hatte ich auch deaktiviert, aber auch das ändert nichts.

Es ist zum kotzen… :face_vomiting:

Okay,

Ich habe gerade wieder etwas Zeit und kann daher ein paar Tipps geben:

Der Code, der Bots ignoriert ist wirklich simpel, ich würde also empfehlen dort anzufangen Dinge anzupassen:

Und gleichzeitig Tracking debugging zu aktivieren:
https://developer.matomo.org/api-reference/tracking-api#debugging-the-tracker

Dann antwortet der tracking API request mit einem sehr detaillierten Log warum der Request ignoriert wurde.

Und gleichzeitig ein var_dump($allowBots) in Zeile 192 sollte Information darüber geben, ob Matomo den Parameter richtig erkennt. (denn wenn der gesetzt ist, wird in Zeile 195 immer zurückgegeben, dass es kein Bot ist und daher in Zeile 67 nie ignoriert.

@Lukas

Die Tracking API ignoriert Aufrufe von bekannten Bots ja nicht. Zumindest glaube ich das so zu erkennen, wenn ich den eingerichteten Cron, bzw. die Archivierung in der Console manuell aufrufe. Es wird also was in die DB geschrieben, allerdings dann im Frontend nicht angezeigt. Andernfalls würde ich das BotTracker Plugin, das ich zur Überprüfung installiert habe, auch nichts anzeigen. Die API funktioniert also, aber eben nur bei unbekannten Bots. Mittels matomo.php?bots=1 sollte die API eigentlich Bots tracken, tut sie aber nicht.

Nichtsdestotrotz und weil die API nicht wie gedacht funktioniert, muss ich dann doch Hand am Code anlegen, wobei ich an der isNonHumanBot Funktion schon dran bin.

Ich habe die Lösung gefunden. Dein Verweis auf die VisitExluded.php war zwar hilfreich und hätte schon viel früher zu einer Lösung geführt, aber ich stand mir, bzw. das Bottracker Plugin im Weg. Heißt, nach Deaktivierung dieses Plugins und das Setzen von $excluded = false; in der Funktion isExcluded und dem auskommentieren der IPs in der Funktion isChromeDataSaverUsed werden nun endlich alle Bots getrackt.

Das Problem mit dem Bottracker Plugin war, bzw. ist, dass es die o.g. Funktionen überschreibt. Die Änderungen an den besagten Funktionen konnten also nie funktionieren.

Wer sich für die Thematik interessiert, hier nochmal ein paar Infos dazu. Ich betreibe den Javascript und den HTTP Tracker parallel, allerdings trackt der Javascript Tracker nur die Aufrufe, die einer bestimmten Filter Regel entsprechen, damit sich beide Tracker nicht in die Quere kommen und etwas doppelt getrackt wird. Dieser Filter ist vergleichsweise einfache und macht sich die Sec-Fetch Header zunutze. Bedeutet, alle Zugriffe ohne diese Header sind automatisch Bots, weil diese Header zu 99,99999% von Bots nicht verwendet werden. Allerdings muss man den Safari Browser von dieser Regel ausschließen, weil dieser Browser keine Sec-Fetch Header sendet.