# llms-txt

## Что такое llms.txt?

**llms.txt** — это Markdown-файл по адресу `/llms.txt`, который сайт публикует специально для языковых моделей (LLM). Он помогает AI-агентам быстро понять суть сайта, найти важные страницы и получить контекст без парсинга всего HTML.

Стандарт предложен Jeremy Howard (основатель Answer.AI, создатель fast.ai) в 2024 году. Большинство современных сайтов содержат HTML, JavaScript и рекламные блоки — «шум», который LLM вынуждены парсить ради полезного контента. `llms.txt` даёт чистый вход: один файл с упорядоченными ссылками и описаниями.

По расположению похож на `robots.txt`, по назначению — на `README.md`: не ограничивает, а направляет.

## Зачем сайту llms.txt?

`llms.txt` решает три проблемы одновременно:

1. **GEO-точность.** Когда AI-помощник цитирует ваш сайт в ответе, он делает это точнее при наличии структурированного контекста. Страницы с `llms.txt` цитируются корректнее.

2. **Agentic workflows.** Агент, выполняющий задачу («найди API-документацию», «сравни условия»), навигирует по `llms.txt` напрямую — без обхода всего сайта.

3. **Контроль представления.** Вы сами определяете, что агент узнает о вас в первую очередь: продукт, документация, контакты, условия.

## Как реализовать llms.txt?

Минимальный `llms.txt` по спецификации llmstxt.org:

```markdown
# Agent Ready Scanner

> Бесплатный публичный сканер AI-готовности сайтов по 23 открытым стандартам.

## Documentation
- [О проекте](/about)
- [FAQ](/faq)
- [Глоссарий стандартов](/glossary)
- [Тарифы реализации](/tiers)

## API
- [Документация сканера](/scanner)
```

**Структура файла:**

- `# H1` — название продукта или сайта (обязательно)
- `> blockquote` — одна строка tagline (рекомендуется)
- `## Section` — разделы с markdown-ссылками (минимум один)
- Разделы `## Documentation`, `## Examples`, `## Optional` — рекомендованные имена
- Раздел `## Optional` — менее важные ссылки, которые LLM может игнорировать при ограниченном контексте

**Технические требования:**

- Путь: `/llms.txt` (строго на корне, без поддиректорий)
- Отдавать с `Content-Type: text/plain` или `text/markdown`
- Кодировка: UTF-8
- Размер: разумный (< 100 KB — LLM читает его целиком)

**Для статических сайтов (Astro, Next.js, Hugo):**

Создайте файл `public/llms.txt` — он будет доступен по `/llms.txt` автоматически.

**Для динамических сайтов:**

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

```typescript
// Пример для Astro (src/pages/llms.txt.ts)
export async function GET() {
  const content = `# My Site\n\n> Description\n\n## Documentation\n- [Docs](/docs)\n`;
  return new Response(content, {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' }
  });
}
```

**Опциональный `llms-full.txt`:**

Для сайтов с большим количеством контента спецификация рекомендует также публиковать `llms-full.txt` — расширенную версию с полным текстом всех страниц. `llms.txt` указывает на него в секции `## Optional`.

## Как мы проверяем llms.txt?

Наш сканер делает `GET /llms.txt` и проверяет:

1. **HTTP 200** — файл существует и доступен
2. **Content-Type** — `text/plain` или `text/markdown`
3. **Непустое содержимое** — файл не пустой
4. **Markdown-заголовок** — минимум один `# Заголовок` в файле
5. **Markdown-ссылки** — минимум одна `[текст](url)` ссылка

Если все 5 условий выполнены — статус **pass**. Если файл отсутствует (HTTP 404) или пустой — **fail**. Если Content-Type некорректный — **fail** с пояснением.

**Типичные ошибки:** файл есть, но сервер возвращает HTML (кастомная 404 с кодом 200), нет ни одной markdown-ссылки, файл слишком большой (>500 KB — предупреждение).

[← Все термины глоссария](/glossary)
