dashboard
← all posts

Good bot, bad bot: measuring AI-crawler compliance in the open

2026-06-29

Every website has a robots.txt. It is a polite request: please don't crawl these paths. For decades most search engines honoured it because it was in their interest to. The arrival of AI crawlers — training data harvesters, retrieval bots, and autonomous agents — has put that old handshake under real strain. So I built a small site to answer one question with evidence instead of opinion: who actually respects your robots.txt?

Why I built this

I kept reading confident claims in both directions — "the AI companies ignore robots.txt" and "of course we honour it" — with almost no public, reproducible data behind either. That gap bothered me. A claim about crawler behaviour is testable. You just need a site that invites everyone in, marks a few doors clearly as off-limits, and writes down who walks through them anyway.

So that is what goodbot-badbot.com is: a live, open experiment. No tricks, no per-user-agent blocking, no cloaking. Just a clean measurement, published in real time.

How it works

The whole site is open to every crawler. The only thing robots.txt disallows is a short list of honeypot paths:

User-agent: *
Disallow: /do-not-crawl/
Disallow: /private/
Disallow: /honeypot/
...

A compliant crawler reads those rules and stops at the boundary. A non-compliant one keeps going and trips a honeypot — and every honeypot hit is logged as a violation, regardless of which user-agent it claims to be. Because the rest of the site is deliberately open, compliance is something we can actually measure, not just assert.

There are two ways a bot can end up on a forbidden path, and they mean different things, so the honeypots are split into two groups:

That distinction matters. Using the disallow list itself as a list of interesting URLs to crawl is a particularly cheeky failure mode, and splitting the honeypots lets us see it.

Beyond the disallow list

Compliance is the headline, but two newer signals turned out to be just as interesting.

Web Bot Auth. A handful of operators have started cryptographically signing their requests (the IETF Web Bot Auth draft, built on HTTP Message Signatures). The site verifies those signatures against the operator's published keys, so a visit can be marked verified, signature failed, or simply unsigned. It is an early look at which crawlers are willing to prove who they are.

Discovery reads. Alongside robots.txt, the site serves the files agents are starting to look for: llms.txt and agents.md. These are the opposite of a honeypot — they are invitations, a machine-readable summary of the site for a model that asks nicely. Reading them is not a violation; it is the good signal, an agent doing discovery the way it is meant to. The dashboard shows who fetches them, separately from who trips the traps.

Privacy

Measuring behaviour does not require tracking people. Every logged IP address is SHA-256 hashed and truncated to the first 16 hex characters before it is stored. The raw IP never touches disk. What is published is aggregate: which bot, which path, how often — not who.

Watch it live

The scoreboard updates continuously at goodbot-badbot.com, and the whole thing is open source on GitHub — FastAPI and MySQL, nothing exotic. I will follow this post with a data one once there is enough signal to say something honest about it. For now: the doors are open, the off-limits ones are clearly marked, and the log is running.