llms.txt в Next.js
Добавьте файл llms.txt в проект Next.js за несколько минут: как статический ресурс или динамический Route Handler.
Последнее обновление:
Два подхода
Next.js предоставляет два простых способа обслуживать llms.txt в /llms.txt:
- Статический файл в
/public/, самый простой подход. Запишите файл вручную или сгенерируйте его во время сборки. Работает и с App Router, и с Pages Router. Нулевая нагрузка во время выполнения. - Обработчик маршрута App Router, файл TypeScript в
app/llms.txt/route.tsкоторый динамически создает содержимое из ваших источников данных (файлов MDX, CMS, базы данных). Лучше всего подходит, если содержимое часто меняется.
Для большинства сайтов статический файл в /public/ — правильный выбор. Используйте Route
Handler только если хотите автоматически создавать содержимое из данных сайта во время сборки или
обработки запроса.
Метод 1: статический файл в /public/
Next.js обслуживает каждый файл в /public/ каталог в корне вашего домена. Файл по адресу
/public/llms.txt доступен по адресу https://yourdomain.com/llms.txt
без дополнительной настройки.
-
Создайте файл:
touch public/llms.txt -
Запишите ваш
llms.txtсодержимое (см. руководство и генератор для правильного формата):
# Your Site Name
> One-sentence description of your site for LLM context.
## Core pages
- [Page title](https://yourdomain.com/page/): brief description.
- [Another page](https://yourdomain.com/other/): brief description.
## Optional
- [About](https://yourdomain.com/about/): who maintains this site.
- Зафиксируйте файл и разверните его. Готово.
Способ 2: обработчик маршрута App Router
Если вы хотите генерировать llms.txt программно, например считывая все файлы MDX в каталоге
содержимого, используйте Route Handler.
Создайте файл app/llms.txt/route.ts:
import { NextResponse } from 'next/server';
export const dynamic = 'force-static'; // generate at build time
export async function GET() {
// Build your content. Here: hardcoded; in practice: read from MDX, CMS, etc.
const content = `# Your Site Name
> Description of your site.
## Core pages
- [Getting started](https://yourdomain.com/docs/getting-started/): installation and first steps.
- [API reference](https://yourdomain.com/docs/api/): full endpoint reference.
`;
return new NextResponse(content, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
// Optional: cache for 1 hour in production
'Cache-Control': 'public, max-age=3600, stale-while-revalidate=86400',
},
});
}
Настройка dynamic = 'force-static' указывает Next.js отображать этот маршрут во время
сборки, а не при каждом запросе. Уберите эту строку, если вам действительно нужно динамическое содержимое
(получаемое из актуальной базы данных во время запроса).
Альтернатива Pages Router
Если вы используете Pages Router в Next.js (до App Router), самый простой путь по-прежнему —
статический файл в /public/. Соглашение о файлах Route Handler существует только в
App Router.
Для динамической генерации с Pages Router можно использовать пользовательский сервер (Express
или Fastify) либо getServerSideProps-страница с пользовательским типом содержимого,
но это значительно усложняет решение по сравнению со статическим файлом. Используйте /public/llms.txt
для проектов Pages Router.
Добавление llms-full.txt
llms-full.txt встраивает полный контент ключевых страниц
в единый файл. В Next.js App Router:
// app/llms-full.txt/route.ts
import { NextResponse } from 'next/server';
import fs from 'fs';
import path from 'path';
export const dynamic = 'force-static';
export async function GET() {
// Example: read MDX files from content/docs and concatenate them
const docsDir = path.join(process.cwd(), 'content/docs');
const files = fs.readdirSync(docsDir).filter(f => f.endsWith('.mdx'));
const sections = files.map(file => {
const content = fs.readFileSync(path.join(docsDir, file), 'utf8');
const slug = file.replace('.mdx', '');
return `## https://yourdomain.com/docs/${slug}/\n\n${content}`;
});
const body = `# yourdomain.com, full content\n\n${sections.join('\n\n---\n\n')}`;
return new NextResponse(body, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
}
Проверка настройки
После публикации убедитесь, что файл доступен и корректно сформирован:
-
Посетить
https://yourdomain.com/llms.txtв браузере вы должны увидеть обычный текст. -
Проверьте HTTP-заголовки:
curl -I https://yourdomain.com/llms.txtдолжен показыватьContent-Type: text/plainи код состояния 200. - Вставьте URL в Валидатор llmtxt.info для проверки соответствия спецификации.
-
Проверьте, что
llms.txtне заблокирован в вашемpublic/robots.txt.
Продолжить чтение
- Как создать llms.txt, общее руководство с шаблонами для всех фреймворков.
- Что такое llms-full.txt?, сопутствующий файл с полным корпусом.
- Валидатор, проверьте файл на соответствие спецификации.
- Лучшие практики, что включать и чего избегать.