seo·matrix
← Все статьи

Почему ИИ не видит ваш React/Next-сайт — и как починить

· Обновлено 26 июн. 2026 г. · 7 мин чтения · Автор Михаил Кузьмицкий

GEOSPAReactNext.js

Markdown-версия ↗

Коротко, если некогда: сайт на React или Vue может быть невидим для ИИ-движков целиком, потому что их боты не выполняют скрипты, — проверяется это за десять секунд, а чинится включением серверного рендеринга на контентных страницах. Ниже — как проверить и что именно крутить в каждом популярном фреймворке.

Симптом

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

Частая причина здесь техническая, а не редакторская: сайт сделан как приложение на одной странице — React, Next.js в клиентском режиме, Vue, Svelte, — и содержимое рисуется уже в браузере, а ИИ-боты скрипты не выполняют вовсе, получают пустую страницу и молча уходят.

Что реально видит бот

Разберу механику подробнее, потому что именно она объясняет всё остальное в этом тексте, включая то, почему проблему годами никто не замечает.

Почему ИИ не видит ваш React/Next-сайт — и как починить

Боты вроде GPTBot, OAI-SearchBot, PerplexityBot и ClaudeBot читают исходный HTML, который отдал сервер: они не ждут гидратации страницы, не кликают по кнопкам и ничего не прокручивают. Если контейнер страницы наполняется скриптом, бот получает каркас с парой служебных строк — обычно это та самая просьба включить JavaScript, — и на этом визит бота, как правило, заканчивается, повторно он не приходит.

Как это проверить, не лазая в код? Вставь адрес в инструмент «Как тебя видит ИИ»: он покажет точный текст без скриптов и посчитает, сколько слов спрятано за ними.

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

Как чинить, по фреймворкам

Цель везде одна и та же — отдавать готовое содержимое уже в первом ответе сервера, — а способы у фреймворков разные, и вот что из них я проверял на живых проектах.

Next.js. Используй серверный рендеринг, статическую генерацию или инкрементальную — вместо чистого клиентского режима, потому что текст должен быть в HTML до гидратации, а не появляться после неё.

Nuxt. Универсальный режим или генерация статики вместо отключённого серверного рендеринга: это правка одной настройки, и она чаще всего решает вопрос целиком.

React на Vite или старом CRA. Тут сложнее: контентные страницы придётся перенести на предварительный рендеринг или добавить серверный, потому что чистый клиентский режим для текста, который должен цитироваться, не подходит в принципе.

Vue и Svelte. SvelteKit и Nuxt умеют серверный рендеринг из коробки, надо просто включить его для публичных страниц.

Динамический рендеринг. Как временная мера можно отдавать ботам заранее отрисованный HTML отдельным сервисом, и это работает, но честный серверный рендеринг надёжнее и дешевле в поддержке.

Что делать после рендера

Когда бот наконец видит текст, добавляется остальное, и вот в каком порядке.

Первое — разметка: собери валидный код для статьи и блока вопросов в генераторе и вставь его прямо в шаблон.

Второе — файл llms.txt, курируемый индекс сайта для движков, который не заменяет ничего из перечисленного, но лишним не бывает.

Третье — доступ: проверь, что robots.txt не блокирует цитирующих ботов, проверкой доступа. Бывает обидно: рендеринг починили, а дверь так и осталась закрытой, и я, кажется, видел это чаще, чем хотелось бы!

Четвёртое — форма текста: прямой ответ в первых одном-двух предложениях каждого раздела, до всяких списков и таблиц. Подробности есть в полном гиде, а проверить конкретную страницу можно чекером.

Сколько это стоит по времени

Это тот самый вопрос, который на практике решает, возьмётся ли команда за работу вообще, поэтому отвечу без округлений в удобную сторону.

Если проект на Next.js или Nuxt, переключение режима занимает от дня до недели: правится настройка, а дальше вылезают мелочи вроде обращений к браузерным объектам там, где браузера ещё нет.

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

А что делать, если переписывать сейчас некому? Тогда временный вариант с отрисовкой для ботов лучше, чем ничего, только не забудь, что это долг, который тебе придётся отдать, и, наверное, раньше, чем хочется.

Почему это так долго не замечают

Отдельно стоит сказать, почему проблема живёт на сайтах годами, хотя обнаруживается за десять секунд, — мне самому это долго казалось странным.

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

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

Третья причина — отсутствие сигнала об отказе. Когда бот получает пустую страницу, он не присылает письмо и не оставляет записи в панели вебмастера: он просто уходит и больше не возвращается, а в отчётах остаётся тишина, неотличимая от «меня пока не спрашивали».

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

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

Разве Google не умеет выполнять скрипты? Умеет, и это правда: у Google есть отдельная очередь рендеринга. Но ИИ-боты других компаний так не умеют, поэтому позиции в обычной выдаче могут быть нормальными при полном отсутствии цитирований.

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

Как понять, что починилось? Тем же инструментом, что и диагностика: число слов, видимых без скриптов, должно совпасть с тем, что видит человек, — расхождение в пару процентов нормально, в десять раз — нет.

Нужно ли чинить вообще все страницы? Нет, только те, которые ты хочешь видеть в ответах. Служебные разделы и интерфейс приложения можно оставить в покое, и это, пожалуй, сильно сокращает объём работ.

Что происходит после починки

Ожидания стоит выставить заранее, иначе результат покажется разочаровывающим просто потому, что его ждали не в тот срок.

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

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

Иными словами, починка рендеринга убирает стену, а не выигрывает гонку. Зато без этой правки никакая гонка не начинается вовсе, и в этом смысле она стоит на первом месте по соотношению затрат и отдачи!

С чего начать

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

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

И одна практическая мелочь напоследок: заведи проверку рендеринга в регулярный чек-лист, потому что откатить настройку обратно способен один невнимательный релиз, а заметить это по трафику получится только через месяц.

Тот проект, кстати, теперь отдаёт боту столько же слов, сколько человеку. А чё там у тебя — проверял?

Источники

  • Документация Google Search Central про рендеринг и работу со скриптами.
  • Документация OpenAI и Perplexity о том, что их боты читают исходный HTML ответа.
  • llmstxt.org и Schema.org — форматы для машиночитаемой части сайта.

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

ИИ-боты исполняют JavaScript?

В основном нет. GPTBot, PerplexityBot, ClaudeBot и большинство краулеров ИИ-ответов читают исходный HTML и не запускают JS. Если контент рисуется на клиенте, бот видит пустой каркас.

Google ведь рендерит JS — этого не хватает?

Googlebot действительно рендерит JS (с задержкой), но AI Overview и сторонние движки (ChatGPT, Perplexity) часто берут контент из исходного HTML. Для GEO нужен контент в первом ответе сервера.

Как быстро проверить, что видит бот?

Вставь URL в мой бесплатный тул «Как тебя видит ИИ» — он покажет точный текст, который получает ИИ-бот (без JS), и сколько слов спрятано за JavaScript.

Помогла статья?
Запустить SEO/GEO с seo·matrix → или заявка без Telegram →

Комментарии

  • …

Комментарии модерируются.