Skip to content
EN
← Все статьи

Чек-лист AI-готовности сайта: 12 проверок с командами

Коротко. AI-готовность — это проверяемое состояние сайта: краулеры ИИ-сервисов получают HTML без блокировок, находят в нём текст без запуска JavaScript и извлекают из него готовый ответ. Проверяется не ощущением, а командами: код ответа на бот-User-Agent, объём текста в исходном HTML, парсится ли JSON-LD, время до первого байта. Ниже — двенадцать пунктов, и для каждого команда и критерий «пройдено».

Схема: запрос краулера проходит через robots.txt, CDN и сервер к HTML-контенту
Четыре барьера между ИИ-краулером и вашим текстом: robots.txt, WAF/CDN, код ответа, рендеринг.

Что такое AI-готовность и чем она отличается от SEO

Поисковая оптимизация отвечает на вопрос «на какой позиции страница». AI-готовность отвечает на другой: «сможет ли модель вообще достать отсюда факт и назвать источник». Пересечение большое — обеим нужен доступный HTML и понятная структура, — но проверки разные. В SEO вы смотрите на индекс и запросы; в AI-готовности вы смотрите на то, что физически приходит в ответ на HTTP-запрос от бота.

Практический смысл: сайт может быть в индексе Яндекса и Google, иметь трафик и при этом отдавать ИИ-краулеру 403 от CDN или пустой каркас без текста. Ни то, ни другое не видно в отчётах вебмастера — это видно только в логах и в ответе curl.

AI-готовность — не рейтинг и не оценка. Это набор бинарных условий: либо бот получил текст, либо нет. Всё, что нельзя проверить командой и получить «да/нет», в чек-лист не входит.

Как пользоваться чек-листом: что считать «пройдено»

Каждый пункт ниже устроен одинаково: что проверяем — команда — как выглядит «пройдено» — как выглядит «не пройдено». Прогоняйте по одной репрезентативной странице каждого типа: главная, страница каталога, карточка товара или услуги, статья. Ошибки почти всегда типовые, а не постраничные.

Перед началом заведите переменную с реальной строкой User-Agent — половина проверок опирается на неё. Строки берите только из документации самого оператора: она указана прямо в User-Agent после знака +.

UA_GPT='Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.4; +https://openai.com/gptbot'
UA_BROWSER='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
SITE='https://example.com'

Номер версии в строке меняется — если вы фильтруете логи, ищите подстроку GPTBot, а не точную версию.

Блок 1. Доступ: пускает ли сайт ИИ-краулеров

Самый частый провал — не отсутствие разметки, а обычный отказ на входе. Причём отказ бывает в трёх разных местах, и лечится он в трёх разных местах.

Пункт 1. robots.txt не запрещает нужные токены

curl -sS "$SITE/robots.txt" | grep -inE -A6 'user-agent:[[:space:]]*(\*|GPTBot|OAI-SearchBot|ClaudeBot|Claude-SearchBot|Claude-User|PerplexityBot|Google-Extended|CCBot)'

Пройдено: для каждого токена, который вы хотите пустить, в его группе нет строки Disallow: /. Не пройдено: есть группа User-agent: * с Disallow: / и нет отдельных разрешающих групп; или файл отдаёт 404 вместо 200 (тогда, по RFC 9309, обход считается разрешённым, но вы теряете контроль и строку Sitemap).

Главная ловушка — правило выбора группы. Бот применяет одну наиболее специфичную группу и полностью игнорирует остальные. Если для GPTBot есть своя группа, то Disallow из User-agent: * на него не действует — и наоборот: аккуратно написанный запрет в звёздочке ничего не запретит боту, у которого есть персональная группа с Allow: /. Разбор всех сценариев разрешений — в отдельном материале про robots.txt и ИИ-ботов.

Изменения в robots.txt не применяются мгновенно. OpenAI и Perplexity в документации указывают, что их системам нужно порядка суток, чтобы подхватить новый файл. Не делайте выводов через десять минут после правки.

Пункт 2. WAF и CDN не отдают ботам 403

robots.txt — это договорённость, а WAF — реальный барьер. Часть облачных провайдеров включает блокировку ИИ-краулеров в наборе правил по умолчанию, и владелец сайта об этом не знает. Сравните два запроса:

for ua in "$UA_GPT" "$UA_BROWSER"; do
  curl -s -o /dev/null -A "$ua" \
    -w 'code=%{http_code} bytes=%{size_download} ttfb=%{time_starttransfer}s\n' "$SITE/"
done

Пройдено: оба запроса дают 200 и сопоставимый размер тела. Не пройдено: на бот-строке приходит 403, 429, 503 или 200 с телом в несколько килобайт — это страница-челлендж, а не ваш контент.

Чего этот тест не показывает. Правила, привязанные к IP-адресу, он не поймает: ваш адрес не принадлежит диапазонам бота, поэтому «разрешить по IP» вы не проверите со своей машины. Обратная ситуация тоже возможна — WAF может пропустить любой запрос со строкой GPTBot с произвольного IP, и это уже дыра, а не «пройдено». Настоящая проверка того, дошёл ли бот, — только логи (см. как ИИ-краулеры читают сайт).

Пункт 3. Вы понимаете, чем платите за каждую блокировку

«Закрыть всех ИИ-ботов» — решение, у которого разная цена для разных токенов. Операторы документируют последствия явно.

ТокенКтоЧто делаетЧто теряете, запретив
GPTBotOpenAIСбор данных для обучения моделейИспользование контента в обучении. На выдачу в поиске ChatGPT не влияет
OAI-SearchBotOpenAIИндексация для поиска в ChatGPTПоказ сайта в поисковых ответах ChatGPT
ChatGPT-UserOpenAIПереход по ссылке в момент запроса пользователяИнициируется человеком, поэтому правила robots.txt могут не применяться
ClaudeBotAnthropicСбор данных для обученияИспользование материалов в обучающих наборах
Claude-SearchBotAnthropicИндексация для качества поискаТочность и видимость сайта в поисковых ответах
Claude-UserAnthropicЗагрузка страницы по запросу пользователяПоказ сайта при пользовательском веб-поиске
PerplexityBotPerplexityИндексация для выдачи со ссылкамиПоявление сайта в результатах Perplexity
Perplexity-UserPerplexityПереход по запросу пользователяПо документации обычно игнорирует robots.txt
Google-ExtendedGoogleТолько токен управления, своей строки User-Agent нетОбучение Gemini и подгрузку контента в ответ. На включение в поиск Google и на ранжирование не влияет
Applebot-ExtendedAppleУправляющий токен поверх ApplebotИспользование материалов в обучении моделей Apple
CCBotCommon CrawlОткрытый датасет, из которого берут данные многиеПопадание в публичный корпус
Строка Google-Extended в логах не появится никогда: у неё нет собственного User-Agent, обход выполняют обычные агенты Google. Искать её в access.log — потерянное время.
Сравнение исходного HTML и отрисованной страницы: часть текста появляется только после запуска скриптов
Извлекаемость: значение имеет то, что лежит в исходном HTML, а не то, что дорисовал браузер.

Блок 2. Извлекаемость: находит ли бот текст

Доступ получен — дальше вопрос, есть ли в ответе слова. Здесь ломается больше половины современных сайтов на клиентских фреймворках.

Пункт 4. Основной текст есть в исходном HTML

Смотреть надо именно на сырой ответ сервера, а не на панель «Элементы» в браузере: инспектор показывает DOM уже после исполнения скриптов.

curl -sL -A "$UA_GPT" "$SITE/page" \
| python3 -c "import sys,re,html
t=sys.stdin.read()
t=re.sub(r'(?is)<script.*?</script>|<style.*?</style>|<!--.*?-->',' ',t)
t=re.sub(r'(?s)<[^>]+>',' ',t)
t=re.sub(r'\s+',' ',html.unescape(t)).strip()
print('слов:',len(t.split()))
print(t[:400])"

Пройдено: число слов сопоставимо с тем, что вы видите на странице, а первые 400 символов — осмысленный текст, а не только меню. Не пройдено: 30–80 слов и в выводе одна навигация с футером — тело страницы собирается на клиенте, и бот его не увидит.

Порог удобно держать в голове такой: если на странице визуально 800 слов, а команда показывает меньше 200 — контент клиентский. Разбор конкретных приёмов, которые возвращают текст в HTML, — в материале про извлекаемость контента.

Пункт 5. Прямой ответ стоит в первом абзаце

Модель собирает ответ из фрагментов. Фрагмент, который начинается с определения или вывода, цитируется охотнее, чем абзац-разгон вида «в современном мире всё чаще возникает вопрос». Проверка простая — прочитать первые 60 слов и спросить себя: если оставить только их, ответ на заглавный вопрос получен?

curl -sL "$SITE/page" \
| python3 -c "import sys,re,html
t=sys.stdin.read()
m=re.search(r'(?is)<h1[^>]*>(.*?)</h1>(.*?)<h2', t)
if not m: print('h1 или h2 не найдены'); raise SystemExit
head=re.sub(r'<[^>]+>',' ',m.group(1))
body=re.sub(r'<[^>]+>',' ',m.group(2))
f=lambda s: re.sub(r'\s+',' ',html.unescape(s)).strip()
print('H1:',f(head))
print('ЛИД:',' '.join(f(body).split()[:60]))"

Пройдено: лид — 40–80 слов, содержит прямой ответ и ключевые сущности. Не пройдено: между h1 и первым h2 вообще нет текста (сразу картинка, форма подписки, хлебные крошки) или лид не отвечает на вопрос заголовка.

Пункт 6. Разметка семантическая, а не «стена div»

curl -sL "$SITE/page" | grep -oE '</?(h1|h2|h3|ul|ol|table|article|main|nav)\b' \
| sort | uniq -c | sort -rn

Пройдено: ровно один h1, несколько h2, есть списки и хотя бы один main или article. Не пройдено: ноль h2, два и более h1, заголовки сделаны крупным текстом внутри div.

Заголовки нужны не ради «правильной вёрстки». Они задают границы фрагментов: там, где нет h2, страница для машины — один длинный неделимый блок, из которого труднее вырезать точный ответ.

Пункт 7. Текст не спрятан в картинках

Скриншот таблицы тарифов, инфографика с цифрами, схема с подписями — для модели это пустое место. Проверяйте так: выключите загрузку изображений или прогоните команду из пункта 4 и посмотрите, остались ли в тексте те числа и термины, которые есть на картинках. Если ключевая цифра существует только внутри .png — продублируйте её текстом или таблицей рядом.

Блок 3. Разметка: что действительно читают

Пункт 8. JSON-LD есть в исходном HTML и парсится

Типичная ошибка не в том, что разметки нет, а в том, что её вставляет менеджер тегов или скрипт темы. В DevTools она видна, в ответе сервера — нет.

curl -sL -A "$UA_GPT" "$SITE/page" \
| python3 -c "import sys,re,json,html
raw=sys.stdin.read()
blocks=re.findall(r'(?is)<script[^>]*ld\+json[^>]*>(.*?)</script>', raw)
print('блоков JSON-LD в сыром HTML:', len(blocks))
for i,b in enumerate(blocks,1):
    try:
        d=json.loads(html.unescape(b))
        d=d if isinstance(d,list) else [d]
        print(i,'ok  @type =', [x.get('@type') for x in d])
    except Exception as e:
        print(i,'НЕ ПАРСИТСЯ:', e)"

Пройдено: минимум один блок, все парсятся, @type совпадает с тем, что на странице реально есть. Не пройдено: ноль блоков в сыром HTML при видимой разметке в браузере; ошибка парсинга из-за лишней запятой; FAQPage на странице, где нет вопросов и ответов.

Какие типы имеют смысл и как их не переусложнить — разобрано отдельно в Schema.org для ИИ-поиска. Здесь важен только факт: разметка должна лежать в ответе сервера и не расходиться с видимым текстом.

Пункт 9. Мета-данные не пустые и не дублируются

curl -sL "$SITE/page" | grep -oiE '<title>[^<]*|<meta[^>]+(description|robots|canonical)[^>]*' | head

Пройдено: есть непустой title, описание, канонический адрес, а в robots нет noindex на странице, которую вы хотите показывать. Не пройдено: noindex, оставшийся с тестового контура, — самая дорогая опечатка в этом списке.

Блок 4. llms.txt: что он делает и чего не делает

Файл /llms.txt — предложенный сообществом формат: краткое описание сайта и список приоритетных материалов в Markdown. Сделать его дёшево, вреда он не наносит, и он удобен как машиночитаемое оглавление для ваших же интеграций.

# Название сайта
> Одно предложение: чем сайт полезен и кому.

## Основное
- [Чек-лист AI-готовности](/articles/ai-readiness-checklist): что проверить и какой командой
- [Как ИИ-краулеры читают сайт](/articles/how-ai-crawlers-read-sites): user-agent, JS, логи

## Справочники
- [Гайд по llms.txt](/articles/llms-txt-guide): формат и типовые ошибки

Пройдено: файл отдаётся с кодом 200 и типом text/plain, ссылки в нём живые.

curl -sI "$SITE/llms.txt" | head -n 3
curl -s "$SITE/llms.txt" | grep -oE '\]\(/[^)]+\)' | tr -d '](' | while read p; do
  printf '%s %s\n' "$(curl -s -o /dev/null -w '%{http_code}' "$SITE$p")" "$p"
done

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

Терминал с выводом curl: код ответа, время до первого байта и размер загруженного HTML
Скорость ответа для бота измеряется теми же полями curl, что и для пользователя, — но без кеша и без прогрева.

Блок 5. Скорость и вес ответа для краулера

Пункт 10. Время до первого байта и размер HTML в норме

Бот не ждёт бесконечно и не грузит бесконечный документ. Google документирует свои лимиты прямо: при обходе для поиска берётся первый мегабайт-другой поддерживаемого типа файла (в справке названы 2 МБ, для PDF — 64 МБ), лимит считается по несжатым данным, а каждый подключённый ресурс тянется отдельно с тем же ограничением. Остальные операторы своих чисел не публикуют — поэтому измеряйте и держите запас.

curl -sL -o /tmp/page.html -A "$UA_GPT" \
  -w 'code=%{http_code}\ndns=%{time_namelookup}\nconnect=%{time_connect}\nttfb=%{time_starttransfer}\ntotal=%{time_total}\nredirects=%{num_redirects}\n' "$SITE/page"
wc -c /tmp/page.html

Пройдено: ttfb меньше примерно 0,8 с на холодном запросе, num_redirects равен 0 или 1, несжатый HTML — сотни килобайт, а не мегабайты. Не пройдено: секунды TTFB, цепочка из трёх и более редиректов, документ на несколько мегабайт из-за инлайновых данных.

Поле curl -wЧто показываетОриентир «пройдено»
%{http_code}Итоговый код ответа200
%{time_namelookup}Разрешение имени< 0,1 с
%{time_connect}TCP-соединение< 0,2 с
%{time_starttransfer}Время до первого байта< 0,8 с
%{num_redirects}Число переходов0–1
%{size_download}Размер телаСотни КБ, не мегабайты

Замер удобнее делать не с ноутбука по домашнему каналу, а инструментом с внешнего узла: проверка скорости и анализ заголовков ответа дают ту же картину без влияния вашего провайдера. По сжатию есть отдельный разбор — gzip и Brotli.

Пункт 11. Сайт стабильно отвечает, а не «обычно отвечает»

Обход происходит в неизвестный вам момент. Если раз в сутки на пять минут отдаётся 502, вероятность попасть в это окно ненулевая, а повторного захода может не быть неделями. Практический критерий: за последние 30 дней доля ответов 5xx на публичных страницах близка к нулю. Это не про ИИ отдельно — это обычный мониторинг доступности.

Один 503 в момент обхода стоит дороже, чем отсутствие разметки. Разметку бот дочитает при следующем визите, а страницы, которой не было, для него просто не существует.

Блок 6. Обнаружимость: как бот вообще узнаёт о странице

Пункт 12. Sitemap и внутренние ссылки в порядке

Обход начинается со ссылок. Страница, на которую не ведёт ни один обычный <a href> и которой нет в карте сайта, обнаруживается только случайно.

curl -s "$SITE/robots.txt" | grep -i '^sitemap:'
curl -s "$SITE/sitemap.xml" | grep -c '<loc>'

Пройдено: в robots.txt есть строка Sitemap:, карта отдаёт 200 и содержит ожидаемое число адресов. Не пройдено: карта ссылается на http:// при живом HTTPS, содержит адреса с редиректами или страницы с noindex. Навигация целиком на JavaScript без настоящих ссылок — тот же случай: для бота таких переходов нет. Подробности — в гайде по sitemap.xml, битые адреса ищет проверка ссылок.

Что НЕ помогает: шесть мифов об AI-готовности

Половина работы — не делать лишнего. Ниже то, на что регулярно тратят время без результата.

  • «Добавил llms.txt — попал в ответы». Нет. Ни один крупный оператор публично не подтверждал, что читает этот файл при обходе. Полезная привычка, не канал.
  • «Заблокировал GPTBot — контент защищён от ИИ». GPTBot отвечает за обучение. Поиск в ChatGPT управляется другим токеном, а пользовательские загрузки (ChatGPT-User, Perplexity-User, Claude-User) инициируются человеком, и, по документации операторов, правила robots.txt к ним могут не применяться.
  • «Google-Extended видно в логах». У него нет собственной строки User-Agent — это только токен управления в robots.txt. И он не влияет ни на включение в поиск Google, ни на ранжирование.
  • «Чем больше разметки, тем лучше». Разметка, расходящаяся с видимым текстом, — нарушение рекомендаций и риск санкций. FAQPage без видимого FAQ хуже, чем отсутствие FAQPage.
  • «Есть специальные мета-теги для ИИ». Придуманных директив вида ai-content не существует. Работают реальные механизмы: токены в robots.txt, noindex, nosnippet (Apple прямо документирует nosnippet как отказ от использования в широких справочных ответах).
  • «Ключевые слова плотнее — цитируют чаще». Извлекается фрагмент, отвечающий на вопрос. Плотность слов на это не влияет, а читаемость ухудшает.
Таблица разбора ошибок: симптом, причина, проверка и исправление
Большинство провалов сводится к пяти симптомам, и каждый диагностируется одной командой.

Разбор ошибок: симптом, причина, проверка, фикс

СимптомВероятная причинаЧем проверитьЧто сделать
На бот-строку приходит 403, на браузерную — 200Правило WAF или набор «AI scrapers» у CDNcurl -A с обеими строкамиРазрешить нужные токены по User-Agent вместе со списком IP оператора
Код 200, но в теле 40 словКонтент рендерится на клиентеПодсчёт слов из пункта 4Серверный рендеринг или предрендер ключевых шаблонов
Разметка видна в DevTools, но не в curlJSON-LD вставляет менеджер теговСкрипт из пункта 8Отдавать JSON-LD с сервера в исходном HTML
Страница есть, но бот её не запрашиваетНет входящих ссылок и записи в sitemapgrep -c <loc> по картеДобавить в карту и связать обычными ссылками
В логах много запросов и мало полезногоОбходятся фильтры каталога и параметры сортировкиРазбор логов по путямЗакрыть параметрические адреса в robots.txt, оставить канонические
Всё «правильно», но упоминаний нетНет уникальных данных: страница пересказывает то же, что сотня другихРучное сравнение с выдачейДобавить собственные замеры, цифры, разборы случаев
Порядок работ жёсткий: сначала доступ, потом извлекаемость, и только потом разметка и llms.txt. Разметка на странице, которую бот получает с кодом 403, не даёт ничего.

Как проверить всё сразу

Ручные команды дают точный ответ по одной странице. Чтобы получить картину по сайту, удобнее прогнать готовые проверки:

Дальше по теме: как ИИ-краулеры читают сайт — про механику обхода и чтение логов, GEO и как попадать в ответы ИИ — про содержательную сторону, AI Overviews, Perplexity, Bing Copilot и Нейро в Яндексе — про особенности конкретных площадок.

Частые вопросы

AI-готовность — это то же самое, что SEO?

Нет. SEO целится в позицию в выдаче, AI-готовность — в то, сможет ли модель достать со страницы факт и указать источник. База общая (доступный HTML, структура, скорость), но проверки разные: в SEO вы смотрите отчёты вебмастера, здесь — ответ сервера на запрос бота.

Сколько пунктов из двенадцати критичны?

Первые пять: доступ в robots.txt, отсутствие блокировки на WAF, осознанный выбор токенов, наличие текста в исходном HTML и прямой ответ в начале. Остальное усиливает результат, но само по себе не работает.

Нужен ли llms.txt, если его никто не подтверждал?

Он не обязателен. Делайте, если это пять минут работы и вам полезно машиночитаемое оглавление. Не делайте, если ради него откладываете серверный рендеринг: приоритет несопоставим.

Как часто повторять проверку?

Полный прогон — после каждого релиза, который трогает шаблоны, CDN или robots.txt. Быстрый — код ответа на бот-строку и число слов в HTML — можно поставить на регулярный мониторинг, тогда регрессия заметна в тот же день.

Можно ли открыть поиск и закрыть обучение?

Да, у OpenAI и Anthropic токены разделены: обучающий и поисковый настраиваются независимо. Но помните про пользовательские загрузки — они инициируются человеком, и правила robots.txt к ним могут не применяться.

Помогает ли отдавать ботам отдельную версию страницы?

Нет, это клоакинг: разное содержимое по User-Agent — прямое нарушение рекомендаций поисковых систем и риск санкций. Правильный путь — один HTML, одинаково полный для всех.

Что делать, если сайт на конструкторе и серверный рендеринг недоступен?

Проверьте пункт 4: многие платформы отдают текст в HTML, и проблемы нет. Если текста действительно нет, реальный рычаг один — вынести ключевые материалы (статьи, описания, ответы) на страницы, которые платформа отдаёт статически.

Чек-лист

  • robots.txt отдаёт 200; нужные токены не под Disallow: /; учтено правило одной наиболее специфичной группы.
  • Бот-строка User-Agent получает 200 с полным телом, а не 403 или челлендж от CDN.
  • Для каждого токена осознанно решено, что теряется при запрете.
  • В исходном HTML есть основной текст: число слов сопоставимо с видимым.
  • Между h1 и первым h2 стоит прямой ответ на 40–80 слов.
  • Один h1, несколько h2, есть списки и таблицы.
  • Значимые цифры продублированы текстом, а не живут только на картинках.
  • JSON-LD лежит в ответе сервера, парсится и не противоречит видимому тексту.
  • Нет случайного noindex; title, описание и канонический адрес заполнены.
  • llms.txt (если он есть) отдаётся как text/plain, ссылки в нём живые.
  • TTFB меньше примерно 0,8 с, редиректов 0–1, несжатый HTML не мегабайты.
  • Страница есть в sitemap.xml и на неё ведут обычные ссылки.

Проверить AI-готовность сайта →

Проверьте ваш сайт прямо сейчас

Проверить SEO своего сайта →
Другие статьи: SEO
SEO
Open Graph: как настроить превью ссылки в Telegram, VK и соцсетях
21.07.2026 · 477 просм.
SEO
Sitemap XML: структура карты сайта, лимиты, генерация и проверка
16.03.2026 · 398 просм.
SEO
SEO-аудит сайта: чеклист из 20 пунктов
14.03.2026 · 225 просм.
SEO
Цепочки редиректов: как они влияют на SEO и скорость
11.03.2026 · 207 просм.