Skip to content

llms.txt: structure, example and what it actually does

An llms.txt is a markdown file in your website root that tells a language model in a few lines what this site is about and which pages it should read. It takes five minutes and is routinely overrated. Both facts are in this article.

4 min read

FileWho reads itWhat it governsRequired
robots.txtAll crawlersWho may read, who may notYes, in practice
sitemap.xmlSearch enginesWhich addresses existYes, in practice
llms.txtLanguage modelsWhat the site is about, what mattersNo, voluntary
llms-full.txtLanguage modelsThe full content in one fileNo, optional
schema.org (JSON-LD)BothFacts in unambiguous formNo, works well

The idea behind llms.txt is old and simple: give a visitor in a hurry an overview. Except here the visitor is a language model that has to answer a question and first has to decide which of your pages to read at all.

A website is awkwardly built for that purpose. Navigation, footer, consent dialogue and section headings live in the same HTML as the content, and a model with a limited context window reads all of them. The llms.txt is an attempt to shortcut that.

How it is structured

The structure that has settled has four parts.

  1. A level-one heading with the name of the site.
  2. A blockquote with one sentence on what it is about.
  3. Optionally a few paragraphs of context.
  4. Level-two headings as sections, each holding a list of links with one line of explanation.

The format is deliberately markdown rather than XML or JSON: a language model reads markdown most comfortably anyway, and a human can fix the file by hand if needed.

A complete example

# Steinweg Tax Advisors

> Tax advice for trade businesses with five to fifty staff
> across North Rhine-Westphalia. Fixed monthly fees from
> €290, digital receipts, no paper.

We work exclusively with trades and construction. Building,
electrical, plumbing, roofing. We do not take other sectors
because the specifics differ too much.

## Services

- [Bookkeeping](https://example.com/services/bookkeeping):
  Monthly accounts with digital receipt submission, reports
  by the tenth of the following month.
- [Payroll](https://example.com/services/payroll): Up to 50
  employees, including construction payroll and levy filings.
- [Annual accounts](https://example.com/services/accounts):
  Balance sheet and e-filing, with a review meeting before
  submission.

## About

- [The firm](https://example.com/firm): Nine staff, based in
  Solingen, founded 2004.
- [Pricing](https://example.com/pricing): Monthly fees by
  receipt volume, from €290, worked examples for three sizes.
- [Contact](https://example.com/contact): Phone, email,
  callback within one working day.

## Optional

- [Blog](https://example.com/blog): Articles on trades and
  construction, roughly monthly.

Three things about this example matter more than they look.

The blockquote carries the whole file. It is the one part a model will certainly read in full. If it says „your partner for all tax matters“, the file was wasted. Three lines naming offer, audience and price range are the entire trick.

The line behind each link is not decoration. It decides whether a model opens the page. „Services“ helps nobody, „monthly accounts with digital receipt submission“ does.

The ## Optional section carries special meaning. It marks what a model may drop when it needs to save room. Everything above counts as important.

Where the file belongs

In the root directory, reachable at your-domain.com/llms.txt. Not in a subfolder, not behind a redirect, served as text/plain or text/markdown.

The check is one browser request. If the browser offers the file for download instead of showing it, the content type is wrong. Not fatal, but it looks like an accident.

What it does and does not do

It does two things. It saves a model context: instead of reading five pages to work out what you do, it reads thirty lines. And it sets priorities your navigation cannot express.

It does not do what it is often credited with. It does not improve Google rankings. It does not make you get cited. And it does not replace good copy: a model ends up quoting what is on the page, not what the file claims about the page.

The honest assessment is therefore: llms.txt is the last mile, not the road. Publishing it before the six basic questions are answered in your copy leaves you with a well-organised map of empty terrain. How to check whether your copy holds up is in the AEO guide.

Written yourself in five minutes

  1. Open a text editor and write the heading with your site name.
  2. Write the blockquote: offer, audience, price range. Three lines, no adjectives.
  3. List your five to fifteen most important pages as links, grouped into two to four sections.
  4. Add one line behind each link saying what is there. Concrete, not the menu label.
  5. Save as llms.txt and put it in your root directory.

To skip that, put your address into our llms.txt creator. It reads your real subpages, writes the file and explains every line. Free, no sign-up, in about thirty seconds.

How we do it ourselves

This website generates its llms.txt at build time from its own data. The reason is experience: a hand-maintained file points at dead addresses after the third restructure, and nobody notices because nothing fails.

The same logic sits inside our AI Website Templates. The llms.txt ships with the package, is generated during the build, and therefore stays current even when you add or rename pages.

Frequently asked questions

No. It is a proposal from practice that spread from 2024 onwards and is supported by many tools and some providers. There is no specification obliging anyone to read it. It costs five minutes and cannot break anything.

In the root directory, reachable at your-domain.com/llms.txt, served as text/plain or text/markdown. Not in a subfolder, not behind a redirect.

llms.txt is the map, llms-full.txt is the terrain. The first lists addresses with a line of explanation, the second contains the full text of your important pages in one file. Anyone running documentation should offer both.

No. Google has said several times that the file is not used for search. It addresses assistants that read a website at the moment of the question.

With every change to your site structure, otherwise it points at addresses that no longer exist. Anyone generating it should do so at build time, then it cannot go stale.

Nothing bad. A model then reads your pages the way it reads any website. The file is an advantage, not a prerequisite.

Keep reading