Skip to main content
Technology & EngineeringLlm Optimization278 lines

llms.txt Standard Implementation

The llms.txt standard was created by Jeremy Howard (Answer.AI) and published on September 3, 2024. It defines a plain-text Markdown file served at `/llms.txt` that provides a concise, human-curated ma

Quick Summary29 lines
The llms.txt standard was created by Jeremy Howard (Answer.AI) and published on September 3, 2024. It defines a plain-text Markdown file served at `/llms.txt` that provides a concise, human-curated map of a site's most important resources for LLM consumption.

## Key Points

- **Specification URL**: https://llmstxt.org/
- **Adoption**: Over 844,000 websites implemented as of October 2025 (BuiltWith); 10.13% adoption across 300k domains (SE Ranking)
- **Notable adopters**: Anthropic (Claude docs), Cloudflare, Stripe, Mintlify, GitBook
- **Platform support**: Mintlify, GitBook, and Webflow have built native llms.txt generation into their platforms
- Free tier: up to 100 skills
- Pro tier: unlimited skills, priority indexing
- Enterprise: custom deployment, SSO, audit logs
- [Link Title](https://url): Optional description notes
- [Another Link](https://url): Description
- [Changelog](https://example.com/changelog): Version history
- [Contributing](https://example.com/contributing): How to contribute
- Pricing: Free up to 10M events/month, Growth at $99/mo, Enterprise custom

## Quick Example

```markdown
# Your Project Name
```

```markdown
> ProjectName is a platform that does X. It provides Y for Z users.
> Key capabilities include A, B, and C.
```
skilldb get llm-optimization-skills/llms.txt Standard ImplementationFull skill: 278 lines
Paste into your CLAUDE.md or agent config

llms.txt Standard Implementation

Specification Overview

The llms.txt standard was created by Jeremy Howard (Answer.AI) and published on September 3, 2024. It defines a plain-text Markdown file served at /llms.txt that provides a concise, human-curated map of a site's most important resources for LLM consumption.

  • Specification URL: https://llmstxt.org/
  • Adoption: Over 844,000 websites implemented as of October 2025 (BuiltWith); 10.13% adoption across 300k domains (SE Ranking)
  • Notable adopters: Anthropic (Claude docs), Cloudflare, Stripe, Mintlify, GitBook
  • Platform support: Mintlify, GitBook, and Webflow have built native llms.txt generation into their platforms

File Format Specification

The llms.txt file uses Markdown format with these sections in strict order:

1. H1 Title (REQUIRED)

The name of the project or site. This is the only required element.

# Your Project Name

2. Blockquote (Optional)

A short summary with key information about the project. Should be concise enough for an LLM to understand what the site is about.

> ProjectName is a platform that does X. It provides Y for Z users.
> Key capabilities include A, B, and C.

3. Markdown Sections (Optional)

Paragraphs and lists (no headings) providing detailed information about the project. This section uses standard Markdown but should NOT include any heading elements.

The platform supports three deployment modes: cloud, hybrid, and on-premise.
Skills are organized into packs and can be installed via CLI or API.

- Free tier: up to 100 skills
- Pro tier: unlimited skills, priority indexing
- Enterprise: custom deployment, SSO, audit logs

4. H2-Delimited File Lists (Optional)

Curated URLs to important resources, organized by category using H2 headings. Each URL entry follows this exact format:

## Section Name

- [Link Title](https://url): Optional description notes
- [Another Link](https://url): Description

5. "Optional" Section (Special)

A section titled exactly "Optional" containing URLs that can be skipped when a shorter context is needed. LLMs with limited context windows can ignore this section.

## Optional

- [Changelog](https://example.com/changelog): Version history
- [Contributing](https://example.com/contributing): How to contribute

Full Example llms.txt for a SaaS Product

# Acme Analytics

> Acme Analytics is a real-time analytics platform for SaaS companies.
> It provides event tracking, funnel analysis, and cohort reporting
> with sub-second query times on petabyte-scale datasets.

Acme Analytics ingests events via a lightweight SDK (JavaScript, Python,
Go, Ruby) or server-side API. Events are stored in a columnar database
optimized for analytical queries. The platform supports SQL queries,
a visual query builder, and a dashboard system.

- Pricing: Free up to 10M events/month, Growth at $99/mo, Enterprise custom
- Deployment: Cloud (US, EU, APAC regions) or self-hosted
- Compliance: SOC 2 Type II, GDPR, HIPAA

## Documentation

- [Getting Started](https://acme.dev/docs/quickstart): 5-minute integration guide
- [SDK Reference](https://acme.dev/docs/sdk): JavaScript, Python, Go, Ruby SDKs
- [API Reference](https://acme.dev/docs/api): REST API for event ingestion and querying
- [SQL Reference](https://acme.dev/docs/sql): Custom SQL query syntax and functions
- [Dashboard Guide](https://acme.dev/docs/dashboards): Creating and sharing dashboards

## Use Cases

- [Funnel Analysis](https://acme.dev/solutions/funnels): Conversion tracking and optimization
- [Cohort Retention](https://acme.dev/solutions/cohorts): User retention analysis
- [A/B Testing](https://acme.dev/solutions/experiments): Experiment analysis and statistical significance
- [Revenue Analytics](https://acme.dev/solutions/revenue): MRR, churn, and LTV tracking

## Resources

- [Blog](https://acme.dev/blog): Technical articles and product updates
- [Status Page](https://status.acme.dev): System uptime and incident reports
- [Security](https://acme.dev/security): Security practices and compliance certifications

## Optional

- [Changelog](https://acme.dev/changelog): Release notes and version history
- [Community Forum](https://community.acme.dev): User discussions and feature requests
- [Brand Assets](https://acme.dev/brand): Logos and media kit

Companion Files

llms-full.txt

An expanded version of llms.txt that includes the full content of all referenced documentation in a single Markdown file. This allows LLMs to load comprehensive documentation in one request.

Structure: Same H1/H2 structure as llms.txt, but each link is followed by the full content of that page.

Page-Level .md Files

Clean Markdown versions of individual pages served at the same URL with .md appended:

https://example.com/docs/api        -> HTML page
https://example.com/docs/api.md     -> Markdown version

This gives LLMs a clean, parseable version of any page without HTML noise.

Next.js Implementation

Static llms.txt (in public/ directory)

The simplest approach — place a static file at public/llms.txt:

your-project/
  public/
    llms.txt          # Main file
    llms-full.txt     # Expanded version

This file is served automatically at https://yourdomain.com/llms.txt.

Dynamic Route (App Router)

For sites where content changes frequently, generate llms.txt dynamically:

// app/llms.txt/route.ts
import { NextResponse } from 'next/server';
import { allDocs } from '@/lib/content';

export async function GET() {
  const docs = allDocs
    .filter(doc => doc.published)
    .sort((a, b) => a.order - b.order);

  const sections = {
    Documentation: docs.filter(d => d.category === 'docs'),
    Guides: docs.filter(d => d.category === 'guides'),
    API: docs.filter(d => d.category === 'api'),
  };

  let content = '# YourProject\n\n';
  content += '> YourProject is a platform that does X for Y users.\n';
  content += '> It provides A, B, and C capabilities.\n\n';
  content += 'YourProject supports deployment via CLI, API, or web dashboard.\n\n';

  for (const [sectionName, sectionDocs] of Object.entries(sections)) {
    if (sectionDocs.length === 0) continue;
    content += `## ${sectionName}\n\n`;
    for (const doc of sectionDocs) {
      const url = `https://yourdomain.com${doc.slug}`;
      content += `- [${doc.title}](${url}): ${doc.description}\n`;
    }
    content += '\n';
  }

  content += '## Optional\n\n';
  content += '- [Changelog](https://yourdomain.com/changelog): Version history\n';
  content += '- [Contributing](https://yourdomain.com/contributing): How to contribute\n';

  return new NextResponse(content, {
    headers: {
      'Content-Type': 'text/plain; charset=utf-8',
      'Cache-Control': 'public, max-age=86400, s-maxage=86400',
    },
  });
}

llms-full.txt Dynamic Route

// app/llms-full.txt/route.ts
import { NextResponse } from 'next/server';
import { allDocs } from '@/lib/content';

export async function GET() {
  const docs = allDocs
    .filter(doc => doc.published)
    .sort((a, b) => a.order - b.order);

  let content = '# YourProject — Full Documentation\n\n';
  content += '> Complete documentation for YourProject.\n\n';

  for (const doc of docs) {
    const url = `https://yourdomain.com${doc.slug}`;
    content += `## ${doc.title}\n\n`;
    content += `Source: ${url}\n\n`;
    content += doc.body + '\n\n';
    content += '---\n\n';
  }

  return new NextResponse(content, {
    headers: {
      'Content-Type': 'text/plain; charset=utf-8',
      'Cache-Control': 'public, max-age=86400, s-maxage=86400',
    },
  });
}

HTML Head Reference Link

Add a reference to llms.txt in your HTML <head> so crawlers can discover it:

<link rel="alternate" type="text/plain" href="/llms.txt" title="LLM-friendly site description" />

In Next.js App Router (layout.tsx):

export const metadata: Metadata = {
  alternates: {
    types: {
      'text/plain': '/llms.txt',
    },
  },
};

Writing Guidelines

  1. Be concise: The file should fit in a small context window. Keep descriptions to one line per link.
  2. Curate aggressively: Only include your most important pages. The "Optional" section exists for nice-to-haves.
  3. Use clear link titles: Titles should be self-explanatory without reading the description.
  4. Write useful descriptions: Each : description should tell the LLM when to follow that link.
  5. Keep it current: Update llms.txt when you add, remove, or reorganize important content.
  6. Order matters: Put your most important resources first within each section.
  7. Avoid marketing language: Write for machines, not humans. Be factual and direct.
  8. Include the blockquote: The blockquote gives LLMs the fastest possible understanding of your site.

Current Status

The honest truth about llms.txt:

  • No major AI platform has officially confirmed they read llms.txt files
  • Google's Gary Illyes stated in July 2025 that Google "doesn't support llms.txt and isn't planning to"
  • However, the file is trivially cheap to implement
  • It follows the "can't hurt, might help" principle
  • Multiple documentation platforms have built native support
  • The standard is gaining momentum regardless of official confirmation
  • It provides clear value for any RAG system that does choose to use it
  • Over 844,000 sites have implemented it — the de facto standard is emerging through adoption

Bottom line: Implement it. The cost is near-zero and the potential upside is meaningful. Even if current AI platforms don't read it today, the trajectory of adoption suggests they will eventually.

Install this skill directly: skilldb add llm-optimization-skills

Get CLI access →