So finden Sie KI-Crawler in Ihren Server-Logs
Suchen Sie im User-Agent-Feld Ihres Access-Logs nach Tokens wie GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot und PerplexityBot, und sehen Sie sich dann die Statuscodes an, die sie erhalten haben. Ein User-Agent allein beweist nichts. Prüfen Sie daher jede Quell-IP anhand der vom Anbieter veröffentlichten IP-Liste, bei Google und Apple per Reverse- und Forward-DNS.
Die robots.txt sagt, worum Sie Crawler bitten. Ihr Access-Log zeigt, was tatsächlich passiert ist: welche KI-Crawler kamen, welche Seiten sie abgerufen haben und was Ihr Server geantwortet hat. Es ist der direkteste Beleg, den Sie haben, und er braucht nur die Logdateien und ein Terminal. Die folgenden Beispiele verwenden das kombinierte Logformat, das nginx und Apache standardmäßig nutzen.
Auf dieser Seite
- Wie sieht der Besuch eines KI-Crawlers in einem Access-Log aus?
- Wie zähle ich die Besuche von KI-Crawlern?
- Was hat jeder Crawler tatsächlich erhalten?
- Wie verifiziere ich, dass ein Besuch wirklich von OpenAI, Anthropic oder Perplexity kam?
- Wie verifiziere ich Googlebot, Applebot und CCBot?
- Woran erkenne ich gefälschte KI-Crawler?
- Was können Logs nicht verraten?
Wie sieht der Besuch eines KI-Crawlers in einem Access-Log aus?
Im kombinierten Format enthält jede Zeile die Client-IP, die Uhrzeit, die Anfragezeile, den Statuscode, die Antwortgröße, den Referrer und den User-Agent. nginx definiert es als $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent", und das combined-Format von Apache hat dieselben Felder. Ein Besuch des Trainingscrawlers von OpenAI sieht so aus:
20.171.206.5 - - [12/Nov/2026:10:00:01 +0000] "GET /pricing HTTP/1.1" 200 5120 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"
Gesucht werden die Tokens, die die Anbieter dokumentieren: GPTBot, OAI-SearchBot und ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot und Claude-User (Anthropic); PerplexityBot und Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer und CCBot. Google-Extended und Applebot-Extended werden Sie nie sehen. Laut Google hat Google-Extended keine eigene User-Agent-Zeichenfolge, und laut Apple crawlt Applebot-Extended nicht; beide sind reine robots.txt-Tokens.
Wie zähle ich die Besuche von KI-Crawlern?
Teilt man jede Zeile am Anführungszeichen, steht der User-Agent in Feld 6. Wer nur dieses Feld abgleicht, vermeidet falsche Treffer durch URLs, die zufällig den Namen eines Bots enthalten. Dieser Befehl zählt die Besuche je Crawler im aktuellen Log und in rotierten, komprimierten Logs:
zcat -f /var/log/nginx/access.log* \
| awk -F'"' '{print $6}' \
| grep -Eo 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Perplexity-User|Googlebot|bingbot|Applebot|meta-externalagent|meta-webindexer|CCBot' \
| sort | uniq -c | sort -rn
Passen Sie den Pfad für Apache an, oft /var/log/apache2/access.log* oder /var/log/httpd/access_log*. zcat -f liest sowohl normale als auch gzip-komprimierte Dateien. Fehlt ein erwarteter Crawler, ist das allein kein Beleg für eine Sperre: Möglicherweise hat er in dem Zeitraum, den Ihre Logs abdecken, schlicht nicht vorbeigeschaut.
Was hat jeder Crawler tatsächlich erhalten?
Besuche zählen weniger als Antworten. Ein Crawler, der bei jeder Anfrage ein 403 erhält, war zwar da, hat aber nichts gelesen. Diese Befehle zeigen Statuscodes, die am häufigsten abgerufenen Pfade und ob der Crawler die robots.txt abgerufen hat:
# Status codes returned to PerplexityBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /PerplexityBot/ {split($3, s, " "); print s[1]}' | sort | uniq -c
# Most requested paths for OAI-SearchBot
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /OAI-SearchBot/ {split($2, r, " "); print r[2]}' | sort | uniq -c | sort -rn | head -20
# Did ClaudeBot fetch robots.txt, and what did it get?
zcat -f /var/log/nginx/access.log* | awk -F'"' '$6 ~ /ClaudeBot/ && $2 ~ /robots\.txt/ {split($3, s, " "); print s[1]}' | sort | uniq -c
Überwiegend 200er sind das, was Sie sehen wollen. Viele 403er oder 429er deuten auf eine Firewall-Regel oder ein Rate-Limit hin. 5xx-Antworten auf die robots.txt sind ernst: Nach RFC 9309 muss ein Crawler, der für die robots.txt einen Serverfehler erhält, annehmen, dass die gesamte Website gesperrt ist.
Steht Ihre Website hinter einem CDN, ändern sich zwei Dinge. Anfragen, die das CDN blockiert, erreichen Ihren Ursprungsserver nie und erscheinen daher gar nicht in dessen Logs; prüfen Sie stattdessen die Sicherheitsereignisse des CDN. Und solange Sie die Besucher-IP nicht wiederherstellen, protokolliert der Ursprungsserver die Adresse des CDN. Cloudflare sendet die ursprüngliche IP zum Beispiel im Header CF-Connecting-IP und protokolliert standardmäßig eine Cloudflare-IP.
Wie verifiziere ich, dass ein Besuch wirklich von OpenAI, Anthropic oder Perplexity kam?
Diese Anbieter veröffentlichen die IP-Bereiche ihrer Agenten: OpenAI unter openai.com/gptbot.json, openai.com/searchbot.json und openai.com/chatgpt-user.json; Anthropic unter claude.com/crawling/bots.json; Perplexity unter perplexity.ai/perplexitybot.json und perplexity.ai/perplexity-user.json. Laut Anthropic zeigt eine Quell-IP aus seiner Liste an, dass der Crawler von Anthropic kommt. Keines dieser drei Dokumente beschreibt eine Verifizierung per Reverse-DNS, nutzen Sie also die Listen.
Die Dateien haben dieselbe Form, eine prefixes-Liste mit Einträgen ipv4Prefix oder ipv6Prefix, sodass ein kleines Skript eine IP gegen jede davon prüfen kann:
python3 - 20.171.206.5 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "log-check"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print(ip, "listed" if any(ip in n for n in nets) else "NOT listed")
EOF
Um die IPs aufzulisten, die sich als ein bestimmter Crawler ausgegeben haben, führen Sie awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' über das Log aus und leiten die Ausgabe durch sort | uniq -c | sort -rn. Prüfen Sie jede gegen die passende Liste. Die Listen ändern sich, rufen Sie sie daher frisch ab, statt eine alte Kopie aufzubewahren.
Wie verifiziere ich Googlebot, Applebot und CCBot?
Google, Apple und Common Crawl dokumentieren eine Prüfung per Reverse- und Forward-DNS. Schlagen Sie den Hostnamen der IP nach, prüfen Sie dessen Domain, schlagen Sie dann diesen Hostnamen nach und bestätigen Sie, dass er auf dieselbe IP zurückführt:
host 66.249.66.1
# 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
host crawl-66-249-66-1.googlebot.com
# crawl-66-249-66-1.googlebot.com has address 66.249.66.1
Bei Google muss der Hostname je nach Crawler auf googlebot.com, google.com oder googleusercontent.com enden; Google veröffentlicht auch seine Bereiche, Googlebot in common-crawlers.json. Bei Apple muss er in applebot.apple.com liegen, die Bereiche stehen in applebot.json. Bei Common Crawl muss er unter crawl.commoncrawl.org liegen, und Common Crawl warnt, dass andere Crawler fälschlich den Namen CCBot verwenden.
Woran erkenne ich gefälschte KI-Crawler?
Scraper übernehmen oft den User-Agent eines bekannten Crawlers, um Filter zu umgehen. Typische Anzeichen:
- Der User-Agent nennt einen Crawler, aber die IP steht nicht in der veröffentlichten Liste des Anbieters, oder der Reverse-DNS-Eintrag passt nicht.
- Die Quelle ist ein Privatnetz oder ein Cloud-Anbieter, den der Anbieter nicht aufführt.
- Der Client ruft nie die robots.txt ab oder ruft Pfade ab, die die robots.txt für diesen Crawler sperrt.
- Anfragerate oder -muster weichen stark vom verifizierten Traffic unter demselben Namen ab, etwa Lastspitzen auf Such- oder Login-Endpunkten.
Das umgekehrte Problem gibt es auch: Ein Crawler, der einen gewöhnlichen Browser-User-Agent verwendet, lässt sich anhand der Logzeile gar nicht identifizieren. 2025 erklärte Cloudflare, es habe beobachtet, dass Perplexity mit nicht deklarierten, browserähnlichen User-Agents von IPs außerhalb der veröffentlichten Bereiche crawlt; Perplexity widersprach dieser Darstellung und ordnete einen Teil des Traffics einem Drittanbieterdienst zu. Logs allein können solche Fälle nicht klären, weshalb die Verifizierung über veröffentlichte IP-Bereiche in beide Richtungen wichtig ist.
Was können Logs nicht verraten?
Logs zeigen, was Ihren Server erreicht hat. Sie zeigen nicht, was Ihr CDN vor dem Ursprungsserver blockiert hat, ob eine Seite mit 200 den Text enthielt oder nur eine Skript-Hülle, oder ob ein Crawler heute durchgelassen würde. Außerdem decken sie nur den Zeitraum ab, den Sie aufbewahren, und auf ruhigen Websites zeigen sich KI-Crawler mitunter selten.
In einem AISeeWhy-Konto können Sie ein Access-Log im kombinierten Format hochladen (unkomprimiert oder .gz, bis 50 MB); es wird analysiert und verworfen, und die Anfragen jedes KI-Crawlers werden mit ihren Statuscodes gezählt und anhand der von den Anbietern veröffentlichten IP-Bereiche geprüft.
Häufige Fragen
Warum sehe ich Google-Extended nicht in meinen Logs?
Laut Google hat Google-Extended keine eigene User-Agent-Zeichenfolge. Das Crawling übernehmen die vorhandenen Crawler von Google, und das Token steuert nur, wie die Inhalte verwendet werden dürfen. Dasselbe gilt für Applebot-Extended, das laut Apple nicht crawlt.
Kann ich dem User-Agent in meinen Logs vertrauen?
Nein. Jeder kann einen beliebigen User-Agent senden. Behandeln Sie ihn als Behauptung und bestätigen Sie ihn anhand der vom Anbieter veröffentlichten IP-Bereiche oder, bei Google, Apple und Common Crawl, per Reverse- und Forward-DNS-Abfrage.
Meine Logs zeigen keine Besuche von KI-Crawlern. Bin ich gesperrt?
Nicht unbedingt. Der Crawler war vielleicht noch nicht da, Ihr CDN hat ihn womöglich vor dem Ursprungsserver blockiert, oder Ihre Logs erfassen nur die IP-Adressen des CDN. Prüfen Sie die Sicherheitsereignisse Ihres CDN und testen Sie die Seite mit dem User-Agent jedes Crawlers.
Ist der Traffic von ChatGPT-User ein Crawler?
Laut OpenAI wird ChatGPT-User für bestimmte Nutzeraktionen verwendet und nicht, um das Web automatisch zu crawlen. Seine Besuche folgen meist darauf, dass jemand ChatGPT nach einer Seite fragt, und treten deshalb nur in kleiner Zahl auf.
Quellen
- nginx: ngx_http_log_module (kombiniertes Logformat)
- Apache HTTP Server 2.4: Logdateien
- OpenAI: Überblick über die OpenAI-Crawler
- Anthropic: Crawlt Anthropic Daten aus dem Web, und wie können Website-Betreiber den Crawler sperren?
- Perplexity: Perplexity-Crawler
- Google: Google-Crawler und -Fetcher verifizieren
- Google: Gängige Crawler, einschließlich Google-Extended
- Apple: Über Applebot
- Common Crawl: CCBot
- RFC 9309: Robots Exclusion Protocol
- Cloudflare: Ursprüngliche Besucher-IPs wiederherstellen
- Cloudflare: Perplexity nutzt getarnte, nicht deklarierte Crawler, um Crawling-Verbote von Websites zu umgehen
- Perplexity: Agenten oder Bots? KI im offenen Web verstehen