Почему AI-краулеры не рендерят JS и что делать сайтам на React/Vue/Angular
21
Время чтения: 10 минут
Большинство AI-агентов не выполняют JavaScript, поэтому сайты на React, Vue и Angular рискуют остаться невидимыми для нейросетей. Объясняем причины, показываем, как проверить видимость контента без скриптов (например, с помощью бесплатного инструмента «Контент без JavaScript» oWeb Solutions), и даём практические рекомендации по AIO-оптимизации.
Когда владельцы сайтов слышат про оптимизацию под 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-краулер увидит примерно следующее:
<!DOCTYPE html> <html> <head> <title>Загрузка...</title> </head> <body> <div id="root"></div> <script src="bundle.js"></script> </body> </html>
Никакого контента, никаких заголовков, никаких текстов. Для 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-системах. Решение — серверный рендеринг, динамический рендеринг или статическая генерация. Проверьте свои страницы сегодня, пока конкуренты не заняли ваше место в ответах нейросетей. Для глубокого анализа также стоит заказать аудит сайта, чтобы выявить все скрытые проблемы с индексацией, а после внедрения изменений — настроить техническую поддержку сайта для контроля его состояния.