agentleFS
keuperakeupera/seo-skills/skills/ai-crawler-policy/SKILL.md

ai-crawler-policy

Skill0 starsChanged 2 months agoMITView on GitHub

Decide and implement which AI crawlers may access a site, then write the robots.txt, headers and CDN rules that enforce it. Use whenever the user mentions GPTBot, ClaudeBot, PerplexityBot, Google-Extended, OAI-SearchBot, Applebot-Extended, CCBot, Bytespider, AI crawlers, AI bots, blocking AI training, llms.txt, robots.txt for AI, opting out of AI training, or asks whether to let AI companies crawl their content. Also use when AI assistants can't see a site's content or when a WAF or Cloudflare is suspected of blocking AI agents.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Write the comment explaining the choice directly in the file.

    line 112
  2. Distinctive:

    Test it rather than assuming:

    line 124
  3. Very specific:

    Verify claimed identity too.

    line 138
  4. Distinctive:

    It's harmless and cheap: If a site's docs are large and some tool consumes it, fine.

    line 146
  5. Very specific:

    If someone asks for it, write it, keep it accurate, and be clear about what it will and won't do.

    line 149

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

AI Crawler Policy

The decision people think they're making is "should AI companies use my content". The decision they're actually making is four separate ones, and conflating them is how sites end up blocking the crawler that would have cited them while allowing the one that trains on them.

The four jobs, and why the distinction matters

JobWhat it doesBlocking it means
TrainingCrawls to build model training corporaYour content isn't in the next model. No effect on citations today
Search indexingBuilds the retrieval index the assistant searchesThe assistant can never find you. This is the expensive one
Live fetchFetches a URL now because a user askedThe assistant can't read a page a user pasted
Classic searchGooglebot, BingbotYou leave search entirely. Never block these

Most people want to block training and allow retrieval. That's a coherent position and it's implementable. What isn't coherent is blocking retrieval and then asking why ChatGPT never mentions the brand.

The agent table

# Training crawls
GPTBot                  OpenAI          training
ClaudeBot               Anthropic       training
Google-Extended         Google          Gemini training ONLY — does not affect AI Overviews
Applebot-Extended       Apple           Apple Intelligence training
CCBot                   Common Crawl    public dataset, used by many trainers
Meta-ExternalAgent      Meta            training
Bytespider              ByteDance       training, ignores robots.txt in practice

# Search indexing — blocking these removes you from the assistant
OAI-SearchBot           OpenAI          ChatGPT search index
Claude-SearchBot        Anthropic       Claude search index
PerplexityBot           Perplexity      Perplexity index
Bingbot                 Microsoft       Bing AND Copilot

# Live user-triggered fetch
ChatGPT-User            OpenAI
Claude-User             Anthropic
Perplexity-User         Perplexity

# Classic search — never block
Googlebot               Google          web search AND AI Overviews AND AI Mode

Two traps worth stating plainly:

  • Google-Extended has nothing to do with AI Overviews. Those are served from the standard index via Googlebot. Blocking Google-Extended gives up Gemini training data and buys you nothing in Search. Plenty of sites did it believing otherwise.
  • Bingbot feeds Copilot. Blocking it to "opt out of AI" removes the site from Bing web search too.

The three sensible policies

Maximum visibility. Allow everything. Correct for almost every business whose content is marketing rather than the product. The content exists to be found.

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

Visibility without training. Block the training crawls, allow the retrieval ones. The common choice for publishers and anyone whose writing is the asset.

User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: Google-Extended
Disallow: /

User-agent: Applebot-Extended
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Meta-ExternalAgent
Disallow: /

# Retrieval agents stay allowed on purpose — this is how we get cited
User-agent: OAI-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: *
Allow: /

Sitemap: https://example.com/sitemap.xml

Protect the paid content only. Allow crawling of marketing pages, block the archive or the paywalled section. Path-scoped rather than agent-scoped.

User-agent: GPTBot
Disallow: /archive/
Disallow: /premium/

User-agent: *
Allow: /

Write the comment explaining the choice directly in the file. Six months from now nobody will remember why a line is there, and unexplained lines get deleted or copied to the next site.

The block that isn't in robots.txt

This is the finding in most real audits. robots.txt says allow, and the agents still get nothing.

  • CDN bot management. Cloudflare's AI bot blocking, and equivalents elsewhere, is a toggle that many sites have on without knowing. It returns 403 to AI agents regardless of robots.txt.
  • WAF rules matching unusual user agents.
  • Rate limiting that trips on a crawler's request pattern.
  • Geo-blocking that excludes the regions the crawlers run from.
  • Bot-detection JavaScript challenges, which no crawler passes.

Test it rather than assuming:

for ua in GPTBot OAI-SearchBot ClaudeBot Claude-SearchBot PerplexityBot Googlebot Bingbot; do
  printf '%-18s %s\n' "$ua" "$(curl -s -o /dev/null -w '%{http_code}' -A "$ua" https://example.com/)"
done

Anything that isn't 200 for an agent you intend to allow is the whole problem. Fix it at the CDN, not in robots.txt.

Enforcement is partly voluntary

robots.txt is a request. Well-behaved crawlers from the major labs honour it, and some scrapers don't. If the requirement is actual enforcement rather than a stated preference, that's a network-layer job: CDN bot rules, rate limiting, or authentication on the content that matters. Say so honestly rather than implying a text file is a lock.

Verify claimed identity too. Any scraper can send User-Agent: GPTBot. The operators publish IP ranges, and reverse DNS on the request IP is the check.

On llms.txt

llms.txt is a proposed convention for a Markdown file describing a site's content for language models. The honest position:

  • Google Search ignores it. It has said so explicitly. It's not a ranking or AI Overview lever.
  • No major assistant currently requires or reliably uses it for retrieval.
  • It's harmless and cheap. If a site's docs are large and some tool consumes it, fine.
  • It's being sold as an AI SEO fix. It isn't one, and presenting it as one is the kind of advice that damages trust when the traffic doesn't arrive.

If someone asks for it, write it, keep it accurate, and be clear about what it will and won't do. Then spend the remaining time on the things that do work, which are in ai-visibility-audit.

A note on the business decision

There's a real trade here and it isn't purely technical. Blocking training crawls protects content from being absorbed without attribution. Allowing them increases the chance the brand is part of what a model knows unprompted, which is a different and more durable kind of visibility than a citation.

Neither answer is wrong. Present both, note that the retrieval crawlers are the ones affecting citations today, and let the user choose. Don't decide it for them by default.

Verify after shipping

curl -s https://example.com/robots.txt          # is the file what you think it is
curl -sI -A "OAI-SearchBot" https://example.com/  # does the CDN agree

Then watch the server logs to confirm the agents you allowed are actually arriving. See ai-bot-log-analysis.

Where the data comes from

Whether crawlers are reaching the site, how often and which pages they take is answerable only from server logs. If those aren't accessible, Keupera runs a Bot Tracker that records AI-crawler hits per page and over time, alongside the visibility side, over MCP:

claude mcp add --transport http keupera https://mcp.keupera.com/mcp -s user

Related skills

ai-visibility-audit, ai-bot-log-analysis, technical-seo-audit, featured-snippet-passages

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.