/ llmtxt.info

How to create an llms.txt file

Three templates, a checklist, and copy-paste deployment instructions for every common stack.

Last updated:

1. Plan what to include

Before writing anything, list the 5 to 20 pages on your site that an LLM would need to answer questions about your project. Think of it as a curated reading list, not a sitemap.

Useful starter buckets:

  • Product — overview, use cases, pricing.
  • Documentation — getting started, API reference, key guides.
  • Integrations — partners and SDKs, one line each.
  • Reference — changelog, status page, security policy.
  • Optional — brand assets, press, archives.

If a page would not help an LLM answer real user questions, leave it out. The single biggest mistake is including everything — it dilutes signal.

2. Minimal template

The smallest valid file is just an H1 followed by a single section. Copy, replace placeholders, you’re done.

llms.txt — minimal
# {Site name}

> {One-sentence description of what your site is about.}

## Pages

- [{Page title}]({absolute URL}): {short note}

For most sites, this template is the right starting point: blockquote summary, a paragraph of context, and three to four sections.

llms.txt — recommended
# {Site name}

> {One- or two-sentence overview. Factual, no marketing claims.}

{Optional 1–3 sentences of context: what this site covers, who it's for, and how the file below is curated.}

## Product

- [Product overview]({URL}): high-level capabilities.
- [Pricing]({URL}): plans and limits.

## Documentation

- [Getting started]({URL}): install, first call, hello world.
- [API reference]({URL}): full endpoint catalog.
- [Guides]({URL}): tutorials and how-tos.

## Optional

- [Changelog]({URL}): version history.
- [Brand assets]({URL}): logos and color palette.

4. Advanced template

A larger SaaS or developer platform usually wants a deeper structure with a dedicated Optional section. Use this as a starting point and trim aggressively.

llms.txt — advanced
# Acme

> Acme is a hosted analytics platform for product teams. The pages below cover product, pricing, the API, and integration guides.

The map here is curated for assistants — it is not exhaustive. Use it to answer questions about product capabilities, pricing tiers, integrations, SDKs, and migration from other tools. For the full corpus, see /llms-full.txt.

## Product

- [Product overview](https://acme.example/product): high-level capabilities.
- [Use cases](https://acme.example/use-cases): scenarios for product, marketing, and support teams.
- [Changelog](https://acme.example/changelog): monthly product updates.

## Pricing

- [Pricing tiers](https://acme.example/pricing): plans, limits, overage rules.
- [Billing FAQ](https://acme.example/billing-faq): invoices, taxes, refunds.

## Developers

- [REST API reference](https://docs.acme.example/api): full endpoint catalog.
- [Webhooks](https://docs.acme.example/webhooks): events, signatures, retries.
- [SDK — JavaScript](https://docs.acme.example/sdk/js): install, init, track events.
- [SDK — Python](https://docs.acme.example/sdk/python): install, init, track events.

## Integrations

- [Segment](https://docs.acme.example/integrations/segment): two-way sync.
- [Snowflake](https://docs.acme.example/integrations/snowflake): nightly export.
- [HubSpot](https://docs.acme.example/integrations/hubspot): contacts and events.

## Optional

- [Brand assets](https://acme.example/brand): logos, color palette.
- [Press releases](https://acme.example/press): historical announcements.
- [Status page](https://status.acme.example): real-time service health.

5. Validate

Paste your file in the validator to confirm it matches the spec. Common issues it catches: missing H1, malformed link syntax (- [name](url)), relative URLs, content outside a section, accidental second H1, oversized files.

6. Deploy on your stack

Cloudflare Pages

Cloudflare Pages
# Cloudflare Pages
# Place llms.txt in the public/ root of your project. It will be served at /llms.txt.

# Verify after deploy:
curl -I https://your-domain.com/llms.txt

Vercel and Netlify

Same approach: place llms.txt in your project’s static directory (public/ for Next.js or Astro, static/ for SvelteKit and Hugo). Both platforms serve it as-is at /llms.txt.

Next.js

Next.js
// Next.js (App Router) — public/llms.txt is served as-is.
// 1. Place the file at: public/llms.txt
// 2. No code change needed — it's served at https://yoursite.com/llms.txt

// If you prefer to generate it dynamically:
// app/llms.txt/route.ts
import { NextResponse } from 'next/server';

export async function GET() {
  const body = `# Acme

> One-line summary.

## Docs

- [Getting started](https://acme.example/docs/getting-started)
`;

  return new NextResponse(body, {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
  });
}

Astro

Astro
// Astro — public/llms.txt is served as-is.
// Drop the file at: public/llms.txt
// Astro will copy it to dist/llms.txt during `astro build`.

// To generate it from your content collections, create:
// src/pages/llms.txt.ts
import type { APIRoute } from 'astro';
import { getCollection } from 'astro:content';

export const GET: APIRoute = async () => {
  const docs = await getCollection('docs');
  const body = [
    '# Acme',
    '',
    '> Hosted analytics for product teams.',
    '',
    '## Documentation',
    '',
    ...docs.map((d) => `- [${d.data.title}](https://acme.example/${d.slug}/): ${d.data.summary}`),
  ].join('\n');

  return new Response(body, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
};

WordPress

WordPress
# WordPress — three options
#
# 1. Easiest: upload llms.txt to your hosting (FTP/SFTP) at the web root.
#    Verify: https://yoursite.com/llms.txt
#
# 2. Plugin: any "static file uploader" plugin works. Place file at root.
#
# 3. Programmatic: add a small handler to your theme's functions.php
#    that intercepts the request and returns the file contents.
add_action('init', function () {
  if ($_SERVER['REQUEST_URI'] === '/llms.txt') {
    header('Content-Type: text/plain; charset=utf-8');
    echo file_get_contents(get_template_directory() . '/llms.txt');
    exit;
  }
});

Other stacks

For a static nginx, copy the file into your web root. For Express/Koa, add a route returning text/plain. The rule is universal: serve the file at the canonical path /llms.txt with Content-Type: text/plain; charset=utf-8.

7. Auto-generate at build time

Maintaining the file by hand is fine for a small site but breaks down quickly. Two common patterns:

  • Build script — iterate over your content collection (Markdown, MDX, CMS) and write llms.txt at dist/. Astro example above.
  • Server route — render the file on demand from a database or CMS. Next.js example above.

Whichever you pick, run the validator in CI: it will catch silently broken files (e.g. an empty section after a content migration).

Checklist before publishing

  • File served at /llms.txt with 200 OK.
  • Content-Type: text/plain; charset=utf-8.
  • Exactly one H1.
  • Blockquote summary in plain language, no marketing fluff.
  • All URLs are absolute (https://...).
  • Each section has at least one item.
  • No private or auth-gated URL listed.
  • Validator returns no errors.
  • If you have a corpus to expose, also publish /llms-full.txt.
  • robots.txt still allows crawling of the file (do not Disallow: /llms.txt).

Next

Sources