
Почему сайт не видят нейросети: пререндер, JSON-LD, llms.txt
Боты GPTBot и PerplexityBot не дожидаются JavaScript и видят пустой HTML React-сайта. Разбираем пререндер, разметку JSON-LD, файл llms.txt и проверку логов сервера на заходы ботов.
Коротко: сайт не виден ChatGPT и Perplexity, когда боту отдаётся почти пустой HTML — текст и карточки товаров подгружаются в браузере через JavaScript, а бот не ждёт, пока это произойдёт.
Так чаще всего бывает у сайтов на React и других SPA без серверного рендеринга. Ниже — как боты забирают страницу, что чинит пререндер, какая разметка JSON-LD нужна, зачем сайту файл llms.txt и как по логам сервера проверить, что боты нейросетей действительно заходят на сайт и получают контент.
Почему сайт, который нормально открывается в браузере, не виден ChatGPT и Perplexity
У ChatGPT и Perplexity нет единого способа получать страницы. OpenAI обходит сайты своим краулером GPTBot, у Perplexity — PerplexityBot. Часть ответов ChatGPT строится на индексе Bing: если страницы нет в Bing, её не будет и в ответе, даже если GPTBot её прекрасно обошёл. Алиса использует данные Яндекса.
Разница с обычным поисковым роботом в том, как устроена сама страница. Старые боты Google и Яндекса давно умеют выполнять JavaScript и дожидаться отрисовки. GPTBot и PerplexityBot этого не делают — они забирают HTML-код в том виде, в котором его отдал сервер, и уходят. Если сайт собран на React без серверного рендеринга, сервер в ответ на запрос бота отправляет скелет страницы: пустой <div id="root"></div> и ссылку на JS-файл. Контент — текст, цены, карточки — появляется только после того, как браузер выполнит код. Бот этот момент не ждёт. Он видит страницу без заголовка, без текста, без единого слова, которое можно процитировать.
Это касается SPA-сайтов конкретно: React, Vue, Angular без настройки отдачи готового HTML. Сайт на WordPress, Tilda или другой CMS эту проблему не имеет — там серверу не нужно ничего дорисовывать, HTML с текстом готов сразу. Если у вас обычный сайт на CMS и его всё равно не видно в ChatGPT, причина в другом, скорее всего в разметке или в том, что бот вообще не доходит до сайта.
Что такое пререндер и когда он нужен сайту на React
Пререндер — заранее сгенерированная HTML-версия страницы, которая отдаётся по запросу бота или поисковика до того, как включится JavaScript. Технически это выглядит так: на сервере или через отдельный сервис страница один раз «проигрывается» в headless-браузере, результат сохраняется как статичный HTML, и именно его сервер показывает ботам — по User-Agent или по факту, что запрос пришёл не из обычного браузера. Живому пользователю отдаётся обычная React-версия с динамикой, боту — готовый снимок.
Это легче, чем полноценный серверный рендеринг (SSR), при котором каждая страница собирается на сервере при каждом запросе. Пререндер сохраняет снимок страницы один раз и обновляет его по расписанию или при изменении контента, вместо того чтобы пересобирать страницу каждый раз заново. Для сайта с частыми обновлениями этого достаточно. Для сайта, где контент меняется у каждого пользователя в реальном времени, нужен уже SSR.
Пререндер критичен там, где сайт работает как продукт: карточки каталога, статьи блога, страницы услуг — всё, что должно индексироваться и цитироваться. Для личного кабинета за авторизацией пререндер не нужен: туда бот не заходит и не должен.
Пререндер показывает то, что есть на странице, и не больше. Если на странице три строки текста без структуры, бот получит эти же три строки в виде готового HTML и ответит на вопрос так же скудно, как если бы читал страницу в браузере. Пререндер решает проблему видимости. Проблему содержания он не решает.
В devRadar пререндер, разметку и остальную подготовку к нейропоиску настраивают в процессе сборки сайта на React, потому что переделывать архитектуру под ботов после запуска сложнее, чем заложить её сразу.
Какая разметка JSON-LD нужна сайту для нейросетей
JSON-LD — это блок кода в <head> страницы, который переводит содержимое в структуру с полями: автор, дата, вопрос, ответ, цена, наличие. Нейросети используют эти данные, чтобы понять, что перед ними, не угадывая смысл по вёрстке.
Для сайта, который хочет попадать в ответы ChatGPT и Perplexity, важны четыре типа разметки. Это базовый инструмент seo для нейросетей, такой же, как пререндер и llms.txt. Organization — данные о компании: название, адрес, контакты, ссылки на соцсети. Product — для карточек товаров: цена, наличие, характеристики. Article — для статей блога: автор, дата публикации, заголовок. Отдельно — FAQ: разметка вопросов и ответов прямо на странице.
FAQ работает нагляднее остальных. Если на странице услуги есть блок «Сколько стоит сайт с личным кабинетом» с готовым ответом и этот блок размечен как FAQPage, Perplexity может взять именно этот кусок текста и показать его в ответе на похожий вопрос пользователя целиком, с указанием источника. Без разметки бот видит тот же текст, но ему сложнее вычленить вопрос и ответ из общего потока абзацев — и шансы, что он возьмёт именно эту пару, падают.
Нужен ли сайту файл llms.txt и что в нём писать
Файл llms.txt устроен по аналогии с robots.txt: лежит в корне сайта по адресу вида site.ru/llms.txt, доступен без пароля, написан простым текстом. Разница в назначении: robots.txt говорит роботам, что индексировать нельзя, а llms.txt описывает, что на сайте есть и о чём он — чтобы языковая модель, которая читает сайт, быстрее поняла структуру, не разбирая меню и футер.
Типичный llms.txt для сайта — короткое описание компании в одном абзаце и список разделов с пояснением: страница услуг — что именно делает компания, блог — какие темы разбираются, страница цен — какой диапазон стоимости. Контент на страницах остаётся прежним. Файл работает как краткая карта для бота, которому не нужно прогонять через модель весь сайт целиком, чтобы понять его тему.
Единого стандарта для llms.txt нет: сообщество предложило формат, но ни OpenAI, ни Anthropic, ни Google не закрепили его как протокол. Часть моделей файл читает и использует при построении ответа, часть игнорирует полностью, и проверить заранее, какая модель как себя поведёт, нельзя. llms.txt — ориентир для тех ботов, которые его учитывают. Гарантии, что сайт попадёт в ответы, файл не даёт. Отказ от него ничего не ломает, но наличие не вредит и стоит недорого по времени на подготовку.
Как проверить, заходят ли ChatGPT и Perplexity на сайт вообще
Прежде чем разбираться, почему нейросети не показывают сайт в ответах, стоит проверить более простой вопрос: заходят ли боты на сайт вообще. Делается это по логам сервера или по отчётам аналитики — там же, где смотрят обычный трафик.
Каждый бот представляется своим User-Agent. GPTBot и ChatGPT-User — у OpenAI, PerplexityBot — у Perplexity, YandexBot — косвенно у Алисы, поскольку она использует данные Яндекса. В логах сервера (на обычном хостинге это файлы вроде access.log, на VPS — то же самое, но с доступом через SSH) эти строки видно напрямую: IP, User-Agent, запрошенный адрес, код ответа. Если боты в логах есть и получают код 200 — сайт для них открыт технически. Если код 403 или 404 — где-то стоит блокировка, часто случайная, через правило в robots.txt или в настройках firewall.
Второй источник — переходы живых пользователей из самих нейросетей: когда человек задаёт вопрос в ChatGPT или Perplexity и переходит по ссылке на сайт, в аналитике это видно как реферер вида chat.openai.com или perplexity.ai. Эти переходы настраиваются как отдельный срез в счётчике, чтобы не путать их с обычным поисковым трафиком.
Сайт реально стал виден нейросетям, когда боты в логах получают код 200 на ключевых страницах, а в аналитике через несколько недель появляются первые переходы с реферерами ИИ-сервисов. Настройки — это условие. Трафик в логах — доказательство, что условие сработало.
Проверка занимает один вечер: выгрузить логи за неделю, отфильтровать по известным User-Agent, посмотреть коды ответов. Если бот заходит и получает пустую страницу — проблема в пререндере. Если бота в логах нет вообще, проблема раньше, в блокировке на уровне сервера или в robots.txt, и разметка с llms.txt тут ничего не решат, пока эта блокировка не снята.
Частые вопросы
Коротко о том, что спрашивают по этой теме чаще всего.
GPTBot и PerplexityBot не выполняют JavaScript и забирают только тот HTML, который сервер отдал сразу. На сайтах без серверного рендеринга сервер в ответ на запрос бота отправляет пустой `<div id="root"></div>`, а текст и карточки товаров подгружаются уже в браузере. Бот уходит раньше, чем контент появится, и видит страницу без единого слова.
Пререндер — заранее сохранённый снимок страницы в виде готового HTML, который отдаётся ботам вместо пустого React-каркаса. В отличие от SSR, где страница собирается на сервере при каждом запросе, пререндер обновляет снимок по расписанию или при изменении контента. Для каталога и блога этого достаточно, для данных, которые меняются у каждого пользователя в реальном времени, нужен уже SSR.
Для сайта важны четыре типа: Organization с данными о компании, Product для карточек товаров, Article для статей блога и FAQPage для блоков вопрос-ответ. FAQ работает нагляднее остальных: Perplexity может взять размеченный ответ на странице услуги и показать его целиком со ссылкой на источник.
Нет, единого стандарта для llms.txt не существует, и ни OpenAI, ни Anthropic, ни Google не закрепили его как обязательный протокол. Часть моделей файл читает и учитывает при ответе, часть игнорирует полностью, проверить заранее нельзя. Отказ от файла ничего не ломает, а подготовка занимает немного времени.
Нужно выгрузить логи сервера за неделю и отфильтровать строки по User-Agent — GPTBot и ChatGPT-User у OpenAI, PerplexityBot у Perplexity. Код ответа 200 на ключевых страницах говорит, что сайт открыт технически; код 403 или 404 указывает на блокировку в robots.txt или firewall. Подтверждение в аналитике — переходы с реферерами вида chat.openai.com или perplexity.ai, которые появляются через несколько недель после настройки.