llms.txt Generation · Nuxt AI Ready · Nuxt SEO

[NuxtSEO Pro](https://nuxtseo.com/ "Home")

- [Modules](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Tools](https://nuxtseo.com/tools)
- [Pro](https://nuxtseo.com/pro)
- [Learn SEO](https://nuxtseo.com/learn-seo/nuxt) [Releases](https://nuxtseo.com/releases)

[Sign In](https://nuxtseo.com/auth/github)

[Nuxt SEO on GitHub](https://github.com/harlan-zw/nuxt-seo)

[User Guides](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

[API](https://nuxtseo.com/docs/ai-ready/api/config)

[Releases](https://nuxtseo.com/docs/ai-ready/releases/v1)

AI Ready

- [Switch to AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)
- [Switch to Nuxt SEO](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Switch to Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Switch to Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [Switch to OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Switch to Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Switch to Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [Switch to SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Switch to Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Switch to Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)

Search…```k`` /`

v1.1.2

- [Discord Support](https://discord.com/invite/275MBUBvgP)

### Getting Started

- [Introduction](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)
- [Installation](https://nuxtseo.com/docs/ai-ready/getting-started/installation)

### Core Concepts

- [AI Content Signals](https://nuxtseo.com/docs/ai-ready/guides/content-signals)
- [llms.txt Generation](https://nuxtseo.com/docs/ai-ready/guides/llms-txt)
- [Markdown Conversion](https://nuxtseo.com/docs/ai-ready/guides/markdown)
- [Model Context Protocol (MCP)](https://nuxtseo.com/docs/ai-ready/guides/mcp)
- [Runtime Sync (Optional)](https://nuxtseo.com/docs/ai-ready/guides/runtime-indexing)
- [Cloudflare Deployment](https://nuxtseo.com/docs/ai-ready/guides/cloudflare)
- [IndexNow](https://nuxtseo.com/docs/ai-ready/guides/indexnow)
- [CLI](https://nuxtseo.com/docs/ai-ready/guides/cli)

### Advanced

- [RAG Setup](https://nuxtseo.com/docs/ai-ready/advanced/rag-example)

Core Concepts

# llms.txt Generation

[Copy for LLMs](https://nuxtseo.com/docs/ai-ready/guides/llms-txt.md)

Nuxt AI Ready generates `/llms.txt` and `/llms-full.txt` during prerender following the [llms.txt standard](https://llmstxt.org/).

## [`/llms.txt`](#llmstxt)

Site overview with page links. Built from page metadata collected during prerender.

Live example: [nuxtseo.com/llms.txt](https://nuxtseo.com/llms.txt)

```
# <Site Title>

> <Site Description>

## Pages

- [Page Title](/page-link): Meta Description
  ...

## <Section Title>

- [Link Title](/link): Description
  ...

<Notes>
```

### [Configuration](#configuration)

Add custom sections:

nuxt.config.ts

```
export default defineNuxtConfig({
  aiReady: {
    llmsTxt: {
      sections: [
        {
          title: 'API Reference',
          links: [
            { title: 'REST API', href: '/docs/api', description: 'API documentation' }
          ]
        }
      ],
      notes: 'Built with Nuxt AI Ready'
    }
  }
})
```

Full config: [Configuration](https://nuxtseo.com/docs/ai-ready/api/config)

### [Hook](#hook)

Modify sections before generation:

nuxt.config.ts

```
export default defineNuxtConfig({
  hooks: {
    'ai-ready:llms-txt': (payload) => {
      payload.sections.push({
        title: 'Custom APIs',
        links: [{ title: 'Search', href: '/api/search', description: 'Search endpoint' }]
      })
      payload.notes.push('Custom note')
    }
  }
})
```

Hook details: [Nuxt Hooks](https://nuxtseo.com/docs/ai-ready/api/nuxt-hooks#ai-ready-llms-txt)

## [`/llms-full.txt`](#llms-fulltxt)

Full markdown content for all pages. Streamed during prerender - each page appended as processed, no memory accumulation.

Auto-generated from prerendered pages. Hook `ai-ready:page:markdown` fires per page if you need to modify content:

nuxt.config.ts

```
export default defineNuxtConfig({
  hooks: {
    'ai-ready:page:markdown': (ctx) => {
      // ctx: { route, markdown, title, description }
      ctx.markdown = \`# ${ctx.title}\n\n${ctx.markdown}\`
    }
  }
})
```

## [Page Discovery](#page-discovery)

Page discovery uses a two-phase approach combining prerendering and sitemap crawling.

### [Phase 1: Prerender Crawl](#phase-1-prerender-crawl)

During `nuxi generate`, the module intercepts each prerendered page:

1. Nuxt plugin queues `.md` route for each rendered page
2. Middleware converts HTML → markdown with metadata extraction
3. `ai-ready:page:markdown` hook fires for each page
4. Data appended to `page-data.jsonl` + streamed to `llms-full.txt`

Prerendered pages have full metadata (title, description, headings).

### [Phase 2: Sitemap Crawl](#phase-2-sitemap-crawl)

After prerendering completes, the module crawls `/sitemap.xml` for any pages not already processed:

- Uses `sitemap:prerender:done` hook if `@nuxtjs/sitemap` exists
- Falls back to `prerender:done` hook otherwise
- Fetches `.md` for each sitemap URL not in prerender set
- Adds to `page-data.jsonl` but **skips** `llms-full.txt` (prevents duplicates)

This catches SSR-only pages that weren't prerendered.

### [Runtime Fallback](#runtime-fallback)

In SSR-only mode (no prerendering), llms.txt dynamically fetches `/sitemap.xml` and lists URLs without titles.

```
Phase 1 (Prerender)     Phase 2 (Sitemap)       Runtime
─────────────────────   ─────────────────────   ─────────────────────
app:rendered            sitemap:prerender:done  GET /llms.txt
    ↓                       ↓                       ↓
Queue .md routes        Parse sitemap.xml       fetchSitemapUrls()
    ↓                       ↓                       ↓
HTML → Markdown         Fetch .md for SSR       Combine prerendered
    ↓                   pages                   + sitemap URLs
Write JSONL +               ↓                       ↓
llms-full.txt           Add to JSONL only       Generate llms.txt
```

## [Customizing Page Processing](#customizing-page-processing)

### [Filter or Modify Pages](#filter-or-modify-pages)

Use the `ai-ready:page:markdown` hook to modify or filter pages during prerender:

nuxt.config.ts

```
export default defineNuxtConfig({
  hooks: {
    'ai-ready:page:markdown': (ctx) => {
      // Skip draft pages
      if (ctx.route.startsWith('/drafts/')) {
        ctx.markdown = '' // Empty markdown = excluded from llms-full.txt
        return
      }

      // Add frontmatter
      ctx.markdown = \`---
route: ${ctx.route}
title: ${ctx.title}
---

${ctx.markdown}\`
    }
  }
})
```

Context properties:

- `route`: Page path (e.g., `/about`)
- `markdown`: Converted content (mutable)
- `title`: Extracted `<title>`
- `description`: Extracted meta description
- `headings`: Array of `{ level, text }` objects

### [Modify Markdown Conversion](#modify-markdown-conversion)

Use the `ai-ready:mdreamConfig` Nitro hook to customize HTML → markdown:

server/plugins/mdream.ts

```
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('ai-ready:mdreamConfig', (config) => {
    // Skip navigation elements
    config.ignoreSelectors = ['nav', '.sidebar', '.footer']

    // Preserve code blocks
    config.preserveCodeBlocks = true
  })
})
```

### [Post-Process Markdown at Runtime](#post-process-markdown-at-runtime)

Use the `ai-ready:page:markdown` Nitro hook for runtime `.md` requests:

server/plugins/markdown.ts

```
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('ai-ready:page:markdown', (ctx) => {
    // Add source link
    ctx.markdown += \`\n\n---\nSource: ${ctx.route}\`
  })
})
```

## [Sitemap Requirements](#sitemap-requirements)

The module requires `@nuxtjs/sitemap` for page discovery:

nuxt.config.ts

```
export default defineNuxtConfig({
  modules: ['@nuxtjs/sitemap', 'nuxt-ai-ready']
})
```

If sitemap is missing or empty, llms.txt will have an empty pages section with a warning logged.

### [Excluding Pages](#excluding-pages)

Pages excluded from sitemap are automatically excluded from llms.txt. Use sitemap's `exclude` option:

nuxt.config.ts

```
export default defineNuxtConfig({
  sitemap: {
    exclude: ['/admin/**', '/api/**', '/drafts/**']
  }
})
```

## [Dev Mode](#dev-mode)

In development, llms.txt returns a notice about missing data. Page data is only available after `nuxi generate` or `nuxi build --prerender`.

Runtime `.md` routes still work in dev for testing markdown conversion.

[Edit this page](https://github.com/nuxt-seo-pro/nuxt-ai-ready/edit/main/docs/content/2.guides/0.llms-txt.md)

[Markdown For LLMs](https://nuxtseo.com/docs/ai-ready/guides/llms-txt.md)

Did this page help you?

### Related

[Content Signals](https://nuxtseo.com/docs/ai-ready/guides/content-signals) [Nuxt Hooks](https://nuxtseo.com/docs/ai-ready/api/nuxt-hooks) [Configuration](https://nuxtseo.com/docs/ai-ready/api/config)

[AI Content Signals Control how AI systems interact with your content through robots.txt directives.](https://nuxtseo.com/docs/ai-ready/guides/content-signals) [Markdown Conversion How HTML pages are converted to markdown for AI-friendly content delivery.](https://nuxtseo.com/docs/ai-ready/guides/markdown)

On this page

- [/llms.txt](#llmstxt)
- [/llms-full.txt](#llms-fulltxt)
- [Page Discovery](#page-discovery)
- [Customizing Page Processing](#customizing-page-processing)
- [Sitemap Requirements](#sitemap-requirements)
- [Dev Mode](#dev-mode)

[GitHub](https://github.com/harlan-zw/nuxt-seo) [ Discord](https://discord.com/invite/275MBUBvgP)

### [NuxtSEO](https://nuxtseo.com/ "Home")

- [Getting Started](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [MCP](https://nuxtseo.com/docs/nuxt-seo/guides/mcp)

Modules

- [Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)
- [AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

### [NuxtSEO Pro](https://nuxtseo.com/pro "Nuxt SEO Pro")

- [Getting Started](https://nuxtseo.com/pro)
- [Dashboard](https://nuxtseo.com/pro/dashboard)
- [Pro MCP](https://nuxtseo.com/pro/docs/getting-started/mcp-setup)

### [Learn SEO](https://nuxtseo.com/learn-seo "Learn SEO")

Nuxt

- [Mastering Meta](https://nuxtseo.com/learn-seo/nuxt/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers)
- [Launch & Listen](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen)
- [Routes & Rendering](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering)
- [Staying Secure](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/security)

Vue

- [Vue SEO Guide](https://nuxtseo.com/learn-seo/vue)
- [Mastering Meta](https://nuxtseo.com/learn-seo/vue/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/vue/controlling-crawlers)
- [SPA SEO](https://nuxtseo.com/learn-seo/vue/spa)
- [SSR Frameworks](https://nuxtseo.com/learn-seo/vue/ssr-frameworks)
- [SEO Checklist](https://nuxtseo.com/learn-seo/checklist)
- [Pre-Launch Warmup](https://nuxtseo.com/learn-seo/pre-launch-warmup)
- [Backlinks & Authority](https://nuxtseo.com/learn-seo/backlinks)

### [Tools](https://nuxtseo.com/tools "SEO Tools")

- [Social Share Debugger](https://nuxtseo.com/tools/social-share-debugger)
- [Robots.txt Generator](https://nuxtseo.com/tools/robots-txt-generator)
- [Meta Tag Checker](https://nuxtseo.com/tools/meta-tag-checker)
- [HTML to Markdown](https://nuxtseo.com/tools/html-to-markdown)
- [XML Sitemap Validator](https://nuxtseo.com/tools/xml-sitemap-validator)
- [Schema.org Validator](https://nuxtseo.com/tools/schema-validator)
- [Keyword Idea Generator](https://nuxtseo.com/tools/keyword-generator)
- [Keyword Research](https://nuxtseo.com/tools/keyword-research)
- [SERP Analyzer](https://nuxtseo.com/tools/serp-analyzer)
- [Domain Rankings](https://nuxtseo.com/tools/domain-rankings)

Copyright © 2023-2026 Harlan Wilton - [MIT License](https://github.com/harlan-zw/nuxt-seo/blob/main/license) · [mdream](https://mdream.dev)