Sådan finder du AI-crawlere i dine serverlogs

Udgivet

Kort svar

Søg i user agent-feltet i din adgangslog efter tokens som GPTBot, OAI-SearchBot, ClaudeBot, Claude-SearchBot og PerplexityBot, og se derefter på de statuskoder, de fik. En user agent alene beviser intet, så tjek hver kilde-IP mod udbyderens offentliggjorte IP-liste, eller med reverse og forward DNS for Google og Apple.

robots.txt siger, hvad du beder crawlere om at gøre. Din adgangslog viser, hvad der faktisk skete: hvilke AI-crawlere der kom, hvilke sider de hentede, og hvad din server svarede. Det er det mest direkte bevis, du har, og det kræver kun logfilerne og en terminal. Eksemplerne herunder bruger det kombinerede logformat, som nginx og Apache bruger som standard.

På denne side
  1. Hvordan ser et besøg fra en AI-crawler ud i en adgangslog?
  2. Hvordan tæller jeg besøg fra AI-crawlere?
  3. Hvad fik hver crawler faktisk?
  4. Hvordan verificerer jeg, at et besøg virkelig kom fra OpenAI, Anthropic eller Perplexity?
  5. Hvordan verificerer jeg Googlebot, Applebot og CCBot?
  6. Hvordan ser falske AI-crawlere ud?
  7. Hvad kan logs ikke fortælle dig?

Hvordan ser et besøg fra en AI-crawler ud i en adgangslog?

I det kombinerede format indeholder hver linje klientens IP, tidspunktet, anmodningslinjen, statuskoden, svarets størrelse, referreren og user agent'en. nginx definerer det som $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent", og Apaches combined-format har de samme felter. Et besøg fra OpenAI's træningscrawler ser sådan ud:

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"

De tokens, du skal lede efter, er dem, udbyderne dokumenterer: GPTBot, OAI-SearchBot og ChatGPT-User (OpenAI); ClaudeBot, Claude-SearchBot og Claude-User (Anthropic); PerplexityBot og Perplexity-User (Perplexity); Googlebot, Applebot, meta-externalagent, meta-webindexer og CCBot. Du vil aldrig se Google-Extended eller Applebot-Extended. Google siger, at Google-Extended ikke har nogen separat user agent-streng, og Apple siger, at Applebot-Extended ikke crawler; begge er kun robots.txt-tokens.

Hvordan tæller jeg besøg fra AI-crawlere?

Opdeles hver linje ved anførselstegnet, står user agent'en i felt 6. Matcher du kun det felt, undgår du falske træffere fra URL'er, der tilfældigvis indeholder en bots navn. Dette tæller besøg pr. crawler i den aktuelle log og i roterede, komprimerede 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

Tilpas stien til Apache, ofte /var/log/apache2/access.log* eller /var/log/httpd/access_log*. zcat -f læser både almindelige og gzip-komprimerede filer. Mangler en crawler, du forventede, er det ikke i sig selv bevis på en blokering: Den har måske bare ikke besøgt dig i den periode, dine logs dækker.

Hvad fik hver crawler faktisk?

Besøg betyder mindre end svar. En crawler, der får en 403 på hver anmodning, har besøgt dig, men intet læst. Disse kommandoer viser statuskoder, de mest hentede stier, og om crawleren hentede robots.txt:

# 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

Mest 200-svar er det, du vil se. Mange 403- eller 429-svar peger på en firewallregel eller en rate limit. 5xx-svar på robots.txt er alvorlige: Efter RFC 9309 skal en crawler, der får en serverfejl for robots.txt, antage, at hele sitet er forbudt.

Hvis dit site ligger bag et CDN, ændrer to ting sig. Anmodninger, som CDN'et blokerer, når aldrig frem til din origin, så de optræder slet ikke i dens logs; tjek i stedet CDN'ets egne sikkerhedshændelser. Og medmindre du gendanner besøgendes IP, logger origin'en CDN'ets adresse. Cloudflare sender for eksempel den oprindelige IP i headeren CF-Connecting-IP og logger som standard en Cloudflare-IP.

Hvordan verificerer jeg, at et besøg virkelig kom fra OpenAI, Anthropic eller Perplexity?

Disse udbydere offentliggør de IP-intervaller, deres agenter bruger: OpenAI på openai.com/gptbot.json, openai.com/searchbot.json og openai.com/chatgpt-user.json; Anthropic på claude.com/crawling/bots.json; Perplexity på perplexity.ai/perplexitybot.json og perplexity.ai/perplexity-user.json. Anthropic siger, at en kilde-IP på udbyderens liste viser, at crawleren kommer fra Anthropic. Ingen af de tre dokumenter beskriver verificering med reverse DNS, så brug listerne.

Filerne har samme opbygning, en prefixes-liste med ipv4Prefix- eller ipv6Prefix-poster, så ét lille script kan tjekke en IP mod hvilken som helst af dem:

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

For at se de IP'er, der har udgivet sig for en bestemt crawler, kør awk -F'"' '$6 ~ /GPTBot/ {split($1, a, " "); print a[1]}' over loggen og send resultatet gennem sort | uniq -c | sort -rn. Tjek hver af dem mod den tilsvarende liste. Listerne ændrer sig, så hent dem friske i stedet for at gemme en gammel kopi.

Hvordan verificerer jeg Googlebot, Applebot og CCBot?

Google, Apple og Common Crawl dokumenterer et tjek med reverse og forward DNS. Slå IP'ens værtsnavn op, tjek dets domæne, slå derefter værtsnavnet op, og bekræft, at det peger tilbage på den samme IP:

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

For Google skal værtsnavnet slutte på googlebot.com, google.com eller googleusercontent.com, afhængigt af crawleren; Google offentliggør også sine intervaller, med Googlebot i common-crawlers.json. For Apple skal det ligge under applebot.apple.com, med intervaller i applebot.json. For Common Crawl skal det ligge under crawl.commoncrawl.org, og Common Crawl advarer om, at andre crawlere uretmæssigt udgiver sig for at være CCBot.

Hvordan ser falske AI-crawlere ud?

Scrapere låner ofte en kendt crawlers user agent for at komme forbi filtre. Typiske tegn:

Det omvendte problem findes også: En crawler, der bruger en almindelig browser-user agent, kan slet ikke identificeres ud fra logposten. I 2025 sagde Cloudflare, at de havde observeret Perplexity crawle med uanmeldte, browserlignende user agents fra IP'er uden for de offentliggjorte intervaller; Perplexity bestred den fremstilling og tilskrev en del af trafikken en tredjepartstjeneste. Logs alene kan ikke afgøre den slags sager, og derfor er verificering ud fra offentliggjorte IP-intervaller vigtig i begge retninger.

Hvad kan logs ikke fortælle dig?

Logs viser, hvad der nåede din server. De viser ikke, hvad dit CDN blokerede før origin, om en side, der gav 200, indeholdt teksten eller kun en script-skal, eller om en crawler ville blive lukket ind, hvis den kom i dag. De dækker også kun den periode, du gemmer, og stille sites ser måske sjældent AI-crawlere.

I en AISeeWhy-konto kan du uploade en adgangslog i kombineret format (almindelig eller .gz, op til 50 MB); den analyseres og kasseres, og hver AI-crawlers anmodninger tælles med deres statuskoder og tjekkes mod de IP-intervaller, udbyderne offentliggør.

Ofte stillede spørgsmål

Hvorfor kan jeg ikke se Google-Extended i mine logs?

Google siger, at Google-Extended ikke har nogen separat user agent-streng. Crawlingen udføres af Googles eksisterende crawlere, og tokenet styrer kun, hvordan indholdet må bruges. Det samme gælder Applebot-Extended, som Apple siger ikke crawler.

Kan jeg stole på user agent'en i mine logs?

Nej. Enhver kan sende en vilkårlig user agent. Betragt den som en påstand, og bekræft den med udbyderens offentliggjorte IP-intervaller eller, for Google, Apple og Common Crawl, et reverse og forward DNS-opslag.

Mine logs viser ingen besøg fra AI-crawlere. Er jeg blokeret?

Ikke nødvendigvis. Crawleren har måske ikke besøgt dig endnu, dit CDN kan have blokeret den før origin, eller dine logs registrerer måske kun CDN'ets IP-adresser. Tjek dit CDN's sikkerhedshændelser, og test siden med hver crawlers user agent.

Er trafik fra ChatGPT-User en crawler?

OpenAI siger, at ChatGPT-User bruges til bestemte brugerhandlinger og ikke til at crawle nettet automatisk. Dens besøg følger som regel efter, at en person har spurgt ChatGPT om en side, så de kommer i små mængder.

Kilder

Flere artikler