Наступает эпоха ИИ-поиска. Веб-поиск ChatGPT, Perplexity, Google AI Overviews — всё больше пользователей получают информацию через ИИ, и «помочь ИИ правильно понять ваш сайт» становится всё важнее.

Именно для этого появился llms.txt. Если robots.txt — это файл, который говорит краулерам вроде Googlebot «эту страницу можно/нельзя сканировать», то llms.txt — это файл, который представляет ваш сайт ИИ-краулерам вроде GPTBot и ClaudeBot: «вот что представляет собой наш сайт».

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

1. Что такое llms.txt

llms.txt — это текстовый файл в формате Markdown, который размещается в корневой директории сайта и передаёт LLM (большим языковым моделям) общую информацию о сайте, его структуре и списке контента.

Основные сведения

ПараметрОписание
Имя файлаllms.txt
РасположениеКорень домена (https://example.com/llms.txt)
ФорматMarkdown (простой текст)
КодировкаUTF-8
Авторыllmstxt.org (Jeremy Howard и др.)
Статус стандартизацииДе-факто стандарт (не формальная спецификация вроде RFC)
Кто читаетGPTBot, ClaudeBot, PerplexityBot, Google-Extended и др.

В одном предложении

robots.txt = «не входить» / llms.txt = «вот что мы из себя представляем»

robots.txt — это файл управления доступом (разрешение/запрет), а llms.txt — файл описания содержимого сайта (самопрезентация). Они не конфликтуют — наоборот, предназначены для совместного использования.

2. Зачем нужен — отличие от robots.txt

Может возникнуть вопрос: «Разве sitemap и мета-теги не достаточны для понимания ИИ?» В какой-то мере да, но llms.txt имеет свои уникальные преимущества.

Сравнение ролей robots.txt / sitemap.xml / llms.txt

ФайлНазначениеАудиторияСодержание
robots.txtРазрешение/запрет краулингаВсе краулерыПравила Allow/Disallow
sitemap.xmlСписок страницПоисковые движкиURL, дата обновления, приоритет
llms.txtОписание содержимого сайтаLLM-краулерыОбзор, структура, краткое содержание

Три причины, почему нужен llms.txt

Причина 1: LLM не могут эффективно сканировать весь сайт

Googlebot сканирует миллиарды страниц и строит масштабный индекс, но LLM-краулеры не настолько тщательны. Благодаря llms.txt вы можете эффективно сообщить ИИ: «Вот самый важный контент на нашем сайте».

Причина 2: Повышается вероятность цитирования в ответах ИИ

Когда ChatGPT или Perplexity генерируют ответы на основе веб-поиска, чёткое описание специализации и содержания сайта через llms.txt помогает сайту восприниматься как надёжный источник информации. Это часть стратегии LLMO (оптимизации для больших языковых моделей).

Подробнее о LLMO читайте в статье «Что такое LLMO?».

Причина 3: Можно передавать метаинформацию, недоступную через sitemap.xml

sitemap.xml — это просто список URL. В llms.txt можно также передать следующие данные:

  • Тематика и специализация сайта
  • Краткое описание и категория каждого материала
  • Частота обновлений и масштаб сайта
  • Наличие мультиязычности
  • Контактная информация

3. Спецификация формата — что и как писать

Структура формата llms.txt: H1 для названия сайта, цитата для описания, H2 для секций, списка контента и информации о сайте

llms.txt записывается в формате Markdown. Вот формат на основе спецификации llmstxt.org:

Базовая структура

# Название сайта

> Описание сайта. 1-3 предложения, кратко передающих тему, аудиторию и ценность сайта.

## Секция 1

- [Название страницы](URL): Краткое описание

## Секция 2

- [Название страницы](URL): Краткое описание
- [Название страницы](URL): Краткое описание

Правила формата

ЭлементСинтаксис MarkdownРоль
Заголовок H1# Название сайтаОфициальное название сайта. Один на файл
Блок цитаты> Текст описанияОписание сайта. Размещается сразу после H1
Заголовок H2## Название секцииГруппировка контента
Ссылка в списке- [Заголовок](URL): ОписаниеИнформация об отдельном материале

Пример записи

# My Tech Blog

> My Tech Blog is a software engineering blog covering web development, cloud infrastructure, and AI tools. Updated weekly with practical tutorials and comparisons.

## Main Sections

- [Articles](https://example.com/articles): 50+ in-depth technical articles
- [Tutorials](https://example.com/tutorials): Step-by-step coding tutorials

## Popular Articles

- [React vs Vue in 2026](https://example.com/articles/react-vs-vue): A detailed comparison of React and Vue.js for modern web development, covering performance, ecosystem, and learning curve.
- [Docker for Beginners](https://example.com/articles/docker-beginners): Complete guide to Docker containers for developers who have never used containerization.

## Site Information

- URL: https://example.com
- Sitemap: https://example.com/sitemap.xml
- Languages: en, ja
- Contact: admin@example.com

Важные замечания

  • По умолчанию пишите на английском. Спецификация и примеры llms.txt написаны на английском, что делает это лучшей практикой. Для многоязычных сайтов рекомендуется писать на английском и указывать поддерживаемые языки через Languages: ja, en, es, .... Однако для одноязычных сайтов (например, сайт полностью на французском или русском) допустимо писать на языке сайта. Основные LLM (GPT, Claude, Gemini и др.) обрабатывают большинство языков с высокой точностью, а пользователи таких сайтов будут задавать вопросы на том же языке, что обеспечивает согласованность ответов
  • Кодировка обязательно UTF-8. Другие кодировки могут привести к искажению символов
  • Избегайте спецсимволов, таких как длинное тире (—). Поскольку файл отображается как простой текст, некоторые браузеры могут их неправильно показывать. Используйте дефис (-) или двойной дефис (--)
  • URL должны быть абсолютными (полный URL, начинающийся с https://)
  • Только один H1 на файл. Для разделения на секции используйте H2

4. Какие данные указывать — обязательные, рекомендуемые, опциональные

Многие не знают, что именно писать, поэтому систематизируем информацию по степени приоритета.

Обязательная информация (без неё llms.txt бесполезен)

ДанныеГде записыватьПример
Название сайтаЗаголовок H1# AI Arte
Описание сайтаБлок цитаты> AI learning platform...
Основные секцииH2 + список ссылок- [Articles](URL): Описание

Рекомендуемая информация (повышает точность понимания ИИ)

ДанныеЗачем нужны
Полный список контентаИИ сможет оценить охват тематики сайта
Однострочное описание каждого материалаИИ заранее поймёт содержание страницы
Система категорий/теговПоказывает информационную структуру сайта
URL сайтаУказывает канонический URL
URL SitemapНаправляет к детальному списку страниц
Поддерживаемые языкиВажно для мультиязычных сайтов
Контактная информацияИдентифицирует владельца сайта

Опциональная информация (желательна, но не обязательна)

  • Технологический стек: на чём построен сайт (фреймворк и т.д.)
  • Частота обновлений: как часто появляется новый контент
  • Общее количество контента: число статей и т.п.
  • Лицензия/политика цитирования: можно ли ИИ цитировать материалы
  • Информация об API: если доступен программный доступ

Что НЕ следует указывать

  • Конфиденциальные данные: URL панели администратора, эндпоинты внутренних API и т.п.
  • Персональные данные: избыточная личная информация (адрес, телефон и т.п.)
  • Данные аутентификации: API-ключи, пароли и т.п.

5. Разница между llms.txt и llms-full.txt

В спецификации llmstxt.org, помимо llms.txt, определён также файл llms-full.txt.

ФайлСодержаниеПримерный размерНазначение
llms.txtОбзор сайта, структура, список ссылок1-50 КБ«Оглавление» сайта
llms-full.txtПолный текст всего контента100 КБ - несколько МБПолный текст для ИИ

Когда нужен llms-full.txt

  • Техническая документация: API-справочники, документация библиотек — случаи, когда полный текст помогает ИИ давать более точные ответы
  • Базы знаний: FAQ, глоссарии и другой контент, который часто цитируется фрагментарно

Когда llms-full.txt не нужен

  • Блоги и медиасайты: при большом количестве статей объединение их в один файл делает его слишком большим. Достаточно резюме в llms.txt
  • Интернет-магазины: товарную информацию лучше предоставлять через структурированные данные (JSON-LD и т.д.)
  • Корпоративные сайты: мало страниц, одного llms.txt достаточно

Для обычных блогов и медиасайтов достаточно одного llms.txt. Считайте llms-full.txt инструментом для технической документации.

6. Статический файл vs динамическая генерация — что выбрать

Сравнение статического файла и динамической генерации: статический — просто, но риск устаревания; динамический — всегда актуален, меньше затрат на поддержку

Существуют два основных подхода к управлению llms.txt.

Способ 1: Статический файл

Размещение текстового файла непосредственно в public/llms.txt (или аналогичном пути).

Преимущества:

  • Максимально простая реализация (просто положить файл)
  • Нулевая нагрузка на сервер
  • Работает без фреймворка

Недостатки:

  • Необходимо вручную обновлять файл при каждом добавлении или изменении контента
  • Если забыть обновить, ИИ получит устаревшую информацию
  • Количество контента и категории в файле расходятся с реальностью

Способ 2: Динамическая генерация

Приложение обрабатывает запрос к /llms.txt, извлекает актуальные данные из базы и динамически генерирует текст.

Преимущества:

  • Всегда содержит актуальную информацию
  • При добавлении статьи автоматически отражается в llms.txt
  • Количество контента и названия категорий всегда точны

Недостатки:

  • Требуется больше усилий на реализацию (маршруты + контроллер)
  • При каждом запросе происходит обращение к БД (можно смягчить кэшированием)
  • Нужен фреймворк

Критерии выбора

УсловиеРекомендация
Контента не более 10 единиц, обновляется редкоСтатический файл подойдёт
Контента более 10 единиц или обновления чаще раза в месяцРекомендуется динамическая генерация
Используется WordPress / Laravel / Django и т.п.Динамическая генерация легко реализуема
Статический сайт (Hugo, Jekyll, Astro и т.п.)Идеально — автогенерация при сборке
Один администратор, минимизация поддержкиДинамическая генерация (настроил и забыл)

Вывод: если сомневаетесь — выбирайте динамическую генерацию. Начальные затраты на реализацию выше, но зато можно «настроить и забыть», что в перспективе снижает операционные расходы. Худший сценарий — начать со статического файла и потом забыть его обновлять, отправляя ИИ устаревшую информацию.

7. Реализация — примеры кода для основных фреймворков

Рассмотрим реализацию динамической генерации llms.txt для основных фреймворков.

Laravel (PHP)

Определение маршрута (routes/web.php):

use App\Http\Controllers\LlmsTxtController;

Route::get('/llms.txt', [LlmsTxtController::class, 'index']);

Контроллер (app/Http/Controllers/LlmsTxtController.php):

class LlmsTxtController extends Controller
{
    public function index()
    {
        $articles = Article::published()
            ->with(['translations' => fn($q) => $q->where('locale', 'en')])
            ->orderBy('published_at')
            ->get();

        $lines = [];
        $lines[] = '# My Site Name';
        $lines[] = '';
        $lines[] = '> Site description here.';
        $lines[] = '';
        $lines[] = '## All Articles (' . $articles->count() . ')';
        $lines[] = '';

        foreach ($articles as $article) {
            $t = $article->translations->first();
            if (!$t) continue;
            $url = 'https://example.com/en/articles/' . $article->slug;
            $lines[] = '- [' . $t->title . '](' . $url . '): ' . $t->meta_description;
        }

        $content = implode("\n", $lines);
        return response($content, 200)
            ->header('Content-Type', 'text/plain; charset=utf-8');
    }
}

Важно явно указать Content-Type: text/plain; charset=utf-8. Без этого ответ может быть интерпретирован как HTML.

Django (Python)

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('llms.txt', views.llms_txt, name='llms_txt'),
]

# views.py
from django.http import HttpResponse
from .models import Article

def llms_txt(request):
    articles = Article.objects.filter(
        status='published'
    ).order_by('published_at')

    lines = ['# My Site', '', '> Description.', '', '## Articles', '']
    for a in articles:
        lines.append(f'- [{a.title}](https://example.com/articles/{a.slug}): {a.meta_description}')

    content = '\n'.join(lines)
    return HttpResponse(content, content_type='text/plain; charset=utf-8')

Next.js (TypeScript)

// app/llms.txt/route.ts (App Router)
import { NextResponse } from 'next/server'

export async function GET() {
  // Получение данных из БД или CMS
  const posts = await getAllPosts()

  const lines = [
    '# My Site',
    '',
    '> Description.',
    '',
    '## Articles',
    '',
    ...posts.map(p =>
      `- [${p.title}](https://example.com/posts/${p.slug}): ${p.description}`
    ),
  ]

  return new NextResponse(lines.join('\n'), {
    headers: { 'Content-Type': 'text/plain; charset=utf-8' },
  })
}

WordPress (PHP)

Добавьте в functions.php или в виде плагина:

// functions.php
add_action('init', function() {
    add_rewrite_rule('^llms\.txt$', 'index.php?llms_txt=1', 'top');
});

add_filter('query_vars', function($vars) {
    $vars[] = 'llms_txt';
    return $vars;
});

add_action('template_redirect', function() {
    if (!get_query_var('llms_txt')) return;

    header('Content-Type: text/plain; charset=utf-8');
    $posts = get_posts(['numberposts' => -1, 'post_status' => 'publish']);

    echo "# " . get_bloginfo('name') . "\n\n";
    echo "> " . get_bloginfo('description') . "\n\n";
    echo "## Articles (" . count($posts) . ")\n\n";

    foreach ($posts as $post) {
        $url = get_permalink($post);
        $desc = get_the_excerpt($post);
        echo "- [{$post->post_title}]({$url}): {$desc}\n";
    }
    exit;
});

В WordPress не забудьте пересохранить настройки постоянных ссылок (сбросить правила перезаписи).

Генераторы статических сайтов (Hugo / Astro и т.д.)

Напишите скрипт для автоматической генерации при сборке:

# build-llms-txt.sh (пример для Hugo)
#!/bin/bash
echo "# My Site" > public/llms.txt
echo "" >> public/llms.txt
echo "> Site description." >> public/llms.txt
echo "" >> public/llms.txt
echo "## Articles" >> public/llms.txt
echo "" >> public/llms.txt

for file in content/posts/*.md; do
  title=$(grep '^title:' "$file" | sed 's/title: //')
  slug=$(basename "$file" .md)
  desc=$(grep '^description:' "$file" | sed 's/description: //')
  echo "- [${title}](https://example.com/posts/${slug}): ${desc}" >> public/llms.txt
done

Запустите в CI-пайплайне (GitHub Actions и т.д.) перед сборкой — и файл будет автоматически обновляться при каждом деплое.

8. Проверка и валидация после установки

После размещения llms.txt проверьте следующие пункты.

Базовый чек-лист

Пункт проверкиСпособ проверки
Доступен ли файл по URLcurl https://yoursite.com/llms.txt
Корректен ли Content-TypeЧерез curl -I убедиться, что возвращается text/plain; charset=utf-8
Нет ли проблем с кодировкойОткрыть в браузере и проверить корректность отображения текста
Корректны ли ссылкиПерейти по указанным URL и убедиться, что страницы открываются
HTTP-статус 200curl -o /dev/null -w "%{http_code}"
Не заблокирован ли в robots.txtУбедиться, что в robots.txt нет Disallow: /llms.txt

Дополнительные проверки для динамической генерации

  • Добавьте одну статью и проверьте llms.txt: отразилась ли новая статья
  • Правильно ли показано количество контента: число в «All Articles (27)» должно совпадать с реальным количеством опубликованных статей
  • Не попали ли неопубликованные статьи: убедитесь, что черновики и запланированные публикации не отображаются

Инструменты валидации

По состоянию на апрель 2026 года официального валидатора llms.txt не существует. Однако проверить можно следующими способами:

  • Попросить ChatGPT или Claude прочитать файл: задать вопрос «Прочитай https://yoursite.com/llms.txt и расскажи об этом сайте»
  • Markdown-превьюер: вставить содержимое llms.txt в превьюер Markdown и проверить, корректно ли отображается структура
  • SEO-аудит: некоторые инструменты SEO-аудита начинают поддерживать проверку наличия llms.txt

9. Примеры llms.txt реальных сайтов

Рассмотрим тенденции внедрения llms.txt.

Характеристики сайтов с высоким уровнем внедрения

Тип сайтаУровень внедренияПричина
ИИ-сервисы и инструментыВысокийИндустрия ИИ хорошо осведомлена о LLMO
Техническая документацияВысокийПотребность в точной передаче информации для ИИ
Технические блогиСреднийВысокая чувствительность к техническим трендам
Корпоративные сайтыНизкийПока низкая осведомлённость
Интернет-магазиныНизкийПриоритет у структурированных данных (JSON-LD)

Признаки хорошего llms.txt

  • Краткое и понятное описание — специализация сайта ясна с первого прочтения
  • Весь контент перечислен с резюме — ИИ может охватить общую картину
  • Система категорий чётко обозначена — видна информационная структура
  • Динамическая генерация — всегда актуальное состояние

Признаки плохого llms.txt

  • Только название сайта и контакты — слишком мало информации для помощи ИИ
  • Скопирован полный текст всего контента — llms.txt — это «оглавление», а не «полный текст». Полный текст — задача llms-full.txt
  • Устаревшая информация — например, написано «10 articles», а на самом деле 50, что подрывает доверие
  • Содержит конфиденциальные данные — URL панели администратора или API-ключи в файле

FAQ

Q. Без llms.txt сайт не будет отображаться в результатах ИИ-поиска?

Нет, даже без llms.txt ИИ может сканировать сайт и показывать его в результатах поиска. llms.txt — это лишь «вспомогательный файл для лучшего понимания ИИ». Тем не менее, его установка помогает ИИ точнее понять структуру и содержание сайта, что повышает вероятность цитирования в ИИ-поиске. Это аналогично sitemap.xml в SEO — без него работает, но с ним лучше.

Q. Имеет ли смысл llms.txt, если ИИ-краулеры заблокированы в robots.txt?

Если в robots.txt указано User-agent: GPTBot с Disallow, этот бот не будет сканировать сайт. Однако llms.txt сам по себе независим от правил robots.txt. ИИ может получить доступ к llms.txt другими путями (например, если пользователь вставит URL напрямую). Если вы намеренно блокируете ИИ-краулеры, для последовательности лучше не размещать и llms.txt.

Q. На каком языке писать llms.txt?

Для многоязычных сайтов — на английском. Для одноязычных сайтов — на языке сайта тоже допустимо. Спецификация и примеры преимущественно на английском, что делает его наиболее логичным выбором для многоязычных сайтов. Однако если контент сайта полностью на одном языке, написание llms.txt на этом языке вполне приемлемо. Основные LLM обрабатывают большинство языков с высокой точностью, а пользователи будут задавать вопросы на языке сайта, получая согласованные ответы.

Q. Есть ли ограничения на размер llms.txt?

В спецификации явных ограничений нет. Однако на практике рекомендуется держать файл в пределах 50 КБ. Даже для сайта с сотнями статей заголовок + однострочное резюме каждой статьи легко уместятся в 50 КБ. Если хотите включить полный текст, создайте для этого отдельный llms-full.txt.

Q. Как часто нужно обновлять llms.txt?

При динамической генерации актуальная информация возвращается при каждом запросе, поэтому беспокоиться не нужно. При использовании статического файла идеально обновлять при каждом добавлении или изменении контента. Как минимум проверяйте и обновляйте раз в месяц. Если устаревшая информация может оставаться незамеченной, лучше перейти на динамическую генерацию.

Q. Влияет ли llms.txt на SEO?

llms.txt не оказывает прямого влияния на традиционное SEO (ранжирование в Google). Google использует Googlebot для краулинга HTML и не учитывает llms.txt как фактор ранжирования. Однако он может повлиять на цитирование в ИИ-поиске — AI Overviews от Google, ChatGPT, Perplexity и т.д. Рассматривайте это как меру другого уровня — LLMO, отдельно от традиционного SEO.

Q. Существуют ли плагины для WordPress?

По состоянию на апрель 2026 года появилось несколько плагинов WordPress для автоматической генерации llms.txt. Однако их функциональность и качество варьируются, поэтому при использовании плагина обязательно проверяйте сгенерированное содержимое. Добавить несколько десятков строк кода в functions.php достаточно просто, так что можно обойтись и без плагина.