Dat je robots.txt OAI-SearchBot toelaat, bewijst niet dat de crawler je artikel ook ontvangt. robots.txt legt vast wat een crawler mag ophalen. Wat een verzoek werkelijk terugkrijgt, wordt verderop beslist: door doorverwijzingen (redirects), de instellingen van je CDN, je firewallregels en het antwoord van je applicatie. Ontbreekt een pagina in ChatGPT Search, dan is dat een reden om de toegang te onderzoeken, geen bewijs dat die toegang geblokkeerd is.
OAI-SearchBot is de crawler waarmee OpenAI websites laat verschijnen in de zoekfuncties van ChatGPT. Het crawleroverzicht van OpenAI raadt aan OAI-SearchBot toe te laten in robots.txt, en ook verzoeken vanaf de gepubliceerde IP-reeksen. Test ze allebei en kijk daarna wat de server terugstuurt. Een verzoek met de naam van de crawler vraagt om een IP-controle; een antwoord met status 200 vraagt om een controle van de body.
De test van 20 minuten aan het eind volgt één URL van toestemming tot aflevering, met de logs van je CDN en je eigen server.
Twijfel je nog welke bot van OpenAI je überhaupt wilt toelaten, begin dan bij GPTBot versus OAI-SearchBot versus ChatGPT-User.
Wat OpenAI zelf documenteert
Het crawleroverzicht en de FAQ voor publishers van OpenAI, allebei gecontroleerd op 25 september 2026, zeggen het volgende:
- Elke openbare website kan in ChatGPT Search verschijnen. Samenvattingen en snippets krijg je alleen als je OAI-SearchBot niet blokkeert.
- Sites die OAI-SearchBot weren, verschijnen niet in de zoekantwoorden van ChatGPT, al kunnen ze nog wel als navigatielink opduiken.
- Na een wijziging in robots.txt kunnen de systemen van OpenAI ongeveer 24 uur nodig hebben om zich aan te passen.
- De gedocumenteerde voorbeeld-user-agent bevat
OAI-SearchBot/1.4. OpenAI meldt dat het versienummer kan veranderen en dat verzoeken om robots.txt een extrarobots.txt-markering kunnen bevatten. - De gepubliceerde IP-reeksen staan op openai.com/searchbot.json.
Niets hiervan belooft een crawldatum, een crawlfrequentie of een citatie. De aanpassingstijd van ongeveer 24 uur geldt voor wijzigingen in robots.txt; het is geen tijdpad voor het opheffen van een firewallblokkade.
De route, laag voor laag
Werk deze tabel af voor één exacte URL. Herstel de eerste fout die je vindt en loop daarna alle controles opnieuw door, tot en met de body van het antwoord. Een challenge is hier een controlepagina die in plaats van de inhoud verschijnt en test of er een mens of een echte browser achter het verzoek zit.
| Laag | Wat er misgaat | Hoe je het controleert |
|---|---|---|
| 1. Host | robots.txt laat de crawler toe op www, maar het artikel staat op het kale domein of op een subdomein docs. met een eigen bestand | Open /robots.txt op elke host die de URL onderweg aandoet |
| 2. Doorverwijzingen | De keten eindigt op de homepage, een inlogpagina, een cookiemuur of een host die de crawler weert | Volg de keten met curl en noteer elke stap |
| 3. Antwoord op robots.txt | Het bestand zelf geeft een serverfout, of een challenge in plaats van de regels | Controleer de statuscode én de inhoud |
| 4. Botinstellingen van het CDN | Een instelling voor AI-bots of botbeheer blokkeert de crawler of stuurt hem een challenge | Lees de beveiligingsgebeurtenissen voor die URL en die user-agent |
| 5. Firewallregels | Een landenblokkade, een rate limit (status 429) of een eigen regel grijpt in voordat een toestemmingsregel aan de beurt is | Koppel het gelogde verzoek aan een regel-ID |
| 6. Het antwoord | Status 200, maar de body is een challenge, een foutpagina, een inlogformulier of een lege huls | Bewaar de body en zoek er een zin uit het artikel in |
Laag 1 volgt uit RFC 9309, de standaard voor robots.txt: die plaatst het bestand op het hoogste niveau van elke host. Controleer www.example.com en example.com dus apart; wat op de ene host is toegestaan, zegt niets over de andere.
Voor laag 3 zegt dezelfde standaard dat de crawler, als robots.txt door server- of netwerkfouten onbereikbaar is (ook bij een status in de 5xx-reeks), “MUST assume complete disallow”: hij moet dan uitgaan van een volledig verbod. Bij een 4xx-status zoals 404 geldt het bestand als niet beschikbaar, en dan mag een crawler volgens de standaard alles op de host ophalen. OpenAI documenteert niet hoe het met deze gevallen omgaat; de RFC verklaart het verschil, maar voorspelt niet wat OpenAI doet. Geeft robots.txt zelf een challenge terug, controleer je artikelen dan op hetzelfde probleem.
Voor laag 4 kijk je naar de botinstellingen van je CDN. Cloudflare laat site-eigenaren bijvoorbeeld AI-bots blokkeren op basis van gedrag: Search, Agent of Training. De documentatie kondigde voor nieuwe domeinen vanaf 15 september 2026 nieuwe standaardinstellingen aan: Training- en Agent-bots geblokkeerd op pagina’s met advertenties, Search toegestaan. Je eigen domein kan anders zijn ingesteld, dus controleer het. De pagina over geverifieerde bots van Cloudflare noemt OAI-SearchBot als voorbeeld voor de oude categorie AI Search; kijk dus ook op welke categorieën je regels werken.
Voor laag 5 controleer je de volgorde van je regels. Cloudflare waarschuwt op zijn pagina voor probleemoplossing dat een crawler die op Allow staat, toch geblokkeerd kan worden door een eigen firewallregel die eerder draait, en dat zulke blokkades “may not be visible in AI Crawl Control analytics”: ze staan dan mogelijk niet in die statistieken.
Kijk ook naar landenblokkades. Vercel en MERJ zagen eind 2024 dat de crawlers die zij aan ChatGPT toeschreven, vanuit Amerikaanse datacenters draaiden. Dat is een waarneming van derden, geen documentatie van OpenAI over waar zijn crawler nu draait. Een regel die alleen Europees verkeer toelaat, is het controleren waard, maar alleen je logs laten zien of die regel de crawler tegenhield.
Google formuleert hetzelfde principe voor zijn eigen AI-functies: crawlen moet volgens zijn pagina over AI-functies toegestaan zijn “in robots.txt, and by any CDN or hosting infrastructure”, dus ook door je CDN en je hosting.
Drie opdrachten die laten zien wat de route teruggeeft
Vervang de voorbeeld-URL door je eigen pagina, en een zin uit het artikel door een echte zin uit dat artikel.
# 1. Elke stap, met statuscode en Location-header
curl -sSL -D - -o /dev/null 'https://example.com/jouw-pagina/' | grep -iE '^(HTTP|location)'
# 2. De status van robots.txt op elke host uit stap 1
curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/robots.txt'
# 3. De uiteindelijke pagina, opgevraagd met de naam van de crawler
curl -sSL -o page.html -w '%{http_code} %{num_redirects} %{url_effective}\n' \
-A 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36; compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot' \
'https://example.com/jouw-pagina/'
grep -c -F 'een zin uit het artikel' page.html
De curl-handleiding beschrijft deze opties. De tweede opdracht geeft alleen een status, dus open robots.txt apart om de regels te lezen. De derde bewaart de uiteindelijke body als page.html. Open dat bestand ook als de zin gevonden wordt: de treffer kan in een metatag staan in plaats van in het artikel. Is de telling nul, kijk dan eerst of HTML-opmaak of een regeleinde de zin onderbreekt, voordat je concludeert dat de tekst ontbreekt.
De derde opdracht draagt de naam van de crawler, maar komt nog steeds van jouw computer: een lokale test. Zo vind je een regel die op de user-agent reageert, maar wat het netwerk van OpenAI ontvangt, zie je er niet mee. Een firewall die bots verifieert, kan het verzoek juist weigeren omdat de opgegeven naam niet bij het IP-adres van de afzender past.
Is dat verzoek echt OAI-SearchBot?
Iedereen kan de user-agent van OAI-SearchBot meesturen. Toets bij een gelogd verzoek met die naam het IP-adres van de client aan de gepubliceerde reeksen van OpenAI. Het script controleert alleen of het adres binnen die reeksen valt, niet wat de crawler ontving:
import ipaddress, json, sys, urllib.request
reeksen = json.load(urllib.request.urlopen("https://openai.com/searchbot.json"))
ip = ipaddress.ip_address(sys.argv[1])
raak = any(ip in ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix"))
for p in reeksen["prefixes"])
print(ip, "valt binnen de gepubliceerde reeksen van OAI-SearchBot" if raak else "valt NIET binnen de gepubliceerde reeksen")
Sla het op als check_ip.py en draai python3 check_ip.py 203.0.113.7, met het IP-adres uit je log in plaats van het voorbeeldadres. Op 25 september 2026 bevatte het bestand 39 IPv4-reeksen. Het script haalt bij elke run een verse kopie op; een toelatingslijst in je firewall moet je net zo goed actueel houden.
Juist bij regels die de crawler moeten doorlaten, liggen twee valkuilen:
- Eén exacte tekenreeks matchen, versienummer inbegrepen. OpenAI zegt dat de versie kan veranderen, en dan matcht een regel op de exacte tekenreeks mogelijk niet meer.
- Alleen op naam toelaten. Elke scraper kan “OAI-SearchBot” in een verzoek zetten. Eis dat de naam en de gepubliceerde IP-reeks allebei kloppen.
De crawlerpagina van Perplexity beschrijft dat patroon voor zijn eigen bots: combineer de user-agent met de gepubliceerde IP-reeksen, laat verzoeken die daaraan voldoen door voordat je blokkeerregels aan de beurt zijn, en werk de IP-lijst automatisch bij. Dat is advies voor de crawlers van Perplexity, niet van OpenAI; gebruik voor OAI-SearchBot de lijst van OpenAI.
Lees de logs zonder er te veel van te vragen
Het log van je CDN en het log van je eigen server (de origin) beslaan verschillende delen van de route. Een verzoek dat het CDN blokkeert, bereikt de origin nooit, dus een leeg originlog sluit niet uit dat de crawler het probeerde. Zoek in allebei op OAI-SearchBot; zo vind je ook de verzoeken om robots.txt met de extra markering.
Noteer bij elk verzoek dat je bekijkt: de tijd, de host, het pad, de status, de uitkomst van de IP-controle en het ID van een eventuele blokkeerregel. Schrijf ook op hoe lang de logs bewaard blijven en of het om een steekproef gaat. Ontbrekende logregels zijn een gat in het bewijs, geen bewijs dat de crawler wegbleef. Een logregel met alleen een status laat bovendien de body onbevestigd.
Een uitgewerkt voorbeeld (hypothetisch)
Stel je een trainingsbureau in Amsterdam voor. De robots.txt laat OAI-SearchBot toe op www. Het team heeft de cursuspagina’s nog niet in ChatGPT Search gezien, en in het originlog staat geen enkel verzoek van OAI-SearchBot.
Het team controleert de hosts en de doorverwijzingen, en stelt vast dat robots.txt 200 teruggeeft met de bedoelde regels. In de beveiligingsgebeurtenissen van het CDN staan verzoeken met de naam OAI-SearchBot, vanaf adressen die door de IP-controle komen, beantwoord met 403 door een regel die “Alleen EU en VK” heet.
Het team voegt een uitzondering toe die vóór de landenblokkade draait en alleen geldt voor verzoeken met OAI-SearchBot in de user-agent én een IP-adres binnen de gepubliceerde reeksen van OpenAI, met een lijst die zichzelf automatisch bijwerkt. Voor al het andere verkeer blijft de landenblokkade gelden. Bij een later verzoek logt het CDN een 200 en verschijnt het verzoek in het originlog. Daarmee staat vast dat dit verzoek langs de blokkade kwam. Voordat het team de controle afsluit, is er nog bewijs nodig dat het antwoord de cursustekst bevatte.
Of ChatGPT het bedrijf daarna noemt, is een aparte test. Waarom word ik niet genoemd in ChatGPT behandelt die diagnose.
Wat een groene controle niet bewijst
Een antwoord dat het artikel bevat, bewijst de aflevering voor dat ene verzoek. Het bewijst niet dat de pagina wordt gekozen, aangehaald of geciteerd; Hoe je geciteerd wordt door ChatGPT gaat over dat werk. Verschijnt de artikeltekst pas nadat JavaScript in een browser heeft gedraaid, dan krijgt de crawler mogelijk nog steeds een lege huls. Dat is eerder een renderprobleem dan een toegangsprobleem, en alleen het teruggestuurde document laat het zien.
Probeer dit vandaag (20 minuten)
- Minuut 0–2: Kies één openbare URL die je beschikbaar wilt hebben voor ChatGPT Search, en één opvallende zin uit het artikel op die pagina.
- Minuut 2–7: Draai de curl-opdrachten. Noteer elke host en elke status, open daarna
page.htmlen zoek de zin op. Markeer de uitkomst als lokale test. - Minuut 7–11: Open robots.txt op elke host in de keten. Controleer de status, de inhoud en de regels voor OAI-SearchBot op het pad waar het om gaat.
- Minuut 11–18: Zoek in de CDN- en originlogs van de afgelopen zeven dagen op
OAI-SearchBot. Toets de IP-adressen van hooguit drie relevante treffers aan de gepubliceerde reeksen en noteer hun status en eventuele regel-ID’s. Geen treffers? Noteer dat, en welke periode de logs beslaan. - Minuut 18–20: Schrijf de bevinding voor die URL op. Werd een geverifieerd verzoek geblokkeerd, benoem dan de laag en de regel. Kreeg het een
200, noteer dan of je bewijs hebt van de body. Heb je alleen een geslaagde lokale test, laat de aflevering aan de crawler dan als onbevestigd staan.
Het resultaat is een concreet verslag: de URL, het tijdstip van het verzoek, het gecontroleerde IP-adres, de status, een eventuele blokkeerregel en wat je weet over de teruggestuurde body. Daarmee heeft de volgende persoon een fout om te herstellen, of een scherp afgebakend gat om te onderzoeken.
Citeer deze pagina:OAI-SearchBot toegestaan en toch geblokkeerd? Controleer de route na robots.txt.Len P. van der Hof. https://lenvanderhof.com/nl/blog/oai-searchbot-toegang-controleren/ ·