Teknisk GEO
Find AI-bots i dine serverlogs (og tjek, at de er ægte)
Din analytics kan ikke se AI-crawlere. Dine serverlogs kan. Her er kommandoer til at kopiere, de officielle IP-lister og en tjekliste til privatliv.
Opdateret og faktatjekket 19. oktober 2026
Hvorfor din analytics ikke viser AI-bots
Værktøjer som Google Analytics tæller besøg med et lille script, der kører i browseren. En crawler, der kun henter din HTML, kører aldrig scriptet og dukker derfor aldrig op.
Din webserver noterer hver forespørgsel, fra både mennesker og bots. Den registrering er din adgangslog.
Logs svarer på tre spørgsmål: hvilke bots kommer forbi, hvilke sider henter de, og får de siden eller en fejl.
Hvor du finder dine logs
- nginx: standardformatet “combined” har allerede alt, hvad du skal bruge. På Debian og Ubuntu ligger filen som regel i /var/log/nginx/access.log.
- Apache: brug også combined-formatet. “Common”-formatet har ingen user agent, så det kan ikke vise bots. Tilføj %{User-agent}i til dit LogFormat.
- Bag et CDN eller en proxy? Så viser det første felt måske din proxys IP ved hver forespørgsel. Opsæt først din servers real-IP-indstilling (eller log den videresendte klient-IP), ellers fejler alle IP-tjek nedenfor.
- Ingen adgang til rå logs? Kig i din udbyders kontrolpanel, eller sæt et CDN foran dit site. Mere om det nedenfor.
Læs én loglinje
Her er én linje i combined-formatet med en opdigtet IP-adresse. Hver del svarer på et spørgsmål.
203.0.113.7 - - [19/Oct/2026:08:01:02 +0000] "GET /pricing HTTP/1.1" 200 5123 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot"- IP-adresse: hvor forespørgslen kom fra. Den tjekker du mod de officielle lister.
- Tidspunkt: hvornår det skete.
- Forespørgsel: metoden og siden. Her GET /pricing.
- Statuskode: 200 betyder leveret, 301/302 omdirigeret, 403 blokeret, 404 ikke fundet, 5xx en serverfejl.
- Bytes: hvor meget der blev sendt tilbage.
- User agent: hvem den besøgende påstår at være. Her GPTBot. Alle kan skrive det, så alene beviser det intet.
De AI-bots, du skal kigge efter
Listen kommer fra hvert firmas egen dokumentation, tjekket den 19. oktober 2026.
| User agent | Firma | Hvad den gør | Følger robots.txt | IP-liste |
|---|---|---|---|---|
OAI-SearchBot | OpenAI | Søgeindeks | Ja | OAI-SearchBot JSON (åbner i en ny fane) |
GPTBot | OpenAI | Træning | Ja | GPTBot JSON (åbner i en ny fane) |
ChatGPT-User | OpenAI | Brugerforespørgsel | Delvist | ChatGPT-User JSON (åbner i en ny fane) |
Claude-SearchBot | Anthropic | Søgeindeks | Ja | Claude-SearchBot JSON (åbner i en ny fane) |
ClaudeBot | Anthropic | Træning | Ja | ClaudeBot JSON (åbner i en ny fane) |
Claude-User | Anthropic | Brugerforespørgsel | Ja | Claude-User JSON (åbner i en ny fane) |
PerplexityBot | Perplexity | Søgeindeks | Ja | PerplexityBot JSON (åbner i en ny fane) |
Perplexity-User | Perplexity | Brugerforespørgsel | Nej | Perplexity-User JSON (åbner i en ny fane) |
Googlebot | Søgemaskine | Ja | Googlebot JSON (åbner i en ny fane) | |
Google-Agent | Brugerforespørgsel | Nej | Google-Agent JSON (åbner i en ny fane)Google-Agent JSON (åbner i en ny fane)Google-Agent JSON (åbner i en ny fane) | |
bingbot | Microsoft | Søgemaskine | Ja | bingbot JSON (åbner i en ny fane) |
Applebot | Apple | Søgemaskine | Ja | Applebot JSON (åbner i en ny fane) |
meta-externalagent | Meta | Træning | Ja | Ikke offentliggjort |
meta-webindexer | Meta | Søgeindeks | Ja | Ikke offentliggjort |
meta-externalfetcher | Meta | Brugerforespørgsel | Delvist | Ikke offentliggjort |
Amazonbot | Amazon | Træning | Ja | Ikke offentliggjort |
Amzn-SearchBot | Amazon | Søgeindeks | Ja | Ikke offentliggjort |
Amzn-User | Amazon | Brugerforespørgsel | Delvist | Ikke offentliggjort |
DuckAssistBot | DuckDuckGo | Søgeindeks | Ja | DuckAssistBot JSON (åbner i en ny fane) |
MistralAI-User | Mistral AI | Brugerforespørgsel | Ja | Ikke offentliggjort |
MistralAI-Index | Mistral AI | Søgeindeks | Ikke oplyst | Ikke offentliggjort |
MistralAI-Training | Mistral AI | Træning | Ja | Ikke offentliggjort |
CCBot | Common Crawl | Træning | Ja | CCBot JSON (åbner i en ny fane) |
Google-Extended og Applebot-Extended er robots.txt-tokens, ikke crawlere. De dukker aldrig op i en log.
Anthropic offentliggør ikke fulde user agent-strenge. I logs ser de sådan ud: “compatible; Claude-User/1.0; +claudebot@anthropic.com”.
Kommandoer til at kopiere
De virker på en log i combined-format. Vi testede dem den 19. oktober 2026 med grep og awk på macOS. Erstat access.log med din egen fil.
grep -oE 'GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|meta-externalagent|Amazonbot|Applebot|DuckAssistBot|MistralAI-User|CCBot' access.log | sort | uniq -c | sort -rnawk -F'"' '{ split($3,a," "); if (match($6,/GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User/)) print substr($6,RSTART,RLENGTH), a[1] }' access.log | sort | uniq -cgrep 'OAI-SearchBot' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | headawk -F'"' '$6 ~ /GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User/ { split($3,a," "); if (a[1] >= 400) print a[1], $2 }' access.logzgrep -c 'GPTBot' /var/log/nginx/access.log.*.gzTjek hver bot-IP med Python
Scriptet henter de officielle IP-lister og skriver VERIFIED eller NOT IN LIST for hver botlinje. Det bruger kun Pythons standardbibliotek.
# Usage: python3 verify_bots.py access.log
import ipaddress, json, re, sys, urllib.request
LISTS = {
"GPTBot": "https://openai.com/gptbot.json",
"OAI-SearchBot": "https://openai.com/searchbot.json",
"ChatGPT-User": "https://openai.com/chatgpt-user.json",
"ClaudeBot": "https://claude.com/crawling/bots.json",
"Claude-User": "https://claude.com/crawling/bots.json",
"Claude-SearchBot": "https://claude.com/crawling/bots.json",
"PerplexityBot": "https://www.perplexity.com/perplexitybot.json",
"Perplexity-User": "https://www.perplexity.com/perplexity-user.json",
"Googlebot": "https://developers.google.com/static/crawling/ipranges/common-crawlers.json",
"bingbot": "https://www.bing.com/toolbox/bingbot.json",
}
cache = {}
def networks(url):
if url not in cache:
req = urllib.request.Request(url, headers={"User-Agent": "log-check/1.0"})
data = json.load(urllib.request.urlopen(req, timeout=20))
cache[url] = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix"))
for p in data["prefixes"]]
return cache[url]
bot = re.compile("|".join(sorted(map(re.escape, LISTS), key=len, reverse=True)))
for line in open(sys.argv[1], errors="replace"):
ua = line.split('"')[5] if line.count('"') >= 6 else line
match = bot.search(ua)
if not match:
continue
try:
ip = ipaddress.ip_address(line.split()[0])
except ValueError:
continue
ok = any(ip in net for net in networks(LISTS[match.group(0)]))
print("VERIFIED " if ok else "NOT IN LIST", match.group(0), ip)Er det virkelig GPTBot? Tjek IP’en
En user agent er bare tekst. Alle kan sende “GPTBot”. Perplexity anbefaler selv at kombinere user agent med IP-tjek.
Metode 1: de officielle IP-lister
OpenAI, Anthropic, Perplexity, Google, Microsoft (Bing), Apple, DuckDuckGo og Common Crawl offentliggør JSON-lister over de IP-intervaller, deres bots bruger. Står IP’en på listen, kom forespørgslen fra firmaets netværk. Linkene står i tabellen ovenfor.
Metode 2: omvendt DNS
Google: slå værtsnavnet for IP’en op. Det skal ende på googlebot.com, google.com eller googleusercontent.com, og et opslag på navnet skal give den samme IP tilbage. Bing virker på samme måde, med navne der ender på search.msn.com.
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 ← same IP: real GooglebotHvad tallene fortæller dig
- Træning, søgning og brugerforespørgsler er forskellige. GPTBot og ClaudeBot indsamler træningsdata. OAI-SearchBot, Claude-SearchBot og PerplexityBot bygger søgeindekser. ChatGPT-User, Claude-User og Perplexity-User henter en side, fordi en person spørger om den lige nu.
- Mange 403- eller 5xx-svar betyder, at du blokerer eller ødelægger AI-adgangen. Tjek din firewall, dit CDN’s botindstillinger og din robots.txt.
- Forespørgsler på robots.txt og llms.txt viser, hvilke bots der læser dine regler. OpenAI siger, at OAI-SearchBot og GPTBot kan tilføje en robots.txt-markør til deres user agent, når de henter filen.
- Brugerforespørgsler kan springe robots.txt over. Ifølge OpenAI gælder robots.txt-regler måske ikke for ChatGPT-User, og ifølge Perplexity ignorerer Perplexity-User dem som regel.
- Et besøg er ikke et citat. Det betyder, at en bot læste din side, ikke at et AI-svar vil citere den.
Ingen serveradgang? Brug dit CDN
Cloudflares AI Crawl Control (tidligere AI Audit) viser, hvilke AI-tjenester der crawler dit site, og hvilke crawlere der ignorerer dine regler. Ifølge Cloudflare er det med i alle abonnementer.
Cloudflare Logpush kan eksportere forespørgselslogs med felter som ClientIP, ClientRequestUserAgent, ClientRequestPath og EdgeResponseStatus. Vores analyzer læser også de JSON-linjer.
Logs og privatliv (GDPR)
IP-adresser kan være personoplysninger. EU-Domstolen fastslog det for dynamiske IP-adresser i Breyer-sagen (C-582/14, 19. oktober 2016), og betragtning 30 i GDPR nævner IP-adresser som onlineidentifikatorer.
Bot-IP’er tilhører firmaer, men den samme log rummer også dine besøgendes IP’er. En praktisk tilgang:
- Filtrér botlinjerne fra først, og arbejd med dem.
- Gem kun rå logs, så længe du har brug for dem, for eksempel til sikkerhed. GDPR fastsætter ikke et antal dage; den siger, at personoplysninger ikke må gemmes længere end nødvendigt.
- Gem totaler (bot, dag, side, status, verificeret eller ej) i stedet for IP’er.
- Forkort eller hash en IP, når du har tjekket den.
- Upload ikke rå logs til et eksternt værktøj uden en databehandleraftale. Vores analyzer kører i din browser, så intet bliver uploadet.
Dette er generel information, ikke juridisk rådgivning.
Ofte stillede spørgsmål
Hvordan ser jeg, om ChatGPT besøger mit site?
Søg i din adgangslog efter OAI-SearchBot (ChatGPT-søgning), ChatGPT-User (en brugers forespørgsel) og GPTBot (træning). Tjek derefter IP’erne mod OpenAIs lister.
Hvorfor viser Google Analytics ikke GPTBot?
Google Analytics tæller besøg via et script i browseren. Crawlere, der kun henter din HTML, kører det ikke.
Hvordan ved jeg, om en GPTBot-forespørgsel er ægte?
Tjek dens IP mod openai.com/gptbot.json. Står den ikke på listen, så behandl forespørgslen som ikke verificeret.
Hvilke bots ignorerer robots.txt?
Ifølge deres egen dokumentation: bots, der henter en side, fordi en bruger bad om det. OpenAI siger, at robots.txt måske ikke gælder for ChatGPT-User, Perplexity siger, at Perplexity-User som regel ignorerer den, og Google siger det samme om sine brugerudløste fetchere.
Hvad betyder 403-fejl for AI-bots?
Din server, firewall eller dit CDN afviste forespørgslen. Vil du findes i AI-søgning, så find reglen, der blokerer botten, og ret den.
Må jeg logge IP-adresser?
Som regel ja, til et klart formål som sikkerhed, men IP’er kan være personoplysninger. Gem logs kort tid, gem totaler i stedet for IP’er, og nævn logningen i din privatlivspolitik. Dette er ikke juridisk rådgivning.
Lær mere
Sørg for, at bots finder noget værd at læse
Crawlet er ikke citeret. Se, hvordan AI-værktøjer læser din side, på 22 punkter.
Analysér min side