Ronalds Vilciņš

How to Block AI Crawlers Without Blocking Search

If you want to stop AI companies crawling your site, block the crawler you mean—not every verified bot. Search crawlers, user-triggered fetchers, and model-training crawlers can use different identities and serve different purposes.

No method here can prevent someone from copying a public page. It controls compliant crawlers or requests you can identify.

Start with robots.txt

For a crawler that honours the Robots Exclusion Protocol, add its documented user agent to /robots.txt:

User-agent: {BOT-NAME}
Disallow: /

A 2024 list might have looked like this:

User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: Google-Extended
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: PerplexityBot
Disallow: /

Do not copy that list blindly. Providers can add agents or separate training from search and user-requested visits. Check each provider’s current documentation, decide which access you want to refuse, and test the published file.

robots.txt is a request, not enforcement. A malicious crawler can ignore it.

Enforce the block at Cloudflare

Cloudflare introduced a verified-bot category for AI crawlers. In the WAF rule builder, the expression was:

(cf.verified_bot_category eq "AI Crawler")

Choose the rule action carefully and review the matched traffic after deployment. Product names, plan availability, and dashboard paths change, so use Cloudflare’s current bot-management documentation for the setup.

This is stronger than robots.txt because matching requests can be rejected. It also depends on Cloudflare correctly identifying the crawler; a fake or unknown agent may require rate limits or a different rule.

Be careful with IP blocks

The original version of this article linked to an OpenAI crawler and fetcher list and blocked one published network:

sudo ufw deny proto tcp from 23.98.142.176/28 to any port 80
sudo ufw deny proto tcp from 23.98.142.176/28 to any port 443

That range is historical, not a current recommendation. Provider networks can change, and a stale block may miss the crawler or reject unrelated traffic. Only use IP rules from current official ranges, automate updates if possible, and inspect their effect.

noai is only a preference

Some publishers add these non-standard tokens:

<meta name="robots" content="noai, noimageai">

There is no general requirement for crawlers to honour them. A WordPress plugin can add the tag, but installing a plugin does not turn the tokens into access control.

I would publish precise robots.txt rules first, enforce them at the edge when the crawler creates cost or ignores the request, and keep private content behind authentication. A polite meta tag can state your preference. It cannot guard the door.

Enjoyed reading this?

If you found this article helpful, consider supporting my writing. Every little bit helps keep this blog going.

← Back to all articles