llms.txt для SvelteKit
Три подхода: статический файл в static/ (без настройки), конечная точка +server.ts для динамической генерации или генератор на основе content с использованием import.meta.glob.
Последнее обновление:
Вариант 1: статический файл (рекомендуется)
SvelteKit копирует всё содержимое static/ каталог непосредственно в результат сборки.
Разместите файл по адресу static/llms.txt и он будет доступен по адресу /llms.txt для каждого адаптера, изменения конфигурации не требуются.
# SvelteKit, zero-config static approach
#
# Place your file at: static/llms.txt
# SvelteKit copies everything in static/ directly into the build output.
# Your file will be served at /llms.txt on any adapter.
#
# Project structure:
# your-sveltekit-app/
# ├── static/
# │ └── llms.txt ← add this
# ├── src/
# └── svelte.config.js
#
# No config changes needed. Deploy as normal.
Этот подход работает с adapter-static, adapter-cloudflare, adapter-vercel, adapter-node, и любой другой официальный адаптер. Файл отдаётся с заголовками статического файла по умолчанию для данного адаптера.
Вариант 2: конечная точка +server.ts
Создайте серверный маршрут по адресу src/routes/llms.txt/+server.ts экспортирует GET обработчик. SvelteKit отдаст его по пути /llms.txt.
// src/routes/llms.txt/+server.ts
// SvelteKit server endpoint, dynamic generation
import type { RequestHandler } from './$types';
export const GET: RequestHandler = () => {
const body = `# Your Site
> One-sentence description of what your site is.
## Product
- [Overview](https://yoursite.com/product): core capabilities.
- [Pricing](https://yoursite.com/pricing): plans and limits.
## Documentation
- [Getting started](https://yoursite.com/docs): install, first steps.
- [API reference](https://yoursite.com/api): full endpoint catalog.
## Optional
- [Changelog](https://yoursite.com/changelog): version history.
`;
return new Response(body, {
headers: {
'Content-Type': 'text/plain; charset=utf-8',
'Cache-Control': 'public, max-age=3600, stale-while-revalidate=86400',
},
});
};
Установите подходящий Cache-Control заголовок, чтобы периферийные CDN кэшировали ответ:
он редко меняется и не требует свежей доставки при каждом запросе.
// src/routes/llms.txt/+server.ts
// Add this line to pre-render the endpoint at build time (adapter-static / SSG)
export const prerender = true;
import type { RequestHandler } from './$types';
export const GET: RequestHandler = () => {
const body = `# Your Site\n\n> Summary.\n\n## Docs\n\n- [Guide](https://yoursite.com/docs)`;
return new Response(body, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
};
Вариант 3: генерация из содержимого
Если вы ведёте документацию или записи блога в src/content/, можно сгенерировать llms.txt автоматически во время сборки с помощью
import.meta.glob. Пример ниже читает все файлы Markdown и строит список ссылок из
их frontmatter.
// src/routes/llms.txt/+server.ts
// Generate llms.txt from your Markdown content files
import type { RequestHandler } from './$types';
// Import all Markdown files in src/content/docs/
const docs = import.meta.glob('/src/content/docs/**/*.md', { eager: true }) as Record<
string,
{ metadata?: { title?: string; summary?: string; slug?: string } }
>;
export const prerender = true;
export const GET: RequestHandler = () => {
const lines = Object.values(docs)
.filter((m) => m.metadata?.title && m.metadata?.slug)
.map((m) => `- [${m.metadata!.title}](https://yoursite.com/docs/${m.metadata!.slug}/): ${m.metadata!.summary ?? ''}`);
const body = [
'# Your Site',
'',
'> One-sentence summary.',
'',
'## Documentation',
'',
...lines,
].join('\n');
return new Response(body, {
headers: { 'Content-Type': 'text/plain; charset=utf-8' },
});
};
Настройте шаблон glob и поля метаданных в соответствии со структурой содержимого проекта. Запустите валидатор в CI, чтобы обнаруживать сломанные результаты после миграции содержимого.
Примечания к адаптеру
- adapter-cloudflare, статические файлы в
static/обслуживаются непосредственно глобальной CDN Cloudflare Pages с автоматическим кэшированием. Серверные маршруты становятся функциями Cloudflare Pages. См. Руководство по Cloudflare Pages для рекомендаций по заголовкам кэша и команд очистки. - adapter-vercel, статические файлы обслуживаются из Edge Network Vercel.
Серверные маршруты выполняются как Vercel Functions (или Edge Functions с
export const config = { runtime: 'edge' }). См. Руководство Vercel дляvercel.jsonварианты rewrite. - adapter-static, все маршруты должны поддерживать предварительный рендеринг.
Добавьте
export const prerender = true;в ваш+server.ts, либо используйте вместо этого подход со статическим файлом. - adapter-node, маршруты сервера работают как HTTP-сервер Node.js.
+server.tsподход идеален; добавьте агрессивноеCache-Controlзаголовки, чтобы обратный прокси-сервер (nginx, Caddy) мог кэшировать ответ.
Проверить
После развёртывания убедитесь, что файл обслуживается корректно:
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 Затем вставьте URL в валидатор для полной проверки соответствия спецификации.
Связанные руководства
- Как создать llms.txt, шаблоны и контрольный список.
- Руководство по Cloudflare Pages, SvelteKit + adapter-cloudflare особенности.
- Руководство Vercel, особенности SvelteKit + adapter-vercel.
- Лучшие практики, что включать и что исключать.
- Валидатор · Генератор.