Generator · SEO and AI access
Write llms.txt and decide which AI crawlers get in.
Build the file that maps your site for language models, then set allow or block for every documented AI crawler token in one robots.txt. Paste a sitemap to fill the page list, catch structural mistakes before you upload, and download both files.
What is llms.txt
llms.txt is a markdown file you publish on your own site
so that a language model can find out what the site contains without
crawling it first. It is a curated map, not a copy: a name, a short
summary and a set of links, each with one line saying what an agent
will get if it follows it. The current specification is version 2 of
the proposal at llmstxt.org.
The format is markdown with a fixed order. The H1 with the project or site name is the only required element. After it comes an optional blockquote summary, an optional details paragraph, and then any number of H2 sections, each holding a markdown list of links:
# Example Company > Example Company publishes documentation, SDKs and a changelog for the Example API. Optional details go here: how to read the links, what is not listed, anything an agent should know before it fetches a page. ## Docs - [Example API quick start](https://example.com/docs/quickstart): Install the client and make a first request. - [Example API reference](https://example.com/docs/reference): Every endpoint, parameter, rate limit and error code. ## Optional - [Example changelog](https://example.com/changelog): Dated release notes; secondary detail an agent can skip.
Three things the specification asks for, in its own words: concise, clear language; a brief informative description on each link; and avoid ambiguous terms or unexplained jargon. It also expects the file itself to stay small enough to fit in a context window while the detail sits behind the links, fetched only when it is needed. Its own test for a finished file is blunt: ask an agent a question about your site, give it only your llms.txt as a starting point, and see whether it finds the right page.
Two clarifications that matter in 2026. First, the proposal says the
information is used on demand, when an agent needs information about
a topic while assisting a user, and that its authors expected it to
be useful mainly for inference rather than training. Second, there is
no llms-full.txt any more: version 1 described a
tool for expanding the file into a full context, and version 2
removed that context-expansion tooling, which also removed the
special meaning the old Optional section carried.
Optional sections are still allowed as a convention for links an
agent can skip. Both points are from the
v2 change log.
Nothing in the specification promises a ranking benefit or an automatic upload. The file is a courtesy to agents that are already reading your site, and it costs one text file to publish.
Where the file goes, and why /llms.txt
The file is named llms.txt and lives at
/llms.txt on your host. The specification ties that name
to two conventions you already have: /robots.txt and
/sitemap.xml sit at the root for the same reason, and
index.html gives every path a conventional place for its
human-readable entry point. An llms.txt file is the LLM-readable
version of that idea.
The path is not decoration. A file placed at any subpath, such as
/docs/llms.txt, covers every URL under that path, and
where more than one file applies an agent should use the most
specific one. That is the rule that lets a project published to a
subdirectory on a shared host take part. The specification considered
and rejected the /.well-known/ prefix of RFC 8615 for
exactly that reason: well-known URIs exist only at the origin root,
and anyone who controls only a path can never add one.
Version 2 also adds a way for a page to point at its markdown version
and at the file that covers it, using the standard link relations
rel="alternate" type="text/markdown" and
rel="describedby", as HTML link elements or as an HTTP
Link header. If you want an agent to find the file and the markdown
versions of your pages without guessing, those two relations are
worth adding to your head.
Check yours the same way you check anything else: fetch the URL in a browser and confirm it returns 200 and plain text rather than a redirect to a page. This site publishes its own file at /llms.txt if you want a worked example of the finished format.
Build llms.txt and your AI crawler rules
Everything below runs in this tab. Nothing is uploaded, and nothing is stored unless you copy a share link.
The site
H1 and summaryPages
sections and linksPaste a sitemap
or a URL listOutput
spec v2AI crawler rules
one group per tokenGroups match the crawlers own product token, case-insensitively. When several rules match one URL the longest match wins and Allow wins a tie. No Crawl-delay line is emitted: RFC 9309 defines no such field. Blocking Googlebot here removes you from Google Search, so the recommended preset leaves search and grounding crawlers open.
AI trainingCrawlers that collect pages for training corpora. Blocking these is the decision most sites are actually making.
GPTBotOpenAI · Training crawler for OpenAI models.ClaudeBotAnthropic · Training crawler. Anthropic says its bots follow robots.txt.Google-ExtendedGoogle · Vertex AI grounding and Gemini training control. Does not affect Google Search.Applebot-ExtendedApple · The training crawler in the Applebot family.meta-externalagentMeta · Meta crawler used for AI training.AmazonbotAmazon · Amazon crawler for product data and AI training.Search and groundingCrawlers that fetch pages to answer searches or to ground an answer with citations.
OAI-SearchBotOpenAI · Powers search results in ChatGPT.Claude-SearchBotAnthropic · Search and grounding crawler for Claude.PerplexityBotPerplexity · Indexes pages for Perplexity search answers.GooglebotGoogle · Google Search itself. Blocking it removes the site from Google Search.ApplebotApple · Apple search crawler used for Siri and Spotlight suggestions.Amzn-SearchBotAmazon · Amazon search indexing.Meta-WebIndexerMeta · Indexing for Meta AI and social link previews.User-triggered fetchersSent when a person asks a model to read a specific page. The user initiated it.
ChatGPT-UserOpenAI · User-initiated. OpenAI states that robots.txt rules may not apply to it.Claude-UserAnthropic · User-initiated. Anthropic says site owners can control this crawler.Perplexity-UserPerplexity · User-initiated. Perplexity says it generally ignores robots.txt rules.Amzn-UserAmazon · User-initiated fetches for Alexa and shopping answers.Meta-ExternalFetcherMeta · User-initiated. Meta says it may bypass robots.txt and sends the visitor IP.AdsCrawlers that check ad and campaign measurement.
OAI-AdsBotOpenAI · Ad campaign measurement for ChatGPT ads.Meta-ExternalAdsMeta · Meta ads measurement.Research crawlersOpen research datasets. Common Crawl feeds a large share of what many vendors train on.
CCBotCommon Crawl · Publishes the Common Crawl corpus, a common source for training sets.All other crawlersAny crawler that does not match a group above, including search engines you have not listed.
User-agent: *The fallback group. Matched only when no other group applies.How to use it
five steps- 1. Name the site Set the domain, the site name and a one-line summary. That is the H1 and the blockquote, the only two parts most readers will ever see.
- 2. List the pages worth reading Add rows with a section, a title, a URL and a one-line note. Group pages under Docs, Guides or Optional.
- 3. Review the checks The panel flags relative links, duplicate titles, sections with no links and files too large to sit in a model context.
- 4. Set the crawler rules Allow or block each vendor token by hand, or start from a preset. The Sitemap line is filled in from your domain.
- 5. Copy, download or share Take llms.txt and robots.txt as files, or share the whole configuration as a URL.
Which AI crawlers exist in 2026
Each token below comes from that vendor own documentation, and the last column links to the page it was taken from. A robots.txt rule matches the product token a crawler sends in its own User-agent string, so a rule written for one vendor never covers another vendors bot.
| User-agent token | Owner | Group | What it fetches | Vendor |
|---|---|---|---|---|
GPTBot | OpenAI | AI training | Training crawler for OpenAI models. | docs |
ClaudeBot | Anthropic | AI training | Training crawler. Anthropic says its bots follow robots.txt. | docs |
Google-Extended | AI training | Vertex AI grounding and Gemini training control. Does not affect Google Search. | docs | |
Applebot-Extended | Apple | AI training | The training crawler in the Applebot family. | docs |
meta-externalagent | Meta | AI training | Meta crawler used for AI training. | docs |
Amazonbot | Amazon | AI training | Amazon crawler for product data and AI training. | docs |
OAI-SearchBot | OpenAI | Search and grounding | Powers search results in ChatGPT. | docs |
Claude-SearchBot | Anthropic | Search and grounding | Search and grounding crawler for Claude. | docs |
PerplexityBot | Perplexity | Search and grounding | Indexes pages for Perplexity search answers. | docs |
Googlebot | Search and grounding | Google Search itself. Blocking it removes the site from Google Search. | docs | |
Applebot | Apple | Search and grounding | Apple search crawler used for Siri and Spotlight suggestions. | docs |
Amzn-SearchBot | Amazon | Search and grounding | Amazon search indexing. | docs |
Meta-WebIndexer | Meta | Search and grounding | Indexing for Meta AI and social link previews. | docs |
ChatGPT-User | OpenAI | User-triggered fetchers | User-initiated. OpenAI states that robots.txt rules may not apply to it. | docs |
Claude-User | Anthropic | User-triggered fetchers | User-initiated. Anthropic says site owners can control this crawler. | docs |
Perplexity-User | Perplexity | User-triggered fetchers | User-initiated. Perplexity says it generally ignores robots.txt rules. | docs |
Amzn-User | Amazon | User-triggered fetchers | User-initiated fetches for Alexa and shopping answers. | docs |
Meta-ExternalFetcher | Meta | User-triggered fetchers | User-initiated. Meta says it may bypass robots.txt and sends the visitor IP. | docs |
OAI-AdsBot | OpenAI | Ads | Ad campaign measurement for ChatGPT ads. | docs |
Meta-ExternalAds | Meta | Ads | Meta ads measurement. | docs |
CCBot | Common Crawl | Research crawlers | Publishes the Common Crawl corpus, a common source for training sets. | docs |
What the vendors say, and what it means for your rules
- Robots rules are a request, not a lock. RFC 9309 says plainly that “these rules are not a form of access authorization”. A crawler that ignores robots.txt will ignore yours, so anything that must stay private belongs behind a login, not behind a Disallow line. RFC 9309: Robots Exclusion Protocol
- Some user-triggered fetchers do not follow the rules. OpenAI states that for ChatGPT-User “robots.txt rules may not apply”, and Perplexity states that Perplexity-User “generally ignores robots.txt rules”. OpenAI: crawler and fetcher documentation
- Meta sends the visitor IP with a user-initiated fetch. Meta documents that Meta-ExternalFetcher may bypass robots.txt and that the request carries the user IP address, which is why a blocked path is not a privacy control for that crawler. Meta: web crawler documentation
- Anthropic bots honour robots.txt. Anthropic states its crawlers follow robots.txt and that site owners can control Claude-User. Anthropic: Claude crawlers and fetchers
- Google-Extended is not a ranking switch. Google states that Google-Extended “does not impact a site’s inclusion in Google Search nor is it used as a ranking signal”. Blocking it does not deindex you. Google: common crawlers and fetchers
- There is no standard crawl-delay. RFC 9309 defines no crawl-delay field, so a Crawl-delay line is a vendor convention that some crawlers read and others ignore. This generator never emits one. RFC 9309: Robots Exclusion Protocol
llms.txt vs robots.txt
They answer different questions, they live at different layers, and confusing them is the most common mistake in this area.
| llms.txt | robots.txt | |
|---|---|---|
| Question it answers | What is worth reading here? | Who is allowed to fetch? |
| Who reads it | An agent that has already decided to look at your site | Every crawler, before it fetches anything |
| Format | Markdown with a fixed section order | Line-based directives per User-agent group |
| Effect if ignored | None. It is advice, not a permission | None. A crawler may ignore it entirely |
| Path semantics | Covers the URLs under its own path; the most specific file wins | Matches per User-agent group, longest path match wins, Allow wins a tie |
| Typical use | Inference: helping a model answer a question about your content | Access control and crawl budget for every bot, search engines included |
A third file often gets confused with both. A
sitemap.xml is the complete list of indexable pages;
the specification says plainly why it is not a substitute for
llms.txt, because it rarely lists the markdown versions of pages, it
excludes useful external links, and in aggregate it is far too large
to read in one context. Read the proposal
How to check whether a crawler is allowed
Four checks, from cheapest to most convincing.
- Read the file itself. Open
https://yourdomain.com/robots.txtin a browser. A 200 and plain text means the file is being served, which is the failure people hit most often: a redirect, a 404, or an HTML error page all look like a missing file to a crawler. - Find the group, then read it. Locate the
User-agent:line for the exact token. Matching is case-insensitive on the token the crawler sends. If the group has onlyAllow: /the crawler may fetch everything;Disallow: /blocks everything;Disallow: /pathblocks one area. - Resolve overlaps by hand. When more than one rule matches a URL, the longest matching path wins, and if two rules match with the same length, Allow wins. That rule is what makes
Disallow: /adminplusAllow: /admin/publicbehave the way you expect. - Watch a real fetch. Server logs are the ground truth for your own traffic, and a console crawling tool from a vendor will show you what its crawler is actually allowed to reach. Check the log after the deploy rather than trusting the file alone.
Two cautions. First, robots.txt is a request: RFC 9309 states that these rules are not a form of access authorization, so anything that must stay private needs authentication. Second, user-triggered fetchers are the least predictable group, because the vendors themselves say so. OpenAI states that robots.txt rules may not apply to ChatGPT-User, Perplexity states that Perplexity-User generally ignores robots.txt rules, and Meta states that Meta-ExternalFetcher may bypass robots.txt while sending the visitor IP address. A Disallow line tells those crawlers what you would prefer; it does not stop them.
Finally, do not expect a Crawl-delay line to be honoured. RFC 9309 defines no such field, and support for it is a vendor convention that some crawlers implement and others ignore. The generator above emits none.
Questions
What is llms.txt and where does it go?
llms.txt is a markdown file you publish on your own site to give language models a curated map of it. Serve it at https://yourdomain.com/llms.txt, or at any subpath such as /docs/llms.txt, which then covers every URL under that path. Where more than one file applies, an agent should use the most specific one. Only the H1 line carrying your site or project name is required; a blockquote summary, a details paragraph and H2 sections of links are all optional.
Does llms.txt control whether AI bots can crawl my site?
No. llms.txt is the map you hand over once a crawler is already fetching your pages. Access is decided in robots.txt, one User-agent group per crawler product token. Treat the two files as separate jobs: robots.txt says who may fetch, llms.txt says what is worth reading once they do.
Does llms-full.txt exist?
Not in the current specification. Version 1 described a tool that expanded llms.txt into a full context file, and version 2 dropped that context-expansion tooling, along with the special meaning the old Optional section had. Optional sections are still allowed as a convention for secondary links. The change log is at https://llmstxt.org/changes.html.
Which AI crawlers should I block?
Start from intent. Block the training tokens such as GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, meta-externalagent, Amazonbot and CCBot if you do not want your pages in training corpora. Keep search and grounding tokens allowed if you want to be found and cited, which means leaving Googlebot and OAI-SearchBot open. The user-triggered fetchers are a separate decision, because they only run when a person asks a model to read the page. This page lists each token with the vendor page that documents it.
Can robots.txt actually block an AI crawler?
Only for crawlers that choose to honour it. OpenAI says robots.txt rules may not apply to ChatGPT-User, Perplexity says Perplexity-User generally ignores robots.txt rules, and Meta says Meta-ExternalFetcher may bypass robots.txt and sends the visitor IP address. RFC 9309 puts it the same way: these rules are not a form of access authorization. Anything that must stay private should require authentication.
How many links should an llms.txt file contain?
Enough to navigate, few enough to read. The specification asks for concise language, a brief informative description on each link and no unexplained jargon, and it expects the file itself to stay small enough to fit in a model context while the detail sits behind the links. A few dozen links across a handful of clear H2 sections is a sensible working size. A sitemap with thousands of URLs is not a substitute: it rarely lists the markdown versions of pages and is far too large to read as a whole.
Is llms.txt worth adding to a small site?
It costs one file and it is aimed at inference rather than training: an agent uses it on demand when a user asks about something your site covers, then follows the links to the detail. Nothing in the specification promises a ranking benefit, so treat it as cheap insurance for how your pages read to an assistant rather than as a growth channel. Test it the way the proposal suggests, by asking an agent a question about your site with only your file as the starting point.
Where do the crawler tokens on this page come from?
Each one is taken from that vendor own documentation, and the table links to the page it came from. Tokens are matched case-insensitively against the product token the crawler sends in its own User-agent string, so a rule written for one vendor never covers another vendor bot. When more than one rule matches a URL, the longest match wins and Allow wins a tie.