AI-crawlers: gemeten bezoeken van GPTBot en ClaudeBot en blokkeren met robots.txt en nginx

Een AI-crawler is een bot waarmee AI-bedrijven webpagina's verzamelen voor modeltraining, AI-zoekfuncties en het beantwoorden van vragen van gebruikers. Om te zien hoe vaak deze bots een server met Nginx + Apache bezoeken, hebben we de UA's in 14 dagen toegangslogs van de originserver vergeleken met de IP-bereiken die elk bedrijf publiceert: verzoeken uit de officiële bereiken kwamen in totaal op 18.605, en we hebben de instellingen om ze in robots.txt en nginx te blokkeren of toe te laten volgens de officiële documentatie op een rij gezet.
De periode is 4 t/m 17 oktober 2026; verzoeken die de voorliggende cache beantwoordde en die de originserver nooit bereikten, en verzoeken waarvan het echte IP niet werd gelogd, zitten niet in de cijfers.
1️⃣ AI-crawlers herkennen: UA's in de toegangslog en gepubliceerde IP-bereiken
Niet elk verzoek dat als GPTBot is gelogd, komt van OpenAI. De UA is tekst die de aanvrager zelf schrijft en meestuurt, dus iedereen kan verzoeken doen onder de naam GPTBot of ClaudeBot.
Daarom tellen we eerst de verzoeken per botnaam op basis van de UA en vergelijken we ze daarna met de IP-bereiken die elk bedrijf publiceert. Hieronder staan de namen van AI-bots die in één dag logs zijn geteld.
grep -oiE '(GPTBot|OAI-SearchBot|ChatGPT-User|ClaudeBot|Claude-User|Claude-SearchBot|PerplexityBot|Perplexity-User|Bytespider|CCBot|Amazonbot|meta-externalagent)/' access.log-20261018 | sort | uniq -c | sort -rn 2968 GPTBot/
2084 ClaudeBot/
622 meta-externalagent/
535 Amazonbot/
167 PerplexityBot/
99 OAI-SearchBot/
30 ChatGPT-User/
21 Claude-User/
17 Claude-SearchBot/
12 Meta-ExternalAgent/
10 Perplexity-User/
7 CCBot/Tellen met [/] achter de naam laat tekst weg die geen naam is, zoals het contactadres claudebot@ in de UA van Claude-SearchBot, en namen die met andere hoofdletters zijn gelogd, worden apart geteld. Daarna controleren we in de eerste kolom van welke IP's de GPTBot-verzoeken kwamen.
grep 'GPTBot/' access.log-20261018 | awk '{print $1}' | sort | uniq -c | sort -rn | head -5 2524 74.7.x.x
428 185.152.x.x
12 34.53.x.x
1 74.7.x.x
1 172.182.x.xBij verzoeken die via een CDN of proxy liepen, staat in de eerste kolom het adres van de tussenliggende server, dus vergelijk die regels met het adres in de kolom X-Forwarded-For aan het eind van de logregel. OpenAI publiceert de IP-bereiken van GPTBot als JSON-bestand.
curl -s https://openai.com/gptbot.json -o gptbot.jsonOf een IP in het gedownloade bereikbestand staat, kun je controleren met ipaddress, een standaardmodule van Python.
# inrange.py — controleren of een IP in een JSON-bereikbestand staat
import json, sys, ipaddress
nets = [ipaddress.ip_network(p.get('ipv4Prefix') or p.get('ipv6Prefix')) for p in json.load(open(sys.argv[1]))['prefixes']]
for a in sys.argv[2:]:
ip = ipaddress.ip_address(a)
print(a, 'IN' if any(ip in n for n in nets) else 'OUT')Zet de te controleren IP's achter de naam van het bereikbestand.
python3 inrange.py gptbot.json 74.7.x.x 34.53.x.x74.7.x.x IN
34.53.x.x OUTHet IP dat 2.524 verzoeken stuurde, lag binnen de gepubliceerde bereiken, het IP dat er 12 stuurde erbuiten. Anthropic, Perplexity, Apple, Common Crawl, Google en Bing publiceren bereikbestanden in hetzelfde formaat, en voor Amazonbot hebben we gecontroleerd of de reverse DNS eindigt op crawl.amazonbot.amazon. Het is net als de paspoortcontrole op een luchthaven, waar het paspoort wordt gecontroleerd en niet de naam op de instapkaart.
Toen we 14 dagen op deze manier vergeleken, bleken 70 IP's om beurten 23 botnamen te gebruiken, waaronder GPTBot, ClaudeBot en Googlebot, om 48.041 verzoeken te sturen, waarvan 57% naar URL's die naar kwetsbaarheden zochten, zoals .php of .env. Alle 809 verzoeken met de naam Google-Extended kwamen ook uit deze groep; volgens de documentatie van Google is Google-Extended een token alleen voor robots.txt, zonder UA die in HTTP-verzoeken wordt gebruikt.
2️⃣ Bezoeken per UA: 14 dagen metingen en wekelijkse trends
De tabel hieronder toont de verzoeken in de 14 dagen van 4 t/m 17 oktober. Voor bots met gepubliceerde bereiken telden we alleen verzoeken van binnen die bereiken; bots die we niet met bereiken vergeleken, telden we op UA, zonder de groep imitators.
| Bot | Bedrijf | Verzoeken (14 dagen) | Hoe gecontroleerd | Groep imitators |
|---|---|---|---|---|
| ClaudeBot | Anthropic | 10,305 | Gepubliceerde IP-bereiken | 2,387 |
| PerplexityBot | Perplexity | 3,406 | Gepubliceerde IP-bereiken | 2,262 |
| GPTBot | OpenAI | 2,546 | Gepubliceerde IP-bereiken | 2,328 |
| OAI-SearchBot | OpenAI | 1,399 | Gepubliceerde IP-bereiken | 2,347 |
| ChatGPT-User | OpenAI | 334 | Gepubliceerde IP-bereiken | 2,409 |
| Applebot | Apple | 330 | Gepubliceerde IP-bereiken | 2,372 |
| CCBot | Common Crawl | 275 | Gepubliceerde IP-bereiken | 2,275 |
| Claude-User | Anthropic | 10 | Gepubliceerde IP-bereiken | 2,192 |
| Claude-SearchBot | Anthropic | 0 | Gepubliceerde IP-bereiken | 2,297 |
| Perplexity-User | Perplexity | 0 | Gepubliceerde IP-bereiken | 2,235 |
| Meta-ExternalAgent | Meta | 14,384 | UA | 2,339 |
| Bytespider | ByteDance | 6,569 | UA | 2,336 |
| Amazonbot | Amazon | 3,493 | UA · reverse DNS | 2,379 |
| Googlebot (ter vergelijking) | 10,545 | Gepubliceerde IP-bereiken | 3,951 | |
| bingbot (ter vergelijking) | Microsoft | 13,477 | Gepubliceerde IP-bereiken | 1,551 |
Van de AI-crawlers die vanuit gepubliceerde bereiken zijn gecontroleerd, had ClaudeBot de meeste verzoeken met 10.305, gevolgd door PerplexityBot met 3.406 en GPTBot met 2.546. Claude-SearchBot en Perplexity-User hadden nul verzoeken uit gepubliceerde bereiken; elk verzoek onder die namen kwam uit de groep imitators.
Ook na het wegfilteren van imitators blijven bots die niet met bereiken zijn vergeleken een probleem. Meta-ExternalAgent had op UA de meeste verzoeken, 14.384, maar de documentatie over Meta-crawlers die we bekeken bevat geen lijst met IP-bereiken, dus hebben we die alleen op UA geteld.
Per week schommelde GPTBot tussen 12 en 3.383 verzoeken, terwijl ClaudeBot alle vijf weken tussen 6.930 en 10.217 bleef.
3️⃣ Welke URL's ze ophalen: soorten URL's en responscodes
AI-crawlers halen niet alleen artikeltekst op. In de 14 dagen ging 21% van de verzoeken van Meta-ExternalAgent naar afbeeldingen, terwijl GPTBot uit gepubliceerde bereiken de RSS-feed 476 keer opvroeg en ClaudeBot de sitemap 314 keer.
Ze verzamelen ook de URL's van andere taalversies: uit gepubliceerde bereiken waren 1.111 verzoeken van ClaudeBot en 436 van GPTBot voor berichten in andere talen. Responscodes kun je direct uit één dag logs tellen.
grep 'ClaudeBot/' access.log-20261018 | awk '{print $9}' | sort | uniq -c | sort -rn | head -4 1357 200
665 301
31 304
21 404Zelfs op één dag is bijna een derde een 301, en in de 14 dagen waren 5.915 (57%) van de 10.305 verzoeken van ClaudeBot uit gepubliceerde bereiken een 301. Daarvan waren er 4.736 verzoeken zonder afsluitende [/], waarop WordPress met een 301 naar de URL met [/] antwoordde, waarna hetzelfde bericht nog eens werd opgevraagd.
4️⃣ Instellingen in robots.txt: tokens voor training en voor zoeken
robots.txt past bij trainings- en zoekbots die automatisch verzamelen, maar niet bij bots die een pagina ophalen als een gebruiker een vraag stelt. De documentatie van OpenAI en Perplexity vermeldt dat de regels van robots.txt mogelijk niet gelden voor verzoeken van ChatGPT-User en Perplexity-User.
Elk bedrijf verdeelt zijn tokens per doel, en volgens de documentatie van OpenAI heeft het blokkeren van één token geen invloed op de instellingen van de andere. Hieronder staan de tokens die in de officiële documentatie van elk bedrijf zijn bevestigd.
| robots.txt-token | Bedrijf | Doel | Bij blokkeren (officiële documentatie) |
|---|---|---|---|
| GPTBot | OpenAI | Verzamelen van trainingsdata | Signaal om niet voor training te gebruiken |
| OAI-SearchBot | OpenAI | ChatGPT-zoeken | Uitgesloten van antwoorden in ChatGPT-zoeken (kan nog als navigatielink verschijnen) |
| ChatGPT-User | OpenAI | Verzoek van gebruiker | Regels van robots.txt gelden mogelijk niet |
| ClaudeBot | Anthropic | Verzamelen van trainingsdata | Later materiaal uitgesloten van trainingsdata |
| Claude-SearchBot | Anthropic | Zoekkwaliteit verbeteren | Zichtbaarheid in zoekresultaten kan afnemen |
| Claude-User | Anthropic | Verzoek van gebruiker | Haalt geen pagina's op voor vragen van gebruikers |
| PerplexityBot | Perplexity | Zoeken (geen training) | Uitgesloten van zoekresultaten |
| Perplexity-User | Perplexity | Verzoek van gebruiker | Volgt robots.txt doorgaans niet |
| Google-Extended | Gemini-training · grounding | Geen effect op zichtbaarheid of ranking in Google Zoeken | |
| Applebot-Extended | Apple | Training van basismodellen | Geen effect op zichtbaarheid in zoeken van Apple |
| meta-externalagent | Meta | Training van AI-modellen e.d. | Geblokkeerd met Disallow (voorbeeld in documentatie) |
Google-Extended en Applebot-Extended zijn geen aparte crawlbots maar tokens die alleen in robots.txt worden gebruikt. Het crawlen doen de bestaande crawlers van Google en Apple, en deze tokens bepalen alleen of de verzamelde inhoud mag worden gebruikt om AI-modellen te trainen.
Een robots.txt die alleen het verzamelen voor training weigert en de zichtbaarheid in AI-zoeken behoudt, ziet er zo uit; volgens de documentatie van OpenAI, Perplexity en Meta kan het tot 24 uur duren voordat wijzigingen effect hebben.
# verzamelen voor training weigeren
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: Applebot-Extended
Disallow: /
User-agent: meta-externalagent
Disallow: /
# AI-zoekbots toelaten
User-agent: OAI-SearchBot
Allow: /
User-agent: Claude-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /De huidige robots.txt op de Nginx + Apache-server heeft geen regels die AI-bots noemen.
curl -s https://example.com/robots.txt# geldt voor alle zoekmachinebots
User-agent: *
# beheerpagina's blokkeren (beveiliging)
Disallow: /wp-admin/
# ajax-aanroepen binnen de beheerfuncties toelaten (nodig voor normale werking)
Allow: /wp-admin/admin-ajax.php
# toegevoegd: spamzoekresultaten blokkeren (SEO-bescherming)
Disallow: /search/
Disallow: /?s=
# verwijzing naar de sitemap (snellere indexering)
Sitemap: https://example.com/sitemap_index.xmlZonder regels voor AI-bots kregen de 2.546 GPTBot-verzoeken uit gepubliceerde bereiken in de 14 dagen geen 403: 2.090 werden met 200 beantwoord en 432 met 301. In dezelfde periode waren de robots.txt-verzoeken uit gepubliceerde bereiken in de originlogs 36 van Googlebot, 8 van ClaudeBot en 6 van OAI-SearchBot, en geen van GPTBot of PerplexityBot. robots.txt-verzoeken die de voorliggende cache beantwoordt, verschijnen ook niet in de originlogs.
5️⃣ AI-crawlers blokkeren in nginx en de grenzen daarvan
Ook als je ze in robots.txt blokkeert, komen verzoeken die de regels niet lezen gewoon tot op de server. In nginx zet [map] een variabele op 1 als de UA een botnaam bevat.
# binnen het http-blok — 1 als de naam van een trainingsbot in de UA staat
map $http_user_agent $ai_train_bot {
default 0;
~*GPTBot/ 1;
~*ClaudeBot/ 1;
~*Bytespider 1;
~*CCBot/ 1;
}Geef in het server-blok 403 terug als die variabele 1 is.
# binnen het server-blok
location / {
if ($fake_searchbot) {
return 403;
}
if ($ai_train_bot) {
return 403;
}
# bestaande instellingen hieronder
}Blokkeren op UA controleert alleen de naam, dus vervalste verzoeken worden samen met de echte bot geblokkeerd als ze dezelfde naam gebruiken, en komen erdoor zodra ze die veranderen. Verzoeken die de naam lenen van een zoekbot die je toelaat, kun je alleen wegfilteren door ze met gepubliceerde IP-bereiken te vergelijken.
Om OAI-SearchBot toe te laten en alleen verzoeken met dezelfde naam van buiten zijn bereiken af te wijzen, maak je met [geo] een variabele van de gepubliceerde bereiken en vergelijk je die samen met de UA.
# binnen het http-blok — gepubliceerde bereiken van OAI-SearchBot (zet heel searchbot.json erin; hier maar twee regels)
geo $oai_search_net {
default 0;
104.210.140.128/28 1;
135.234.64.0/24 1;
}
map $http_user_agent:$oai_search_net $fake_searchbot {
default 0;
~*OAI-SearchBot/.*:0$ 1;
}Staat er een CDN of proxy voor, dan is het adres dat [geo] ziet dat van de tussenliggende server, dus herstel eerst het echte IP met real_ip voordat je vergelijkt. De documentatie van Anthropic vermeldt dat blokkeren op IP-adres de bot ook verhindert robots.txt te lezen, waardoor het weigeringssignaal mogelijk niet goed overkomt.
We hebben deze configuratie niet op de live server gezet; we hebben alleen de syntaxis gecontroleerd met een testconfiguratiebestand.
nginx -t -p ./ -c nginx-test/nginx.confnginx: the configuration file ./nginx-test/nginx.conf syntax is ok
nginx: configuration file ./nginx-test/nginx.conf test is successfulOmdat alleen de syntaxis van het voorbeeld is gecontroleerd, hebben we de 403-antwoorden niet geverifieerd; in de 14 dagen logs kwamen 2.347 van de 3.937 verzoeken met de naam OAI-SearchBot uit de groep imitators buiten de gepubliceerde bereiken.
6️⃣ Betaald worden door AI-crawlers: Pay per crawl en Web Bot Auth
Pay per crawl is een functie van Cloudflare AI Crawl Control waarmee site-eigenaren per zone een prijs instellen en voor elk verzoek van een AI-crawler laten betalen. Volgens de officiële documentatie die op 18 oktober 2026 is bekeken, is het een private bèta, en verwerkt Cloudflare de betaling als Merchant of Record.
Crawlers die hun intentie om te betalen in een requestheader meesturen, krijgen een 200-antwoord, de andere een [402 Payment Required]-antwoord met de prijs. Wordt dezelfde crawler geblokkeerd met WAF of Bot Management, dan gaat de blokkeerregel voor op het laten betalen.
Crawlers die willen betalen, moeten met Web Bot Auth bewijzen wie ze zijn. Bij Web Bot Auth ondertekent de bot zijn verzoeken met een Ed25519-sleutel en publiceert hij zijn publieke sleutel op [/.well-known/http-message-signatures-directory], zodat de ontvangende kant de handtekening kan verifiëren.
De handtekening gaat mee in drie headers, [Signature-Agent], [Signature-Input] en [Signature], en identificeert de bot met een cryptografische handtekening in plaats van IP-bereiken. Het standaardformaat van de toegangslog van de originserver legt geen requestheaders vast, dus we hebben niet gecontroleerd of de verzoeken van AI-crawlers in de 14 dagen handtekeningen hadden.
De 18.605 verzoeken van AI-crawlers die in de 14 dagen vanuit gepubliceerde IP-bereiken zijn gecontroleerd, kwamen overeen met 77% van de 24.022 verzoeken die Googlebot en bingbot in dezelfde periode vanuit hun gepubliceerde bereiken stuurden. Of je trainingstokens aan robots.txt toevoegt, beslis je op basis van de cijfers zonder imitators, en door vergelijking met bereiken aan een wekelijkse logtelling toe te voegen kun je de trend volgen.
🔢 FAQ & aanbevolen content




ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.