GPTBot in your logs: allow it, block it, or serve it properly

GPTBot is one of several user agents in this family, and they do not all do the same job. Blocking the wrong one costs you the thing you probably wanted to keep.

Read the quickstartTwo lines of middleware. Free tier is 1,000 agent visits a month.

Your business

Products, services and policies

What is missing

Details a customer needs

A clearer answer

Information you can publish

These are not all the same agent

The important distinction is between an agent crawling broadly and an agent fetching one URL because a person just asked about it. They arrive with different user agents and they mean completely different things for your business.

Kind of requestWhy it is happeningWhat blocking it costs you
Broad crawlCorpus building, on its own scheduleLong-term presence in future training
User-triggered fetchSomebody asked a question right nowThe answer about you, immediately
Search-style crawlIndexing for an assistant’s searchRetrieval that would have cited you

Most robots.txt files that block these were written in one line without that distinction being made. The second row is the one worth thinking hardest about: a person is waiting for an answer about you, and blocking it means the answer gets composed without you.

How to decide

There is no universally correct answer here, and anyone whose product depends on you allowing everything will tell you there is. Two honest cases:

  • Publishers whose product is the text itself. Declining broad training crawls is a defensible commercial position, and plenty of newsrooms have taken it deliberately.
  • Businesses whose product is not the text. A clinic, a store or a services firm is usually better off being readable: the page exists to be found, and the text is marketing rather than inventory.

If you allow it, serve it something worth reading

An allowed fetch that returns a wall of theme markup is barely better than a blocked one: it succeeds, costs the agent most of its budget, and yields little. The same middleware that logs the request can answer it in a fraction of the bytes.

middleware.ts
import { gateway } from '@rebilder/gateway'

export default gateway({
  source: { kind: 'document', resolve: myPages },
})

Classification comes from a fixture corpus of real header samples rather than pattern guesses, and every newly observed agent gets added to it. Search crawlers are classified separately and always receive canonical HTML.

What this does not do

Frequently asked questions

What is GPTBot?

A crawler user agent used to gather web content. It is distinct from the user agent used when an assistant fetches a page because someone asked a question, and the two have very different consequences if you block them.

Should I block GPTBot?

It depends on whether your text is your product. Publishers often decline broad training crawls deliberately. For a business whose pages exist to be found, blocking usually costs more than it protects.

Can I block training but allow live answers?

Yes. The crawling agents and the user-triggered fetcher use different user-agent strings, so robots.txt can decline one while allowing the other. That is a supported configuration rather than a workaround.

How do I see which agents are fetching my site?

From your own request log, classified against a corpus of real header samples. Analytics cannot show you this: agent fetches run no JavaScript and fire no beacon, so they never reach a page-view tool. A script sees only the other half, AI-referred visitors and browser-driving agents, which is the half the free Rebilder Tag counts.