llms.txt для Nuxt.js

Для Nuxt.js есть три подхода: статический файл в public/ (без настройки), маршрут сервера Nitro для динамической генерации или автоматическая генерация из документов Nuxt Content.

Последнее обновление:

Вариант 1: статический файл в public/

Nuxt копирует всё из public/ каталог непосредственно в результат сборки, откуда он будет доступен в корне сайта. Разместите файл по адресу public/llms.txt и он будет доступен по адресу /llms.txt для каждой цели развёртывания.

public/llms.txt, directory structure
# Nuxt static file approach
#
# Place your file at: public/llms.txt
# Nuxt copies everything in public/ directly to the build output.
#
# Project structure:
# your-nuxt-app/
# ├── public/
# │   └── llms.txt   ← add this
# ├── pages/
# └── nuxt.config.ts
#
# No configuration needed. Works with all deployment presets.

Этот подход не требует настройки и одинаково работает во всех пресетах Nitro: node-server, cloudflare-pages, vercel, netlify, и статический.

Вариант 2: серверный API-маршрут

Создайте файл по адресу server/routes/llms.txt.ts. Движок Nitro в Nuxt сопоставляет файлы в server/routes/ напрямую к путям URL, поэтому этот файл отдаётся ровно по адресу /llms.txt без дополнительной настройки маршрутизации.

server/routes/llms.txt.ts
// server/routes/llms.txt.ts
// Nuxt server route, served at /llms.txt
export default defineEventHandler(() => {
  const content = `# Your Site

> One-sentence description of what your site or product does.

## Documentation

- [Getting Started](https://yoursite.com/docs/start): Install and configure in minutes.
- [API Reference](https://yoursite.com/docs/api): Full endpoint catalog with examples.

## Product

- [Overview](https://yoursite.com/product): Core features and capabilities.
- [Pricing](https://yoursite.com/pricing): Plans and billing details.

## Optional

- [Changelog](https://yoursite.com/changelog): Release history.
- [GitHub](https://github.com/your-org/your-repo): Source code.
`;

  setResponseHeader(event, 'Content-Type', 'text/plain; charset=utf-8');
  setResponseHeader(event, 'Cache-Control', 'public, max-age=3600, stale-while-revalidate=86400');
  return content;
});

Используйте setResponseHeader из h3 библиотеку (встроенную в Nuxt), чтобы задать правильный Content-Type. Добавьте a Cache-Control заголовок, чтобы узлы CDN кэшировали ответ и снижали нагрузку на источник.

Вариант 3: автоматическая генерация Nuxt Content

Если вы используете Nuxt Content для документации можно запросить коллекцию контента и автоматически построить список ссылок. Это гарантирует, что llms.txt остаётся синхронизированным с документацией без ручных обновлений.

server/routes/llms.txt.ts, Nuxt Content
// server/routes/llms.txt.ts
// Auto-generate llms.txt from Nuxt Content documents
import { serverQueryContent } from '#content/server';

export default defineEventHandler(async (event) => {
  // Query all docs; adjust collection name as needed
  const docs = await serverQueryContent(event, '/docs')
    .only(['title', 'description', '_path'])
    .find();

  const links = docs
    .map((doc) => `- [${doc.title}](https://yoursite.com${doc._path}/): ${doc.description ?? ''}`)
    .join('\n');

  const body = [
    '# Your Site',
    '',
    '> One-sentence description of your project.',
    '',
    '## Documentation',
    '',
    links,
  ].join('\n');

  setResponseHeader(event, 'Content-Type', 'text/plain; charset=utf-8');
  return body;
});

Скорректируйте путь запроса (/docs) и имена полей в соответствии со структурой вашего контента. Запустите команду валидатор после деплоев, чтобы выявлять регрессии форматирования.

Nitro и цели развёртывания

  • node-server, серверные маршруты выполняются как HTTP-обработчик Node.js. Добавьте правило кеширования обратного прокси (nginx/Caddy) для /llms.txt чтобы не обращаться к Node при каждом запросе.
  • cloudflare-pages, статические файлы в public/ публикуются через глобальную CDN Cloudflare. Серверные маршруты становятся Pages Functions. См. Руководство по Cloudflare для заголовков кеширования.
  • vercel, статические файлы автоматически кешируются на Edge. Серверные маршруты становятся бессерверными или Edge Functions Vercel в зависимости от конфигурации.
  • статический (полностью предварительно отрендеренный), используйте public/ подход со статическим файлом; серверные маршруты недоступны при полностью статическом выводе.

Проверить

После развёртывания убедитесь, что файл обслуживается корректно:

Verification
curl -I https://yoursite.com/llms.txt
# Expected:
# HTTP/2 200
# content-type: text/plain; charset=utf-8

curl https://yoursite.com/llms.txt | head -5
# Should print the first lines of your file

Связанные руководства

Источники