llms.txt: what it is and how to write one
llms.txt is a plain-text file placed at the root of a site that is intended to point AI assistants to a site's most important content in a clean, link-first format. It is an emerging convention, not an adopted web standard, and support across assistants is not guaranteed.
Last updated: 18 May 2026
What llms.txt is
llms.txt is a single plain-text file at the root of a site, reachable at /llms.txt, written in a simple link-first format. Its purpose is to give AI assistants a curated map of the pages that matter most, in plain language, instead of leaving them to infer importance from a full crawl. It is an emerging convention, not a standard ratified by a body such as the W3C or IETF, and no assistant is obliged to read it. Treat it as a low-cost, optional signal, not a guarantee.
What goes in the file
The format is deliberately simple: a level-one heading with the site or project name, a short summary as a blockquote, then sections of links written as Markdown list items with a brief description after each link. Here is an excerpt from XEOscan's own llms.txt as a concrete example:
# XEOscan
> XEOscan is a free tool that scans a website and returns a prioritised,
> severity-weighted report on how ready it is to be read and cited by AI
> assistants and by classic search.
## Core
- [XEOscan home and free scanner](https://xeoscan.ai/): run a free scan
- [Scoring rubric](https://xeoscan.ai/rubric): every check, in plain English
## Learn
- [AI SEO guide](https://xeoscan.ai/ai-seo-guide): the full guide
- [What is GEO](https://xeoscan.ai/what-is-geo): plain definition
Keep entries human-readable, link to canonical URLs, and order sections from most to least important.
Does llms.txt actually do anything yet
Honestly: adoption is uneven and acting on the file is not guaranteed. Some tools and assistants read it, others ignore it, and behaviour can change without notice. Do not build anything that depends on an assistant consuming it. The reason to add one anyway is that it is cheap, the downside is minimal, and it documents your own information architecture clearly. XEOscan treats a present, non-empty llms.txt as a positive signal precisely because it is low-cost and indicates a site that has thought about machine readers.
llms.txt vs robots.txt vs sitemap.xml
These three root files do different jobs and do not replace each other:
- robots.txt tells crawlers what they may and may not fetch. It controls access. See the AI crawlers list for how this applies to AI agents.
- sitemap.xml lists your URLs so crawlers can discover all of them. It controls completeness of discovery.
- llms.txt highlights what matters most, in plain language, for AI readers. It expresses priority, not permission or completeness.
Copy-paste template
Adapt this generic template, replace the placeholders, and save it as llms.txt at your site root:
# Your site or project name
> One or two sentences describing what your site is and what a
> visitor or assistant can do with it.
## Core
- [Home](https://example.com/): what the home page is for
- [Key page](https://example.com/key): why this page matters
## Docs
- [Guide](https://example.com/guide): what this guide covers
## About
- [Contact](https://example.com/contact): how to reach you
How to check yours
XEOscan checks whether your llms.txt is present and non-empty, and when it is missing the report can suggest a starting template. Run a free scan to see whether yours is in place, alongside the rest of your AI readiness.
FAQ
Where do I put llms.txt?
At the root of your site, so it is reachable at the path /llms.txt, the same way robots.txt sits at /robots.txt. It is a single plain-text file.
Is llms.txt required?
No. Nothing breaks without it. It is an optional, low-cost signal, not a requirement, and no assistant is obliged to read or act on it.
Is llms.txt a standard?
No. It is an emerging convention, not an adopted web standard from a body such as the W3C or IETF, and support across AI assistants is uneven and not guaranteed.
Published by XEOscan, a free tool operated by Constantin Ungureanu.
← Back to the scanner