Почему AI-краулеры не рендерят JS и что делать сайтам на React/Vue/Angular

Когда владельцы сайтов слышат про оптимизацию под AI-агентов, они часто думают, что достаточно просто добавить пару мета-тегов и написать качественный контент. Но есть техническая ловушка, которая обнуляет все усилия: современные AI-краулеры, как правило, не рендерят JavaScript. Если ваш сайт построен на React, Vue, Angular или любом другом SPA-фреймворке, есть высокая вероятность, что ChatGPT, Claude, Perplexity и Gemini видят пустой белый лист — или, в лучшем случае, один div с id="root".

Почему AI-краулеры не запускают JS?

Классические поисковые системы (Google, Яндекс) уже несколько лет умеют рендерить JavaScript — у них есть целые фермы headless-браузеров, которые тратят вычислительные ресурсы на выполнение скриптов и построение DOM. Но AI-агенты работают иначе.

Основные причины:

Стоимость рендеринга. Запуск headless-браузера для каждой страницы увеличивает время обработки в 5-10 раз и требует в десятки раз больше памяти. Компании вроде OpenAI и Anthropic оптимизируют свои краулеры на скорость и объем, а не на полноту рендеринга.

Отсутствие требований. LLM (большие языковые модели) обучаются на тексте, а не на визуальном представлении страницы. Им нужен сырой HTML с текстом и метаданными. JavaScript обычно отвечает за интерактивность и анимацию, которые бесполезны для AI-агента.

Технические ограничения. Многие AI-краулеры (например, GPTBot, ClaudeBot, CCBot) используют упрощенные HTTP-клиенты, которые просто парсят ответ сервера и не интерпретируют скрипты. Они не являются полноценными браузерами.

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

Что это значит для сайтов на React/Vue/Angular?

Если ваше SPA-приложение отдает клиенту пустой HTML-скелет с одним скриптом, AI-краулер увидит примерно следующее:




Загрузка...







Никакого контента, никаких заголовков, никаких текстов. Для LLM такая страница — пустышка. Она не будет проиндексирована, не будет использована для ответа на вопросы пользователей, не попадет в базу знаний AI-агента.

Особенно критично это для:

сайтов с динамическим контентом (каталоги, блоги, новости);

лендингов и страниц услуг, которые должны появляться в ответах ChatGPT;

документации и справочных материалов.

Как проверить, видит ли AI-краулер ваш контент?

Первый и самый надежный способ — посмотреть, что отдает сервер при запросе от бота. Вы можете сделать это вручную через curl или использовать специализированные инструменты. Мы подготовили бесплатный инструмент «Контент без JavaScript» oWeb Solutions, который загружает страницу в режиме без выполнения скриптов и показывает, какой текст и заголовки видны AI-краулеру. Инструмент также определяет, использует ли сайт SPA-фреймворки (React, Vue, Angular), и подсчитывает количество слов в HTML-ответе.

Чтобы проверить самостоятельно через командную строку, выполните:

curl -A "Mozilla/5.0 (compatible; GPTBot/1.0; +https://openai.com/gptbot)" -s https://ваш-сайт.ру | w3m -T text/html -dump

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

Как исправить: три рабочих подхода

1. Серверный рендеринг (SSR / SSG)

Самый надежный способ — использовать Next.js (для React), Nuxt (для Vue) или Angular Universal. Эти фреймворки генерируют HTML на сервере и отдают его клиенту уже готовым. AI-краулер получает полноценный документ, а JS-бандл подгружается позже для интерактивности. Это стандарт индустрии, и именно так работают большинство крупных сайтов.

Если у вас уже готовое SPA без SSR, оцените миграцию: для Next.js это может быть переписывание страниц, для Nuxt — добавление пары файлов. В любом случае, экономия времени на SEO и AIO-оптимизации оправдывает затраты.

2. Динамический рендеринг (Dynamic Rendering)

Если полностью переписывать архитектуру дорого или невозможно, используйте динамический рендеринг: определяйте User-Agent запроса и для AI-краулеров отдавайте предварительно отрендеренную HTML-версию страницы. Это можно сделать через сервисы вроде Rendertron или Prerender.io, либо реализовать самостоятельно с помощью Puppeteer на сервере.

Минус: нужно поддерживать два режима отдачи контента и следить, чтобы рендер-сервер не падал под нагрузкой.

3. Пререндеринг статических страниц

Для контентных страниц (блоги, статьи, документация) можно использовать генерацию статических HTML-файлов на этапе сборки. Gatsby, Next.js (режим export), Nuxt (generate) создают готовые .html файлы, которые отдаются без участия JavaScript. Это идеальный вариант для AI-оптимизации: бот получает чистый текст, никаких скриптов не требуется.

Для динамических разделов (личный кабинет, корзина) можно оставить клиентский рендеринг — AI-краулеры туда всё равно не ходят.

Дополнительные проверки: мета-теги и структура

После того как вы настроили отдачу контента без JS, убедитесь, что:

title и meta description заполнены и уникальны для каждой страницы;

заголовки h1-h3 логично отражают структуру текста;

основной контент находится в HTML, а не подгружается через fetch-запросы;

изображения имеют alt-тексты;

страница не блокируется в robots.txt для GPTBot, ClaudeBot, CCBot, PerplexityBot.

Для быстрой проверки используйте инструмент, упомянутый выше: он покажет, какой title видит AI-краулер, сколько слов в контенте и есть ли признаки SPA. Рекомендуем проверять каждую значимую страницу отдельно.

Итог

AI-краулеры не рендерят JavaScript не из-за лени разработчиков, а из-за экономической целесообразности: LLM нужно обрабатывать миллионы страниц в день, и каждый лишний миллисекунда на рендеринг превращается в часы простоя. Если ваш сайт на React, Vue или Angular отдает пустой HTML, вы теряете видимость в ChatGPT, Claude, Perplexity и других AI-системах. Решение — серверный рендеринг, динамический рендеринг или статическая генерация. Проверьте свои страницы сегодня, пока конкуренты не заняли ваше место в ответах нейросетей.