Letting the Robots In
A perfect page that a crawler cannot fetch scores zero where it counts. This chapter is about permission — who is allowed to read you, who thinks they are, and the two traps that silently block the engines you most wanted.
The problem
Everything so far has been about the page. This chapter is about whether the page is reachable, and it is placed here deliberately: access is worth more than quality, because quality is only evaluated after access succeeds. A brilliant page behind a 403 is a page that does not exist.
And access has become genuinely confusing, because “AI crawler” is not one thing. There are at least three kinds, they belong to the same companies, and they want different things:
- Answer crawlers fetch a page because a user just asked something and the engine is composing a reply now. Blocking these removes you from answers.
- Training crawlers collect text to train future models. Blocking these is a reasonable position with no effect on today's answers.
- Search crawlers build the index the answer engines retrieve from. Blocking these removes you from the pool before any question is asked.
The hard way
In 2023 a great many site owners added this, in good faith, after reading an article about AI and copyright:
User-agent: GPTBot
Disallow: /
That rule blocks OpenAI's training crawler.
It does not block OAI-SearchBot, which is what
fetches pages for ChatGPT's search. Many people
believe they have opted out of AI entirely and have opted
out of nothing that affects them. Others copied a stricter
snippet that blocked both, and have been wondering for a
year why ChatGPT never cites them.
Neither group can tell which one they are in by reading
their own robots.txt, because the file is a
list of tokens and the tokens do not say what they do.
What Sjá shows you
The AI crawlers view resolves your robots.txt
per crawler and states the outcome in words:
which named crawlers are allowed, which are blocked, and
what each one is for. Not the file — the
consequence.
Freddy's result, on the first run:
GPTBot blocked training
OAI-SearchBot blocked answers <- this is the problem
ClaudeBot allowed answers
PerplexityBot allowed answers
Google-Extended blocked training
One line explains three months of ChatGPT never mentioning Freddy. It was never a content problem.
Fetching as a crawler
Here is the trap that robots.txt cannot show
you. Sjá can fetch your page as a given
crawler — sending that user agent — and report
what actually comes back.
This matters because permission is granted in two places
and only one of them is your file. Your CDN or firewall
has its own opinion about non-browser traffic, and a
default bot-protection rule will return 403 to
ClaudeBot while your robots.txt
says, sincerely, that ClaudeBot is welcome. You have
invited a guest your doorman is turning away, and nothing
in your own configuration reveals it.
as ClaudeBot 403 Forbidden (Cloudflare bot fight mode)
as PerplexityBot 200 OK 18 KB, 0 words of body text
as OAI-SearchBot 200 OK 18 KB, 1,240 words
The middle line is the second trap. 200 OK with no text means the page was served, and everything in it arrives via JavaScript. A crawler that does not execute JavaScript — which includes several answer crawlers — received an empty shell and moved on. Your page is not blocked; it is blank.
What to actually do
- Decide the training question on its merits. Blocking training crawlers is a legitimate choice and costs you nothing in answers. Make it deliberately.
- Let answer and search crawlers in. If you want to be cited, this is not optional; it is the whole mechanism.
- Fetch as each one and confirm. Your file is an intention; the fetch is the fact.
- Fix empty bodies at the server. If the text only exists after JavaScript, it does not exist for a meaningful share of your audience.
What you learned
- Access outranks quality. Quality is only evaluated after the fetch succeeds.
- 'AI crawler' is three different jobs — answers, training, search — often from the same company.
- Blocking GPTBot is not blocking OAI-SearchBot. Most people who think they opted out did not, and some who did never meant to.
- Fetch as the crawler. Your CDN has an opinion your robots.txt cannot see.
- 200 OK with no text is worse than a block, because it looks fine from every angle except the one that matters.