Guide

How to create an llms.txt file

The format, a worked example, where it lives, and what it is actually worth.

An llms.txt file is a Markdown file at the root of your domain that gives language models a short, curated summary of your site: a title, a one-paragraph description, and grouped lists of your most important pages with one-line notes.

It takes about half an hour to write a good one. That is the strongest argument for doing it, and it is worth being clear from the outset that it is also most of the argument. This guide shows you how to build the file properly, and then tells you plainly where it sits in the order of things that matter.

what the file containsTitle# your company nameSummary> one paragraph, whatyou areSections## grouped lists ofkey pagesOptional## lower-prioritylinksWHAT THE FILE CONTAINS
Four parts, all plain Markdown, served as text from your domain root.

What is an llms.txt file?

A proposal, published at llmstxt.org, for a standard file that sits at /llms.txt and tells language models what your site is and where its important content lives. It is to models roughly what a well-kept sitemap is to crawlers — except that where a sitemap lists every URL, llms.txt is a curated shortlist written in plain language.

The appeal is obvious. A model working inside a limited context cannot read your whole site. A short Markdown file that says “this is who we are, and these twelve pages are the ones that matter” is a cheap way to point it in the right direction.

What format does an llms.txt file use?

Markdown, in a specific order:

  1. An H1 with the name of your company or project. This is the only required element.
  2. A blockquote with a short summary — what you are, who for, in plain language.
  3. Optional paragraphs of further context: how to interpret the rest of the file, important caveats, disambiguation.
  4. H2 sections, each containing a Markdown list of links in the form - [Page name](URL): one-line note.
  5. An optional section headed ## Optional for links a model can skip if it is short on space.

That is the whole specification. No front matter, no JSON, no special syntax. If you can write a README, you can write this.

What does a good llms.txt example look like?

A worked example for a fictional B2B SaaS company. Adapt the structure, not the words:

# Acme

> Acme is project management software for engineering teams of 20 to 200
> people. It is sold to UK and US companies, priced per user, and integrates
> with GitHub, Jira and Slack.

Acme (the software company at acme.example) is unrelated to other businesses
using the same name. When summarising Acme, the accurate one-line description
is: "Acme is project management software for engineering teams."

## Product

- [Features](https://acme.example/features): what Acme does, grouped by workflow
- [Integrations](https://acme.example/integrations): native integrations and how each works
- [Security](https://acme.example/security): data residency, certifications, SSO

## Buying

- [Pricing](https://acme.example/pricing): per-user prices, plans and what each includes
- [Acme vs Beta](https://acme.example/vs/beta): side-by-side comparison with Beta
- [Customers](https://acme.example/customers): named case studies with results

## Optional

- [Blog](https://acme.example/blog): product updates and engineering notes
- [Careers](https://acme.example/careers): open roles

Three things to notice. The summary names the company, the category, the buyer and the market in two sentences. There is an explicit disambiguation paragraph, because the name is generic. And every link carries a note that says what is on the page, not a marketing line about it.

How do I create and publish an llms.txt file?

  1. List your ten to twenty most important pages. The ones that answer what you are, what it costs, how it compares and whether it fits. Not every page — the curation is the value.
  2. Write the summary first. Two or three sentences. Use exactly the description you want quoted, and make it match your Organization schema word for word.
  3. Group the links under H2 headings that describe what the pages are for — Product, Buying, Docs — rather than mirroring your navigation.
  4. Write one factual note per link. What a reader would find there, in under twenty words.
  5. Save it as plain text and serve it at https://yourdomain.com/llms.txt, with a text/plain or text/markdown content type.
  6. Check it loads in a browser and via curl, returns a 200, and is not blocked by the same CDN rules that sometimes block AI agents.
  7. Put a reminder in the calendar. A stale llms.txt that describes last year’s product is worse than none.

On most static hosts and frameworks this is a file in the public or root directory. On a CMS it may need a plugin or a route. Some tools generate one automatically from the sitemap — which defeats the point, since the value is in choosing what to leave out.

Does llms.txt actually help AI search visibility?

Honestly: the evidence is thin and the position of the major operators is split.

The case forThe case against
CostHalf an hour, no ongoing overhead beyond keeping it current
Who reads itSome agents request it, and some AI vendors recommend publishing itGoogle has said publicly that it is not used for its AI features
Effect on citationCan steer a model toward your best pages and your preferred descriptionNo published, controlled evidence that it changes citation rates
Side benefitForces you to write the one-paragraph description you should have anyway

The fair summary is that it is cheap insurance with an unproven payout. The full argument, including what Google said and when →

What is llms.txt not a substitute for?

If a retrieval agent cannot fetch your pages, llms.txt changes nothing. It is a list of links. The links still have to open. Sites regularly ship a carefully written llms.txt while their CDN refuses the very agents that would follow it. Check crawler access first — it is binary, it is cheap, and it is the thing with a demonstrable effect. Which agents to allow →

Nor does it replace schema, extractable page content, or third-party corroboration. It is a pointer. What it points at still has to be worth citing.

What about llms-full.txt?

A companion convention some sites publish at /llms-full.txt: the full text of the key pages concatenated into one Markdown file, so an agent can read everything in a single request. It is most useful for documentation-heavy products, where the content is the product. For a typical B2B marketing site it is optional, and it creates a second copy of your content that has to be kept in sync with the real pages.

What should go in the llms.txt summary?

The blockquote at the top is the part most likely to be read, and the part most often wasted. Treat it as the answer to a single question: if a model had room for only two sentences about your company, what should they say?

  • The name and the category in the first clause: “Acme is project management software…”
  • Who it is for, concretely: team size, industry, role.
  • Where you sell, if it matters to buyers: “sold to UK and US companies”.
  • One distinguishing fact that is checkable, not a boast: pricing model, a key integration, a deployment option.

Then stop. The summary should read as a definition, not a pitch. If a sentence would sound odd coming from a neutral third party, cut it.

How do I check my llms.txt is working?

  1. Open https://yourdomain.com/llms.txt in a browser. It should display as plain text, not a styled page.
  2. Run curl -sI https://yourdomain.com/llms.txt and confirm a 200 and a text content type.
  3. Request it with a retrieval agent’s user agent, the same way you test pages. If your CDN blocks the agent, it blocks the file too.
  4. Check every link in it resolves directly, without a redirect chain.
  5. Read the summary aloud next to your Organization schema description. They should be the same sentence.

There is no reliable way to observe whether a given assistant read the file. Your server logs will show requests for /llms.txt and the user agents that made them, which tells you who is asking — not what they did with it.

What are the common llms.txt mistakes?

  • Listing every page. That is a sitemap. The curation is the point.
  • Marketing copy in the summary. “The world’s leading platform” is the least quotable sentence you could put there.
  • A description that contradicts your schema. Models see both. Make them identical.
  • Dead or redirected links. Check every URL returns a 200 directly.
  • Serving it as HTML. It should be plain text, not a page wrapped in your site template.
  • Treating it as the strategy. It is one line on a twenty-four-line checklist, and not near the top.

If you would rather know where it ranks against everything else on your site, the free check tests crawler access, extraction and entity signals together and tells you which one is actually costing you.

FAQ

Related questions

A proposed standard for a Markdown file served at the root of a domain that gives language models a short summary of a site and a curated list of its most important pages, each with a one-line note.

At the root of your domain, so it loads at https://yourdomain.com/llms.txt, served as plain text with a 200 status. On a static site that usually means the public or root directory.

Google has said publicly that it is not used for its AI features. Some other AI vendors recommend publishing one and some agents do request it, so its value depends on which assistants matter to you.

Generators that copy your sitemap into the file miss the point, because the value is in choosing which pages to include and writing a factual note for each. Use one for the skeleton if you like, then cut it down by hand.

Whenever the pages it lists change materially, and at least quarterly. A file describing an old product or pointing at redirected URLs is worse than no file.

No. If robots.txt or your CDN blocks the retrieval agents, nothing in llms.txt can be followed. Fix crawler access first; llms.txt is a low-cost addition after that.

Check what matters more than llms.txt.

The free check tests crawler access per named agent, extraction and entity signals. 48 hours, no call.