Bots und Tracking Infos

Das erklärt dann wohl alles. Du definierst für dich und allgemein mittels deiner Methode was ein Bot und was ein Human Visit ist und gibts dir selbst eine Toleranz von 0,01 %.
Kein Kommentar …

Die von dir angekündigte “nächste Runde” sind also die Versionsnummern im Bezug zu den Browser-Namen. Das ist meiner Ansicht nach zu strikt und ergibt eine Fehlerquote weit höher als 0,01 %. Den Hinweis zum Mitmachen (Plugin Device Detector + Bot-Filter) wurde von dir abgelehnt. Da könntest du noch was lernen, aber willste nicht.

Dein Check der Versionsnummern … enthält ein Muster per zwei verschiedener Zeichen. Eine Prüfung auf diese beiden Zeichen wäre ein adäquater Bot-Filter.

Das Muster bei den Headers Accept und Accept-Language fehlt bei dir.

array_key_exists() würde es passender tun als isset().

Die Sec-Fetch-* Header Keys sind standardisiert*. strtolower() erhöht die Toleranz.
*Standardisiert zwar (noch) nicht von der IANA, aber von W3C.

Die Idee mit den Mustern in den Browser-Headern ist schon sehr hilfreich, aber deine Äußerungen zur Genauigkeit dann doch etwas überheblich. Mit JS wird sowieso nicht alles getrackt und eine Fehlerquote bei der Bot-Erkennung von 10 % (in beide Richtungen) akzeptabel, bzw. realistisch, sowie genügend.

Du darfst meine Lösung gerne kritisieren und natürlich auch Vorschläge zur Verbesserung einbringen, aber solange du keine konkrete Daten lieferst, theoretisierst und spekulierst Du nur. Ich für meinen Teil habe den Proof-of-Concept schon vor Jahren erbracht und überprüfe den Status fast täglich.

Wenn Du Dir das verinnerlichst und bereit dafür bist es zumindest zu testen, dann können wir diese Diskussion gerne fortsetzen. Du musst die Lösung ja nicht gleich praktisch einsetzen, sondern es zunächst auf ein entsprechendes Logging begrenzen.

einige Monate später …

wie es den Anschein hat, lernen die Bots stetig dazu. Bei meiner Website mit mehreren 10.000 Webpages ist die Besucherzahl seit Januar um das Doppelte gestiegen. Was mir bei meinem Test mit eigenem PHP-Tracking aufgefallen war, dass auch Bots mit IPs von Telekom und Co. betrieben werden. Das war daran zu erkennen, weil ein und die selbe IP verschiedene Websites nacheinander aufgerufen hatte, die in keinem Zusammenhang stehen.

Was weiterhin gegen die stetige Bot-Flut getan werden kann? Keine Ahnung.

Es wird immer schlimmer mit den Bots. Auf einigen meiner unbedeutenden Websites zwar keine echten Besucher, aber 28 GB an Traffic im Monat! Eine Verdoppelung gegenüber März.

Habe Gestern meine Consent Banner Hürde wieder um eins erhöht und sofort sind es weniger getrackte Visits. Es ist unwahrscheinlich, dass Human Visitors den ersten Button klicken, aber den zweiten nicht. Bots scheinen zwar einen (1) Button bewältigen zu können, aber weitere nicht.

Die ganz große Frage ist, wieso Bots unbedingt wollen, dass ihre Visits getrackt werden? Sie könnten auch simpel ein DNT senden, oder so tun als würden sie einen Adblocker benutzen.

Nicht nur anhand dieser Beobachtungen ist zu erkennen, dass das Internet vollkommen kaputt-gewirtschaftet wurde und obendrauf kaputt-reguliert wird.

Neben den Bots gibt es auf einigen meiner Website eine große Anzahl an Visitors, die ein Verhalten ähnlich Bots aufweisen. Sie klicken vollkommen ferngesteuert durchs Internet, Hauptsache sie haben alles mal angeklickt, vollkommen interessenlos und vermutlich gelangweilt. Einzuschätzen wären diese wohl in einer Altersspanne von um 10 Jahre alt, aber anscheinend auch bis 30 Jahre alt.

Weitere Infos zum Thema. Es ist wirklich heavy. Im Zeitraum März/April/Mai gab es extrem viele Bots. Der Traffic war 2,5 mal so hoch wie vorher und wie jetzt danach. Zudem ist es weiterhin so, dass die Schwere der Hürde im Consent Banner etwas ausmacht. Umso schwerer, umso weniger getrackte Visits. Nicht festzustellen ist dabei, ob das auch human Visits betrifft.

Anderweitig wurden mir Statistiken von TikTok bekannt. Dort ist das Verhalten von Internetusern gut zu beobachten mittels der Absprungrate. Die meisten mögen kurze Videos (3-10 Sekunden). Die Verweildauer nutzt TikTok um ähnliche Videos, eben mit der selben Spiellänge wie Verweildauer vorzuschlagen. Das Verhalten de User wird manifestiert. Es gibt aber wohl eine Einstellung, die das gespeicherte Verhalten löscht. Insgesamt sei jedoch ersichtlich, dass die meisten eine Verweildauer von 3-10 Sekunden haben. Exakt das stimmt mit den Statistiken auf meinen Websites überein. Es wird einfach nur geklickt, geklickt, geklickt mit Null Interesse.

Diese Klicker interessieren in der Statistik nicht. Was benötigt wird ist eine Verzögerung des Trackens, jedoch nicht dem Start des Trackings. Also das Matomo Tracking zwar startet, aber wartet mit dem Senden der Daten. Damit könnten diese Klicker gefiltert werden, während alle anderen weiter getrackt werden. Nur diejenigen werden getrackt, die mindestens x Sekunden Verweildauer haben.

Es gibt ein neu hinzugekommenes Problem. Dies gab es zwar schon immer, es ist jedoch schlimmer geworden.

Vorerst aber nochmal Infos zu den Bots. Da hat Wikipedia einige Erfahrungen mitgeteilt:
https://www.heise.de/news/Wikipedia-Bot-Traffic-tarnt-sich-zunehmend-als-menschlich-10778492.html
Es ist also nur noch sehr schwer bis nicht mehr möglich Bots zu filtern.

Das neue Problem ist, dass vermehrt nur noch Events, aber keine Pageviews getrackt werden. Das ist schwer erklärbar, da es nur vermehrt, aber nicht immer auftritt. Dieses Problem verhindert leider das eruieren weiterer Probleme, wie das Verwenden einer Button-Klick-Hürde. Denn dabei ist zu beobachten, dass scheinbar nicht alle Button-Klicks getrackt werden. Es tritt also allgemein ein vermehrtes scheinbar nur sporadisches Tracking auf.

Vor ein paar Wochen hatte ich einen massiven “non-detectable Bot”-Angriff auf eine meiner Websites mit vielen Webpages. Der hat mir meine Statistik runiniert. Ich musste dann alle “Direct View + Browser Language: en” filtern. Damit werden sicher auch Human Visitors gefiltert. Aber eine andere Möglichkeit habe ich nicht gefunden. Ich filtere eh schon sehr stark.

Leider hatte ich zu dieser Zeit mein eigenes PHP-Tracking nicht aktiv. Es gab ein Muster, aber anhand dessen war und ist es mir nicht möglich zu filtern, da zu großer Aufwand. Der non-detectable Bot hatte bei fast jedem Visit die IP geändert. Das ist von anderen detectable Bots bekannt. Zu erkennen war dieser Visitor als Bot, da er in einer Kategorie zurück (« ältere) oder vor (neuere ») klickte und dabei jedesmal eine andere IP hatte.

Ich habe jetzt mein eigenes PHP-Tracking mal wieder laufen und habe da aber nicht wieder so einen Bot gefunden, nur ähnlich. Darunter auch einer, der WordPress checkt. Ich verwende kein WordPress.

WordPress-Checker:

/wp-admin/
Content-Length - 0
Cache-Control - no-cache
Sec-Fetch-User - ?1
Sec-Fetch-Site - same-origin
Sec-Fetch-Mode - navigate
Sec-Fetch-Dest - document
Upgrade-Insecure-Requests - 1
Dnt - 1
Accept-Language - en-US,en;q=0.9,ar;q=0.8
Connection - close
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding - gzip, deflate, br
User-Agent - Mozilla/5.0 (Macintosh; Intel Mac OS X 13_6_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15

2 gleichzeitige Zugriffe auf eine Webpage mit zwei verschiedenen IPs:

Content-Length - 0
Connection - close
Accept-Language - en-US,en;q=0.9
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
User-Agent - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Upgrade-Insecure-Requests - 1
Sec-Ch-Ua-Platform - "macOS"
Sec-Ch-Ua-Mobile - ?0
Sec-Ch-Ua - "Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"

Wie sollen die Visits als Bots erkannt werden? Der Aufwand ist mir zu groß.

Das ist dem Verhalten nach alles Bot Traffic. Vermutlich 1 Bot mit wechselnden IPs und Browser Agents.

2.57.131.152	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2917.1471 Mobile Safari/537.36
1.1.190.28		Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.9478.1551 Mobile Safari/537.36
2.122.149.41	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.5378.1961 Mobile Safari/537.36
186.29.45.244	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.6323.1865 Mobile Safari/537.36
109.254.37.193	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.7053.1512 Mobile Safari/537.36
191.243.28.86	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.7325.1308 Mobile Safari/537.36
184.93.87.99	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.4252.1431 Mobile Safari/537.36
137.175.186.146	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.5082.1297 Mobile Safari/537.36
191.30.129.180	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.1589.1196 Mobile Safari/537.36
119.18.1.215	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.4015.1206 Mobile Safari/537.36
194.193.145.140	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.5017.1617 Mobile Safari/537.36
191.112.43.19	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.8660.1845 Mobile Safari/537.36
179.0.160.198	Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.6911.1834 Mobile Safari/537.36
186.235.251.64	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.6253.1322 Mobile Safari/537.36
175.34.44.13	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.4258.1202 Mobile Safari/537.36
202.65.233.218	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.3982.1412 Mobile Safari/537.36
179.124.26.20	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.3569.1163 Mobile Safari/537.36
210.106.232.234	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.6013.1789 Mobile Safari/537.36
181.188.178.103	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.7747.1178 Mobile Safari/537.36
154.68.185.135	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.5011.1167 Mobile Safari/537.36
201.216.74.218	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2572.1475 Mobile Safari/537.36
110.226.150.148	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.3075.1237 Mobile Safari/537.36
186.41.174.87	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.1562.1260 Mobile Safari/537.36
93.146.81.252	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.5328.1980 Mobile Safari/537.36
152.56.19.59	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.9965.1929 Mobile Safari/537.36
177.225.134.86	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.9285.1828 Mobile Safari/537.36
77.49.114.3		Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.9294.1113 Mobile Safari/537.36
189.236.64.248	Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.6973.1034 Mobile Safari/537.36
157.49.124.103	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.4054.1525 Mobile Safari/537.36
45.117.62.242	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.3894.1787 Mobile Safari/537.36
81.56.145.57	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.1214.1806 Mobile Safari/537.36
201.174.162.77	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.8644.1309 Mobile Safari/537.36
73.210.199.104	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.3542.1250 Mobile Safari/537.36
14.190.129.58	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.7070.1769 Mobile Safari/537.36
103.190.96.187	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2342.1383 Mobile Safari/537.36
108.224.147.163	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.7439.1358 Mobile Safari/537.36
84.197.139.16	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.6579.1147 Mobile Safari/537.36
189.225.122.55	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2699.1837 Mobile Safari/537.36
152.58.33.222	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.3699.1361 Mobile Safari/537.36
67.43.100.138	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.8026.1163 Mobile Safari/537.36
177.71.107.179	Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.5445.1463 Mobile Safari/537.36
84.68.177.179	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36
152.232.149.3	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
170.23.1.243	Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
24.50.94.9		Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
47.82.8.87		Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36
14.233.185.148	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

Das ist dem Verhalten nach 1 Bot:

187.190.140.163
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
User-Agent - Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.6699.1802 Mobile Safari/537.36
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

196.119.197.233
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
User-Agent - Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.8132.1818 Mobile Safari/537.36
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

1.40.153.95
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
User-Agent - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2758.1684 Mobile Safari/537.36
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

45.187.110.40
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
User-Agent - Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2347.1617 Mobile Safari/537.36
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

152.237.163.48
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
User-Agent - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.4197.1858 Mobile Safari/537.36
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

200.202.100.4
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
User-Agent - Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.5594.1034 Mobile Safari/537.36
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7

14.13.224.128
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Encoding - gzip, deflate, br, zstd
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
Upgrade-Insecure-Requests - 1
Accept-Language - en-US,en;q=0.5
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/heif,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
User-Agent - Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.8607.1099 Mobile Safari/537.36

Gewechselt wird bei jedem Request die IP, sowie eine kleine Auswahl an verschiedenen User-Agents, in denen bei jedem Request die Chrome-Versionierung variiert. Solche Bots sind nur sehr schwer als Bots zu erkennen. Matomo erkennt diese nicht als Bots.

Ja, es wird immer schlimmer mit den Bots. Was du (und wir alle) da sehen ist Teil des Katz und Maus Spiels um die wertvollste KI-Ressource: (neue) Trainingsdaten. Während Content Publisher versuchen, Bots auszusperren, um kommerzielle Ansprüche auf ihre Inhalte zu schützen und dafür Dienste wie jener von Cloudflare entstehen (und ein eigenes, neues unschönes Businessfeld gründen, mit Abhängigkeiten etc..), “wehren” sich die Bots mit immer neuen und dubioseren Verschleierungstaktiken. Die schnellen IP-Wechsel und zufälligen Useragents sind schon normal (rotating proxy pools), stammen aber meines Wissens ursprünglich aus dem Botnet-Umfeld. Mittlerweile sind so viele Verhaltensformen randomisiert, dass es wirklich sehr schwierig geworden ist, Muster zu erkennen. Meine eigenen Versuche, wirklich viele Faktoren zu berücksichtigen, diese zu gewichten und daraus ein Blocking-Schema zu entwickeln, scheitert nicht nur am Aufwand, sondern mittlerweile an der Wirkung. Ich versuche nun, Verhaltens-Abweichungen zu Langzeitbeobachtungen festzustellen. Aber das ist erstens viel Aufwand und zweitens braucht man dafür die alten Daten. Und drittens werden sie sich wieder anpassen, die Bots. Ich gehe davon aus, dass diese Bots KI-gesteuerte Trial&Error Vorgehensweise zeigen.
Blocken ist deshalb wohl der falsche Weg, wenn es nur um unverfälsche Analytics geht. Nachträglich filtern (Logfiles säubern) ist erfolgsversprechender. Wenn man natürlich Server-Ressourcen sparen oder gar die INhalte schützen will, dann hilft nur blocken.

1 Like

Darauf bin ich vor einiger Zeit auch schon gekommen. Mir geht es nicht ums Blocken des Contents, sondern des Trackings. Bots brauch ich nicht auch noch im Tracking. Es ist aber eher weniger ein Blocken, sondern mehr ein Filtern, welche Visits getrackt werden und welche nicht.

Die Serverlast ist ein Ding der Serverbetreiber. Die fangen ja auch schon an zu blocken/filtern, aber nicht alle. Mir geht es nur um ein möglichst sauberes Tracking. Aber auch davon bin ich schon weggekommen. Tracking ist nur noch Monitoring, ob alles läuft. Nebenbei ergibt sich daraus vielleicht auch ein Tracking, indem ich sehe, welche Visits kein Bot-Muster aufweisen.

Ich habe die Tage meinen PHP-Filter (User Agent, Headers) nochmals angepasst, nachdem ich diesen letztes Jahr nur sehr einfach angefangen hatte. Es hat Wirkung, aber Bots scheinen immer noch durchzukommen. Die Muster sind aber viel schwerer zu erkennen. Es gibt fast keinen Unterschied mehr zu Humans. Manche Humans verhalten sich wie Bots. Browser-Plugins ermöglichen Humans das stetige Wechseln der IP und des User Agent und der Header.

Zudem habe ich das TrackSpamPrevention Plugin aktiv und auch eine eigene IP-Filterliste.

Filtern ist zu aufwendig und es gibt dabei keinerlei Validierung, ob nicht auch Humans gefiltert werden. IP, User Agent und Header genügen nicht für ein sauberes Filtern. Es müsste eine Datenbank der Requests angelegt werden und damit eine Mustererkennung durchgeführt werden. Das ist viel zu aufwendig.

Ich belasse es vorerst bei meinem nun verbesserten PHP-Filter fürs JS-Tracking. Auf absehbare Zeit ist Matomo aber mittlerweile ungeeignet für Tracking.

PS: Mal abwarten, was das STV Plugin von Serpent_Driver beinhaltet.

Das hier ist ein Bot von Twitter:

Content-Length - 0
Connection - close
Accept-Encoding - zstd,gzip,deflate,br
Priority - u=0, i
Accept-Language - en-US,en;q=0.9
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site - none
Sec-Fetch-Mode - navigate
Sec-Fetch-Dest - document
User-Agent - Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
Sec-Ch-Ua-Platform - "macOS"
Sec-Ch-Ua-Mobile - ?0
Sec-Ch-Ua - "Chromium";v="142", "Google Chrome";v="142", "Not_A Brand";v="99"

Es wird bei jedem Request die IP gewechselt.
IP-Range: 69.12.56.0/22
ISP siehe hier: https://www.maxmind.com/en/geoip-demo
Der Bot kann aber wohl kein JS. Ob Matomo diesen im PHP-Tracking filtert?

JS-Tracking ist so gesehen auch ein Tracking-Filter.

Sehr wahrscheinlich ein Bot. IP random.
ISP: GTT Communications Inc. (Cable/DSL, USA)

69.12.59.79
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Language - en-US,en;q=0.9
Accept-Encoding - gzip, deflate, br, zstd
Referer - https://www.google.com/
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
User-Agent - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
Upgrade-Insecure-Requests - 1
Sec-Ch-Ua-Platform - "Windows"
Sec-Ch-Ua-Mobile - ?0
Sec-Ch-Ua - "Not:A-Brand";v="99", "Google Chrome";v="145", "Chromium";v="145"

69.12.56.121
Content-Length - 0
Connection - close
Priority - u=0, i
Accept-Language - en-US,en;q=0.9
Accept-Encoding - gzip, deflate, br, zstd
Sec-Ch-Ua-Platform - "Windows"
Sec-Ch-Ua-Mobile - ?0
Sec-Ch-Ua - "Not:A-Brand";v="99", "Google Chrome";v="145", "Chromium";v="145"
Sec-Fetch-Dest - document
Sec-Fetch-User - ?1
Sec-Fetch-Mode - navigate
Sec-Fetch-Site - none
Accept - text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
User-Agent - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36
Upgrade-Insecure-Requests - 1

Viele weitere Requests.
Der Bot kann JavaScript. Die Zeitabstände der Requests sind random.
Der Bot ist nicht erkennbar.