Главная / База знаний / Технические проблемы / JS не индексируется Яндексом
База знаний

JS не индексируется Яндексом

SPA на React/Vue — Яндекс хуже Google рендерит JS. SSR и pre-render как решение.

Технические проблемы · 3 мин чтения

Симптом

Причина

Яндекс использует собственный движок рендеринга, который не всегда полностью поддерживает современные фреймворки.
- Отсутствие серверного рендеринга (SSR): контент создаётся только в браузере, а Яндекс видит только статический шаблон.
- Неправильная настройка robots.txt или X-Robots-Tag: запрещённый доступ к скриптам или к страницам, где контент генерируется JS.
- Отсутствие pre-render: Яндекс не «запускает» JavaScript, поэтому не видит динамический контент.
- Слишком медленный рендеринг: если скрипт загружается долго, Яндекс может прекратить ожидание и оставить пустую страницу.
- Неправильная конфигурация сервера: отдача index.html для всех путей без корректного Content-Type может сбивать Яндекс.

Как проверить

  1. Проверка исходного кода
    bash curl -L https://example.com/page | head -n 20
    Если виден только <div id="app"></div>, контент генерируется JS.

  2. Проверка в Яндекс.Вебмастере
    - В разделе «Проверка URL» введите адрес страницы.
    - Посмотрите, какие ресурсы загружает Яндекс и есть ли ошибки JavaScript.

  3. Проверка robots.txt
    bash curl -L https://example.com/robots.txt
    Убедитесь, что нет правил Disallow: / для скриптов.

  4. Проверка заголовков ответа
    bash curl -I https://example.com/page
    Должен быть Content-Type: text/html; charset=utf-8.

  5. Проверка скорости загрузки
    - Включите performance.now() в index.html и посчитайте время до полной загрузки.
    - Если > 5 секунд, возможно, Яндекс прерывает рендеринг.

  6. Проверка pre-render
    - Откройте страницу в режиме «Инспектор» и посмотрите, генерируется ли контент сервером (доступен ли __PRELOADED_STATE__).

Решение

1. Внедрить SSR (Server‑Side Rendering)

React (Next.js)

npx create-next-app myapp
cd myapp
npm run dev

Next.js автоматически рендерит страницы на сервере.
В pages/index.js можно использовать getServerSideProps:

export async function getServerSideProps() {
  const res = await fetch('https://api.example.com/data');
  const data = await res.json();
  return { props: { data } };
}

Vue (Nuxt.js)

npx nuxi init mynuxt
cd mynuxt
npm install
npm run dev

Nuxt генерирует серверный рендеринг по умолчанию.

2. Использовать pre‑rendering (если SSR не подходит)

3. Настроить robots.txt

User-agent: *
Allow: /

Если нужно запретить скрипты, уточните путь:

Disallow: /static/js/

4. Добавить X‑Robots‑Tag в ответ сервера

location / {
    add_header X-Robots-Tag "index, follow" always;
}

5. Оптимизировать загрузку скриптов

6. Проверка после изменений

  1. Перезапустите сервер.
  2. В Яндекс.Вебмастере повторно проверьте URL.
  3. Убедитесь, что в исходном коде виден готовый HTML, а не только <div id="app"></div>.
  4. Через 24–48 ч проверьте, появился ли URL в индексе.

Связанные

SEO КП · нужна помощь?

Не хотите разбираться сами?

Запустите технический аудит сайта за 5 минут — получите PDF-отчёт с разбором всех 64 параметров и конкретными точками роста. Или закажите комплексное SEO-продвижение сайта — починим всё это и возьмём на себя дальнейшую оптимизацию.

Запустить аудит за 199 ₽ Узнать про продвижение →