llms.txt с Vercel
Три подхода: static-файл в public/ (без настройки), обработчик маршрута Next.js App Router или Vercel Edge Function для максимальной гибкости.
Последнее обновление:
Подход 1. Статический файл в public/
Самый простой и надёжный вариант. Vercel напрямую обслуживает каждый файл в каталоге статических ресурсов вашего фреймворка из своей глобальной Edge Network. Изменения кода и настройки не нужны, затрат на выполнение нет.
# Place llms.txt in your project's static assets directory.
#
# Framework → file location
# Next.js → public/llms.txt
# Astro → public/llms.txt
# SvelteKit → static/llms.txt
# Nuxt → public/llms.txt
# Remix → public/llms.txt
# Hugo → static/llms.txt
# Vercel serves it at /llms.txt from their global Edge Network.
# No config changes needed. After deploy, verify:
curl -I https://your-domain.com/llms.txt
# Expected: HTTP/2 200 | Content-Type: text/plain | x-vercel-cache: HIT Когда использовать: ваш llms.txt содержимое относительно стабильно,
и вы обновляете его вручную или скриптом сборки. Это правильный вариант по умолчанию для подавляющего
большинства сайтов.
Подход 2, обработчик маршрута App Router в Next.js
Если вы используете Next.js на Vercel, самый аккуратный динамический подход — обработчик Route в
App Router по адресу app/llms.txt/route.ts. С
export const dynamic = 'force-static', Vercel предварительно создаёт его
во время сборки и кэширует результат на границе, что фактически идентично выдаче статического
файла, но файл генерируется из ваших данных.
// app/llms.txt/route.ts (Next.js App Router)
// Vercel detects this as a static export when dynamic = 'force-static'
// and caches the output at the edge on first request.
export const dynamic = 'force-static';
export async function GET() {
const content = [
'# My Site',
'',
'> One-sentence description of what this site is about.',
'',
'## Documentation',
'',
'- [Getting started](https://yoursite.com/docs/getting-started/): first steps.',
'- [API reference](https://yoursite.com/docs/api/): full endpoint catalog.',
'',
'## Optional',
'',
'- [Changelog](https://yoursite.com/changelog/): version history.',
].join('\n');
return new Response(content, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=3600, stale-while-revalidate=86400',
},
});
}
Удалить force-static если нужно действительно динамическое содержимое, получаемое при
каждом запросе (например, из работающей CMS). В этом случае Vercel всё равно кэширует ответ на edge-уровне
в соответствии с вашим Cache-Control заголовке.
Для полного руководства по Next.js, включая Pages Router и llms-full.txt генерации, см.
отдельная страница Next.js.
Подход 3, Vercel Edge Function
Для проектов не на Next.js, которым нужна динамическая генерация, используйте Vercel Edge
Function вместе с vercel.json перенаправление, сопоставляющее /llms.txt в функцию:
// api/llms.txt.ts, Vercel Edge Function
// Place this file in the /api directory.
// Vercel routes requests to /api/llms.txt by default,
// so use a vercel.json rewrite to map /llms.txt → /api/llms.txt
import type { VercelRequest, VercelResponse } from '@vercel/node';
export const config = {
runtime: 'edge', // Runs on Vercel's Edge Network
};
export default function handler(req: Request): Response {
const content = [
'# My Site',
'',
'> One-sentence description.',
'',
'## Core pages',
'',
'- [Getting started](https://yoursite.com/docs/getting-started/): first steps.',
].join('\n');
return new Response(content, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=3600, s-maxage=86400',
},
});
}
// vercel.json, rewrite /llms.txt to your Edge Function or API Route
// Only needed if you're not using Next.js App Router (which handles routing natively)
{
"rewrites": [
{ "source": "/llms.txt", "destination": "/api/llms" }
]
}
Edge Functions работают в глобальной Edge Network Vercel с почти нулевым временем холодного
старта. Они идеально подходят для генерации llms.txt из хранилища KV или внешнего API
без полноценного сервера.
Поведение Cache-Control и edge-сети
Для статических файлов в public/, Vercel автоматически задаёт заголовки
кеширования. Для обработчиков маршрутов и Edge Functions задайте Cache-Control явно:
-
public, max-age=3600, stale-while-revalidate=86400, рекомендуется для файлов, составленных вручную. -
public, s-maxage=86400, stale-while-revalidate=604800, агрессивное кэширование на границе, хорошо для стабильного содержимого. -
public, max-age=0, s-maxage=300, 5-минутный граничный кэш для содержимого на основе CMS.
Vercel автоматически очищает кэш CDN при каждом новом развёртывании, поэтому вам не нужно
вручную сбрасывать его после отправки обновлённого llms.txt.
Проверьте после публикации
# Check headers, look for Content-Type and x-vercel-cache
curl -I https://yoursite.com/llms.txt
# Inspect content
curl https://yoursite.com/llms.txt
# Force-revalidate after a new deploy (Vercel auto-purges on deploy)
# For manual purge via Vercel REST API:
curl -X POST "https://api.vercel.com/v1/projects/{PROJECT_ID}/purge" \
-H "Authorization: Bearer {VERCEL_TOKEN}"
Проверив заголовки, вставьте свой рабочий URL в валидатор
для проверки соответствия спецификации: ровно один H1, корректный синтаксис ссылок (- [title](https://...)), все URL абсолютны, пустых разделов нет.
→ Полное руководство по созданию · Руководство по Cloudflare Pages · Руководство по Next.js