Logfile-Analyse für KI-Crawler: wer wirklich kam
Logfile-Analyse liest User-Agent und IP, die der Server ohnehin speichert, und prüft die Identität vor dem Zählen. Mit Befehl, Feldtabelle, Token-Liste und den Grenzen dessen, was ein Log beweist.

Logfile-Analyse heißt, zwei Felder zu lesen, die dein Server ohnehin speichert: den User-Agent und die IP-Adresse. Damit trennst du Anfragen eines echten KI-Crawlers von denen, die sich nur so nennen. Sie beantwortet eine Frage, die ein Erreichbarkeitstest nicht lösen kann: nicht „Konnte GPTBot diese Seite erreichen“, sondern „Kam er, an welchem Tag und wie oft“. Ein 200 zeigt, dass die Tür aufgeht. Das Log zeigt, wer hindurchging.
Was Logfile-Analyse sagen kann und was nicht
Sie liefert den Agenten, den angeforderten Pfad, die Uhrzeit, den Statuscode und die IP. Sie sagt nicht, ob der Inhalt später in einer Antwort oder im Training verwendet wurde. Sie bestätigt auch die Identität nicht allein: Der User-Agent ist eine Behauptung, und jeder kann ihn kopieren. Nur eine passende IP macht aus „einer Anfrage, die GPTBot sagt“ den echten „GPTBot“.
Deshalb braucht das Thema eine Methode und keinen Einzeiler. Eine Logzeile hat zwei Hälften. Die Hälfte, die alle lesen, ist der Agent. Die Hälfte, die entscheidet, ob die Zeile stimmt, ist die IP-Adresse.
Vorher brauchst du Lesezugriff auf das Server-Log und ein Terminal. Wenn dein Hoster keine Logs liefert, gibt es keinen Ersatz: Kein externes Werkzeug sieht Anfragen, die deinen Server nie erreicht haben.
Warum das Log den Agentencheck schlägt
Ein Erreichbarkeitstest schickt eine Anfrage mit gefälschtem Agenten und beobachtet die Antwort. Ein Log zeichnet auf, was echte Clients ohne Aufforderung getan haben. Beide können sich in beide Richtungen widersprechen: erreichbar ist nicht besucht, und ein Test kann scheitern, während ein Crawler einen anderen Weg nimmt.
Das Log liefert außerdem das Feld, das ein Test nie erzeugt: Zeit. Ein Test gibt Ja oder Nein in einem Moment. Ein Log gibt eine Zählung pro Tag und pro Bot, die einzige Möglichkeit, einen wöchentlichen Crawler von einem einmaligen Besuch zu unterscheiden.
Mach es in dieser Reihenfolge
Fünf Schritte. Jeder hat eine Prüfung, bevor der nächste beginnt.
- Finde das Log und bestätige das Format. Bei nginx ist
combinedder Standard; bei Apache dokumentiert das erweiterte NCSA-/combined-Format%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i". Fertig, wenn du an einer echten Zeile jedes Feld benennen kannst. - Zähle nach Agent, bevor du filterst. In einer combined-Zeile ist das sechste Feld zwischen den Anführungszeichen der Agent. Fertig, wenn du eine Liste der dreißig häufigsten Agenten hast, nicht nur der erwarteten.
- Zieh die Tokens der KI-Crawler heraus. Die genauen Zeichenfolgen stehen in der Tabelle unten. Fertig, wenn jeder Token eine Anzahl und ein Erstsichtungsdatum hat.
- Prüfe die IPs, denen du glauben willst. Reverse- und Forward-DNS für Google, veröffentlichte JSON-Bereiche für OpenAI. Fertig, wenn jede zitierte Zeile geprüft oder als ungeprüft markiert ist.
- Notiere das Fenster, nicht nur die Summe. Eine Zahl ohne Tage bedeutet nichts. Fertig, wenn deine Notiz „412 Anfragen, 1. bis 31. August 2026, 5 Websites“ lautet.
Das Ergebnis: ein Befehl und zwei Tabellen
Dieser Befehl macht aus einem combined-Log eine Zählung pro Agent. Er setzt voraus, dass im Agentenfeld keine Anführungszeichen escaped sind, was für die Crawler unten gilt und für manche Scraper nicht.
awk -F'"' '{print $6}' access.log \
| sed 's/;.*compatible;//' \
| sort | uniq -c | sort -rn | head -30
Der sed-Schritt ist da, weil Browser den echten Token hinter einem Kompatibilitätspräfix verstecken. Behalte auch das rohe sechste Feld, um zurückzugehen, wenn eine Zählung falsch aussieht.
Das zweite Ergebnis ist die Feldtabelle. Die meisten kennen den Agenten und hören dort auf, weshalb ihr erster Durchlauf die Pfade verpasst.
| Feld | Beispiel | Aussage |
|---|---|---|
| Remote-Adresse | 66.249.66.1 | Das einzige Feld, das gegen eine veröffentlichte Liste prüfbar ist |
| Anfragezeile | GET /pricing HTTP/1.1 | Methode und angeforderter Pfad |
| Status | 200 | Ob Inhalt oder Sperre zurückkam |
| Gesendete Bytes | 18432 | Wie viel tatsächlich zurückging |
| Referrer | - | Bei Crawlern fast immer leer |
| User-Agent | ... GPTBot/1.4 ... | Die Behauptung, fälschbar, überbewertet |
Drittes Ergebnis: die Token-Liste der Betreiber, am 22. September 2026 aus deren Dokumentation gelesen. Sie ist nicht vollständig, und neue kommen ohne Ankündigung. Deshalb zählt Schritt 2 alles, bevor gefiltert wird.
| Token | Betreiber | Zweck | Prüfbar |
|---|---|---|---|
GPTBot | OpenAI | Trainings-Crawl | Ja, über openai.com/gptbot.json |
OAI-SearchBot | OpenAI | Suchanzeige | Ja, über openai.com/searchbot.json |
ChatGPT-User | OpenAI | Vom Menschen ausgelöst | Ja, über openai.com/chatgpt-user.json |
Googlebot | Such-Crawl | Reverse- und Forward-DNS, dazu JSON | |
Google-Extended | Steuer-Token | Nein: sendet keine eigenen Anfragen | |
ClaudeBot | Anthropic | Crawl | Dokumentiert, Bereiche auf deren Seite prüfen |
PerplexityBot | Perplexity | Crawl | Dokumentiert, Bereiche auf deren Seite prüfen |
Zwei Zeilen tragen die Aussage. Google-Extended ist ein Steuer-Token, kein Crawler: Googles Dokumentation sagt, dass es keine eigene User-Agent-Zeichenfolge hat. Sein Fehlen im Log ist kein Fehler. ChatGPT-User wird von einer Person ausgelöst, seine Anfragen sind also kein automatischer Crawl.
Was schiefgeht
Dem Agenten glauben. Das ist der Standardfehler, und er erzeugt eine sichere, falsche Antwort. Googles Prüfung verlangt zwei DNS-Abfragen: reverse auf die IP, dann forward auf den zurückgegebenen Namen, mit zwingender Übereinstimmung. Bei OpenAI vergleichst du die IP mit der veröffentlichten Bereichsdatei. Für einen Crawler, der beides nicht veröffentlicht, schreib „ungeprüft“ statt zu glauben oder die Zahl zu löschen.
robots.txt-Abrufe als Seiten zählen. OpenAI merkt an, dass beim Abruf von robots.txt ein Marker am Agenten ergänzt werden kann, um diese Anfragen zu unterscheiden. Wenn dein Format den Pfad wegwirft, sehen ein robots.txt-Abruf und eine Seite gleich aus. Trenne nach Pfad, bevor du eine Crawl-Zahl berichtest.
Ein zu kurzes Fenster lesen. Sieben Tage beantworten keine Dreißig-Tage-Frage, und Logrotation kürzt das Fenster ohne Warnung. Nenne den ersten und letzten tatsächlich gezählten Zeitstempel.
Häufige Fragen
Kann man dem User-Agent im Log trauen?
Nein. Behandle ihn als Behauptung, bis die IP zu einem veröffentlichten Bereich passt oder Reverse- und Forward-DNS besteht. Ein Log ist ein Beleg, kein Identitätsnachweis.
Wie prüfe ich, ob GPTBot meine Website besucht hat?
Suche den Token GPTBot und vergleiche jede Treffer-IP mit openai.com/gptbot.json. Ein Token ohne passende IP ist eine andere Anfrage, die den Namen kopiert hat.
Wie viele Tage Log brauche ich?
Genug für einen vollständigen Crawl-Zyklus, was von der Website abhängt und keine allgemeine Zahl hat. Dreißig Tage sind ein vernünftiger Startwert. Wenn du nur sieben hast, schreib es dazu: Ein kurzes Fenster unterschätzt, nie überschätzt es.
Die Grenze, die ausdrücklich hingehört: Ein Log beweist, dass ein Abruf stattfand. Es beweist nicht, dass der Inhalt verwendet, gerankt oder zitiert wurde. Wenn du daraus eine veröffentlichte Aktion machen willst, dort setzt QueryWin an. Um zuerst zu prüfen, ob Crawler dich erreichen, beginne mit prüfen, ob KI deine Website lesen kann. Und wenn die Frage ist, welche Bots du erlaubst, steht die Antwort in robots.txt für KI-Crawler.
Der Agent stellt sich selbst vor. Die IP entscheidet, ob er die Wahrheit sagt.
Teil von dem QueryWin-Handbuch · Stufe 2


