Technische GEO
Vind AI-bots in je serverlogs (en check of ze echt zijn)
Je analytics ziet AI-crawlers niet. Je serverlogs wel. Hier vind je commando's om te kopiëren, de officiële IP-lijsten en een privacychecklist.
Bijgewerkt en gecontroleerd op 19 oktober 2026
Waarom je analytics geen AI-bots laat zien
Tools als Google Analytics tellen bezoeken met een klein script dat in de browser draait. Een crawler die alleen je HTML downloadt, voert dat script nooit uit en verschijnt dus nooit.
Je webserver noteert elk verzoek, van mensen en bots. Dat overzicht is je accesslog.
Logs beantwoorden drie vragen: welke bots komen langs, welke pagina's halen ze op, en krijgen ze de pagina of een foutmelding.
Waar je je logs vindt
- nginx: het standaardformaat “combined” bevat alles wat je nodig hebt. Op Debian en Ubuntu staat het bestand meestal in /var/log/nginx/access.log.
- Apache: gebruik ook het combined-formaat. Het “common”-formaat heeft geen user agent, dus daarmee zie je geen bots. Voeg %{User-agent}i toe aan je LogFormat.
- Zit je achter een CDN of proxy? Dan toont het eerste veld misschien bij elk verzoek het IP van je proxy. Stel eerst de real-IP-instelling van je server in (of log het doorgestuurde IP van de bezoeker), anders mislukt elke IP-check hieronder.
- Geen toegang tot ruwe logs? Kijk in het dashboard van je hoster, of zet een CDN voor je site. Daarover verderop meer.
Lees één logregel
Hier is één regel in het combined-formaat, met een verzonnen IP-adres. Elk deel beantwoordt een vraag.
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-adres: waar het verzoek vandaan kwam. Dit check je straks tegen de officiële lijsten.
- Tijd: wanneer het gebeurde.
- Verzoek: de methode en de pagina. Hier GET /pricing.
- Statuscode: 200 betekent geleverd, 301/302 doorgestuurd, 403 geblokkeerd, 404 niet gevonden, 5xx een serverfout.
- Bytes: hoeveel er is teruggestuurd.
- User agent: wie de bezoeker zegt te zijn. Hier GPTBot. Iedereen kan dit intypen, dus op zich bewijst het niets.
De AI-bots om naar te zoeken
Deze lijst komt uit de eigen documentatie van elk bedrijf, gecontroleerd op 19 oktober 2026.
| User agent | Bedrijf | Wat hij doet | Volgt robots.txt | IP-lijst |
|---|---|---|---|---|
OAI-SearchBot | OpenAI | Zoekindex | Ja | OAI-SearchBot JSON (opent in een nieuw tabblad) |
GPTBot | OpenAI | Training | Ja | GPTBot JSON (opent in een nieuw tabblad) |
ChatGPT-User | OpenAI | Verzoek van gebruiker | Deels | ChatGPT-User JSON (opent in een nieuw tabblad) |
Claude-SearchBot | Anthropic | Zoekindex | Ja | Claude-SearchBot JSON (opent in een nieuw tabblad) |
ClaudeBot | Anthropic | Training | Ja | ClaudeBot JSON (opent in een nieuw tabblad) |
Claude-User | Anthropic | Verzoek van gebruiker | Ja | Claude-User JSON (opent in een nieuw tabblad) |
PerplexityBot | Perplexity | Zoekindex | Ja | PerplexityBot JSON (opent in een nieuw tabblad) |
Perplexity-User | Perplexity | Verzoek van gebruiker | Nee | Perplexity-User JSON (opent in een nieuw tabblad) |
Googlebot | Zoekmachine | Ja | Googlebot JSON (opent in een nieuw tabblad) | |
Google-Agent | Verzoek van gebruiker | Nee | Google-Agent JSON (opent in een nieuw tabblad)Google-Agent JSON (opent in een nieuw tabblad)Google-Agent JSON (opent in een nieuw tabblad) | |
bingbot | Microsoft | Zoekmachine | Ja | bingbot JSON (opent in een nieuw tabblad) |
Applebot | Apple | Zoekmachine | Ja | Applebot JSON (opent in een nieuw tabblad) |
meta-externalagent | Meta | Training | Ja | Niet gepubliceerd |
meta-webindexer | Meta | Zoekindex | Ja | Niet gepubliceerd |
meta-externalfetcher | Meta | Verzoek van gebruiker | Deels | Niet gepubliceerd |
Amazonbot | Amazon | Training | Ja | Niet gepubliceerd |
Amzn-SearchBot | Amazon | Zoekindex | Ja | Niet gepubliceerd |
Amzn-User | Amazon | Verzoek van gebruiker | Deels | Niet gepubliceerd |
DuckAssistBot | DuckDuckGo | Zoekindex | Ja | DuckAssistBot JSON (opent in een nieuw tabblad) |
MistralAI-User | Mistral AI | Verzoek van gebruiker | Ja | Niet gepubliceerd |
MistralAI-Index | Mistral AI | Zoekindex | Niet vermeld | Niet gepubliceerd |
MistralAI-Training | Mistral AI | Training | Ja | Niet gepubliceerd |
CCBot | Common Crawl | Training | Ja | CCBot JSON (opent in een nieuw tabblad) |
Google-Extended en Applebot-Extended zijn robots.txt-tokens, geen crawlers. Ze verschijnen nooit in een log.
Anthropic publiceert geen volledige user-agentstrings. In logs zien ze eruit als “compatible; Claude-User/1.0; +claudebot@anthropic.com”.
Commando's om te kopiëren
Deze werken op een log in het combined-formaat. We testten ze op 19 oktober 2026 met grep en awk op macOS. Vervang access.log door je eigen bestand.
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.*.gzCheck elk bot-IP met Python
Dit script downloadt de officiële IP-lijsten en print per botregel VERIFIED of NOT IN LIST. Het gebruikt alleen de standaardbibliotheek van Python.
# 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)Is het echt GPTBot? Check het IP
Een user agent is gewoon tekst. Iedereen kan “GPTBot” meesturen. Perplexity raadt zelf aan om user agent en IP-controle te combineren.
Manier 1: de officiële IP-lijsten
OpenAI, Anthropic, Perplexity, Google, Microsoft (Bing), Apple, DuckDuckGo en Common Crawl publiceren JSON-lijsten met de IP-reeksen van hun bots. Staat het IP in de lijst, dan kwam het verzoek van het netwerk van dat bedrijf. De links staan in de tabel hierboven.
Manier 2: reverse DNS
Google: zoek de hostnaam bij het IP op. Die moet eindigen op googlebot.com, google.com of googleusercontent.com, en als je die naam opzoekt, moet je hetzelfde IP terugkrijgen. Bij Bing werkt het net zo, met namen die eindigen op 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 GooglebotWat de cijfers je vertellen
- Training, zoeken en verzoeken van gebruikers zijn verschillend. GPTBot en ClaudeBot verzamelen trainingsdata. OAI-SearchBot, Claude-SearchBot en PerplexityBot bouwen zoekindexen. ChatGPT-User, Claude-User en Perplexity-User halen een pagina op omdat iemand er nu naar vraagt.
- Veel 403- of 5xx-antwoorden betekenen dat je AI-toegang blokkeert of breekt. Check je firewall, de botinstellingen van je CDN en je robots.txt.
- Verzoeken naar robots.txt en llms.txt laten zien welke bots je regels lezen. OpenAI zegt dat OAI-SearchBot en GPTBot een robots.txt-markering aan hun user agent kunnen toevoegen als ze dat bestand ophalen.
- Verzoeken van gebruikers kunnen robots.txt overslaan. Volgens OpenAI gelden robots.txt-regels mogelijk niet voor ChatGPT-User, en volgens Perplexity negeert Perplexity-User ze meestal.
- Een bezoek is geen citaat. Het betekent dat een bot je pagina las, niet dat een AI-antwoord hem zal citeren.
Geen servertoegang? Gebruik je CDN
AI Crawl Control van Cloudflare (voorheen AI Audit) laat zien welke AI-diensten je site crawlen en welke crawlers je regels negeren. Volgens Cloudflare zit het in alle abonnementen.
Cloudflare Logpush kan verzoeklogs exporteren met velden als ClientIP, ClientRequestUserAgent, ClientRequestPath en EdgeResponseStatus. Onze analyzer leest die JSON-regels ook.
Logs en privacy (AVG)
IP-adressen kunnen persoonsgegevens zijn. Het Hof van Justitie van de EU zei dat over dynamische IP-adressen in de zaak-Breyer (C-582/14, 19 oktober 2016), en overweging 30 van de AVG noemt IP-adressen als online identificatoren.
Bot-IP's horen bij bedrijven, maar in hetzelfde log staan ook de IP's van je bezoekers. Een praktische aanpak:
- Filter eerst de botregels eruit, en werk daarmee.
- Bewaar ruwe logs alleen zo lang als nodig, bijvoorbeeld voor beveiliging. De AVG noemt geen vast aantal dagen; persoonsgegevens mag je niet langer bewaren dan nodig.
- Bewaar totalen (bot, dag, pagina, status, wel of niet geverifieerd) in plaats van IP's.
- Kort een IP in of hash het zodra je het hebt gecheckt.
- Upload ruwe logs niet naar een externe tool zonder verwerkersovereenkomst. Onze analyzer draait in je browser, dus er wordt niets geüpload.
Dit is algemene informatie, geen juridisch advies.
Veelgestelde vragen
Hoe zie ik of ChatGPT mijn site bezoekt?
Zoek in je accesslog naar OAI-SearchBot (ChatGPT search), ChatGPT-User (verzoek van een gebruiker) en GPTBot (training). Check daarna de IP's tegen de lijsten van OpenAI.
Waarom toont Google Analytics GPTBot niet?
Google Analytics telt bezoeken via een script in de browser. Crawlers die alleen je HTML downloaden, voeren dat niet uit.
Hoe weet ik of een GPTBot-verzoek echt is?
Check het IP tegen openai.com/gptbot.json. Staat het er niet in, behandel het verzoek dan als niet geverifieerd.
Welke bots negeren robots.txt?
Volgens hun eigen documentatie: bots die een pagina ophalen omdat een gebruiker erom vroeg. OpenAI zegt dat robots.txt mogelijk niet geldt voor ChatGPT-User, Perplexity zegt dat Perplexity-User het meestal negeert, en Google zegt hetzelfde over zijn door gebruikers gestarte fetchers.
Wat betekenen 403-fouten voor AI-bots?
Je server, firewall of CDN weigerde het verzoek. Wil je gevonden worden in AI-zoekmachines, zoek dan de regel die de bot blokkeert en pas hem aan.
Mag ik IP-adressen loggen?
Meestal wel, voor een duidelijk doel zoals beveiliging, maar IP's kunnen persoonsgegevens zijn. Bewaar logs kort, sla totalen op in plaats van IP's, en vermeld het loggen in je privacyverklaring. Dit is geen juridisch advies.
Verder leren
Zorg dat bots iets lezenswaardigs vinden
Gecrawld is niet geciteerd. Zie hoe AI-tools je pagina lezen, op 22 punten.
Analyseer mijn pagina