(Update 18 Oct 2025): adding a Content Signals Policy to this site

(Update 24 Sep 2024: originality.ai has a page showing the trend of increasing AI crawler blocking)

(Update 14 Jun 2024: Add darkvisitors.com API and SPC.)

I’m going to start with a warning. You can’t completely block “AI” training from a web site. Underground AI will always get through, and it might turn out that the future of AI-based infringement is bot accounts so that the sites that profit from it can just be shocked at what one of their users was doing—kind of like how big companies monetize copyright infringement.

But there are some ways to tell the halfway crooks of the AI business to go away. Will update if I find others.

robots.txt

Known Agents is a good source of an up-to-date set of lines to add to your robots.txt file.

This site uses the API to catch up on the latest. So if I fall behind on reading the technology news, the Makefile has me covered.

# update AI crawlers blocking list
# FIXME: use new domain
tmp/robots.txt :
        curl -X POST "https://api.darkvisitors.com/robots-txts" \
                -H "Authorization: Bearer $(shell pass darkvisitors-token)" \
                -H "Content-Type: application/json" \
                -d '{"agent_types": ["AI Data Scraper", "AI Assistant", "Undocumented AI Agent", "AI Search Crawler"], "disallow": "/"}' \
        > $@

# The real robots.txt is built from the local lines
# in the conf directory, with the fetched lines added
public/robots.txt : conf/robots.txt tmp/robots.txt
        cat conf/robots.txt tmp/robots.txt > $@

One of my cleanup scripts gets rid of the tmp/robots.txt if it gets stale, and I use Pass to store the token.

robots.txt continued: Content Signals Policy

This is for crawlers that have multiple purposes and, for whatever reason, you don’t want to block entirely. Content Signals Policy is a new standard that we don’t know whether or not Google will follow. Update the robots.txt section for those crawlers to include a Content-Signal line, like this:

User-agent: Googlebot
Content-Signal: search=yes, ai-input=no, ai-train=no

There is also a block of verbiage to add to the top of the robots.txt file, available from the Content Signals site. More at adding a Content Signals Policy to this site. I don’t have any pages disallowed for Googlebot entirely, because I am a big Internet optimist. Cloudflare CEO Matthew Prince said, Inside of Google, there is a fight where there are people who are saying we should change how we’re doing this, and I agree that Google can still go legit again someday.

X-Robots-Tag HTTP header

DeviantArt covers how to set the X-Robots-Tag header (which also has other uses to help control how search engines crawl your site) to express an opt-out.

On Apache httpd (I know, I’m old school) it’s something like this:

Header Set X-Robots-Tag "noai"

You can check it under “network” in browser developer tools. It should show up in response headers.

noai meta tag

Raptive Support covers the noai meta tag. Pretty easy, just put this in the HTML head with any other meta and link elements.

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

That support FAQ includes a good point that applies to all of these—the opt out is stronger if it’s backed up with the site Terms of Service or User Agreement. Big companies have invested hella lawyer hours in making these things more enforceable, and if they wanted to override ToS they would be acting against their other interests in keeping their sites in company town mode.

new: privacy opt out for servers

This is the first site to include the new SPC meta tag and X-Robots-Tag header for a privacy opt-out that works like Global Privacy Control but for servers. Basically you have legally enforceable rights in your personal information, blogs have personal information, but regular GPC only works from your browser (client) to company on the server. This goes the other way, and sends a legally enforceable* *yes, I know, this has not yet been tested in court, but give it a minute, we’re just getting started here privacy signal from a personal blog on the server to an AI scraper on the client side.

So the new header on here is

X-Robots-Tag: noai, noimageai, SPC

So we’re up to five, somebody send me number six?