llms.txt vs llms-full.txt: when to use which
Two adjacent conventions are gaining traction for AI-readable sites. They are easy to confuse because the names are almost identical, but they exist for different reasons. Pick the wrong one and you either over-share or under-deliver. Here is the practical breakdown.
llms.txt is an index
/llms.txt is a small markdown document that points an agent at the canonical entry points of your site. Think of it as a sitemap with prose: a short site description, then a curated list of important URLs grouped by purpose, each with a one-line summary.
Typical size: 1 to 5 KB. Typical scope: under 50 links.
A minimal example:
# Acme Docs
> Developer documentation for Acme's REST API.
Acme is a payments platform. The links below give an agent a complete map
of the public API and supporting docs.
## Core
- [Getting Started](https://acme.com/docs/start): install and first request
- [Authentication](https://acme.com/docs/auth): API key and OAuth flows
## Reference
- [API Reference](https://acme.com/docs/api): endpoints and schemas
- [Webhooks](https://acme.com/docs/webhooks): event types and signing
## Optional
- [Changelog](https://acme.com/changelog): release notesllms.txt is for agents that need to discover what your site offers without crawling everything. It is a navigation aid.
llms-full.txt is the content
/llms-full.txt is a single file that embeds the full content of your most important pages so an agent can ingest your site in one fetch.
Typical size: 10 KB to a few MB. Typical scope: everything an agent might want to quote.
It is structured as concatenated markdown sections separated by horizontal rules:
# Acme Docs
> Full content bundle for AI ingestion.
---
## Getting Started
Install the package:
`npm install @acme/sdk`
Then call:
`import { client } from "@acme/sdk";`
`const result = await client.charges.create({...});`
---
## Authentication
The API supports two methods. The recommended path is OAuth 2.0...llms-full.txt is for agents that need to answer questions about your site without making N additional fetches.
When to use which
| Goal | File | Why |
|---|---|---|
| Help agents find your most important pages | llms.txt | Compact index with one-line summaries |
| Let agents quote your docs accurately in answers | llms-full.txt | Full content available in a single fetch |
| Both | Publish both | They are complementary, not alternatives |
If you only have time for one, start with llms.txt. It is small, low-effort, and useful immediately. Add llms-full.txt later when you have stable canonical content worth bundling.
Adoption check
A May 2026 crawl of the Tranco Top 10,000 found ~5.86% adoption for llms.txt and ~1.03% for llms-full.txt. Both numbers are small, but the curve is up and to the right, and adoption skews heavily toward developer-tooling and documentation sites.
Deploying both on Next.js
Two route handlers and you are done.
// app/llms.txt/route.ts
import { NextResponse } from "next/server";
const BODY = `# Your Site\n\n> Tagline.\n\n## Core\n\n- ...\n`;
export async function GET() {
return new NextResponse(BODY, {
status: 200,
headers: {
"content-type": "text/plain; charset=utf-8",
"cache-control": "public, max-age=3600",
},
});
}// app/llms-full.txt/route.ts
import { NextResponse } from "next/server";
const BODY = `# Your Site\n\n---\n\n## Section A\n\nBody...\n`;
export async function GET() {
return new NextResponse(BODY, {
status: 200,
headers: {
"content-type": "text/markdown; charset=utf-8",
"cache-control": "public, max-age=900",
},
});
}Then advertise both from your homepage with a Link header:
Link: </llms.txt>; rel="describedby"; type="text/plain",
</llms-full.txt>; rel="describedby"; type="text/markdown"Common mistakes
- Treating llms-full.txt as a database dump. Quality beats coverage. A clean 50 KB bundle of canonical docs beats a 5 MB bundle of every page on the site.
- Forgetting to update them. Both files should be regenerated on the same deploy that ships content changes. If they drift, agents will quote stale content.
- Pointing to URLs that 404. Every URL in llms.txt must resolve. Run a link checker on it as part of CI.
Build them with our tools
We ship browser-side generators for both: the llms.txt Generator for the index format and the llms-full.txt Generator for the deep-content bundle. Both produce drop-in markdown and copy-paste prompts for your coding agent.