JavaScript и SEO: почему поисковик не видит часть сайта и как это исправить
Если аудит отметил «контент появляется только после JavaScript», «H1 создаётся JS» или «ошибки JavaScript» — часть сайта может быть невидима для поиска. Робот сначала читает статический HTML, а выполнение скриптов откладывает на потом — если вообще доходит. Всё, что рисует JS в браузере, он может не увидеть.
- Поисковик в первую очередь читает статический HTML, а JS выполняет позже и не всегда
- Контент, который появляется только после JavaScript, индексируется хуже или не индексируется
- Особенно критично, если через JS создаётся H1, основной текст или ссылки
- Ошибки JavaScript могут ломать контент, формы и разметку
- Проверка простая: сравните исходный код (Ctrl+U) с тем, что видно на странице
Как поисковик на самом деле видит страницу
Когда робот заходит на страницу, он получает от сервера исходный HTML — то, что приходит до выполнения скриптов. Это первое и главное, что он читает. Затем, если у поисковика есть ресурсы, он ставит страницу в очередь на рендеринг — выполняет JavaScript, как браузер, и дополняет картину. Но этот второй этап не гарантирован и происходит с задержкой: Google умеет рендерить JS, но делает это не для всех страниц и не сразу; Яндекс и парсеры ИИ-поисковиков полагаются на JS ещё слабее.
<div id="root"><!-- пусто --></div>
<script src="app.js">
</body>
✕ ни H1, ни текста, ни ссылок
Одна страница SPA: слева — пустой каркас, который получает робот; справа — то, что дорисовал JavaScript для человека.
Вывод простой: что есть в исходном HTML — робот видит наверняка; что появляется только после JS — под вопросом. Именно поэтому наш аудит сравнивает страницу «до» и «после» выполнения JavaScript и подсвечивает, что из важного существует только во второй версии.
Главная опасность: контент только после JS
Проблема острее всего на сайтах, собранных как SPA (single-page application) — на React, Vue, Angular без серверного рендеринга. Сервер отдаёт почти пустой HTML (условный <div id="root"></div>), а весь контент дорисовывает JavaScript уже в браузере. Человек видит нормальную страницу, а робот при первом заходе — пустоту.
Наш аудит выделяет несколько конкретных симптомов:
- H1 создаётся JavaScript'ом — в исходном HTML заголовка нет, он появляется после рендеринга. Краулер без выполнения JS не видит ключевой заголовок. Подробно про роль этого тега — в гайде про H1 и иерархию заголовков;
- Значимая часть текста появляется только после JS — в исходном HTML контента мало, основная масса подгружается скриптом. Такой текст индексируется хуже и медленнее;
- Внутренние ссылки создаются JavaScript'ом — если навигация и ссылки отрисовываются скриптом, робот хуже обходит сайт и слабее передаёт вес по таким ссылкам;
- Ошибки JavaScript в консоли — упавший скрипт может не дорисовать контент, сломать форму заявки или разметку, а заодно испортить поведенческие сигналы;
- Страница или её ресурсы не загружаются — если при живой загрузке отдаётся ошибка или критический скрипт не подгрузился, и пользователь, и робот остаются без контента.
Что с этим делать
Задача — сделать так, чтобы важный контент был в HTML до выполнения скриптов. Основные подходы:
- Серверный рендеринг (SSR) или пререндеринг. Фреймворки вроде Next.js (React) или Nuxt (Vue) отдают готовый HTML с контентом, а JS потом «оживляет» страницу. Это главный способ подружить SPA с SEO;
- Статическая генерация (SSG). Для контента, который меняется редко (статьи, услуги), страницы можно собрать в готовый HTML заранее;
- Прогрессивное улучшение. Базовый контент — текст, заголовки, ссылки — присутствует в HTML сразу, а JavaScript лишь добавляет интерактивность;
- Чинить ошибки JavaScript. Ошибки в консоли — не косметика: они могут обрывать отрисовку. Их нужно находить и устранять;
- Не прятать текст за ленивую загрузку. Ленивая подгрузка картинок — хорошо; но основной текст и ссылки не должны появляться только по скроллу или клику.
Если переделка архитектуры не по силам прямо сейчас — начните с минимума: вынесите в серверный HTML хотя бы title, H1, основной текст и ключевые ссылки. Остальное JS может дополнять.
Как проверить свой сайт
- Исходный код vs страница — Ctrl+U (это видит робот до JS) и сравните с тем, что показано. Нет в коде текста, H1 или ссылок — их создаёт скрипт
- Отключите JavaScript — DevTools (F12 → «Disable JavaScript») и перезагрузите: останется ли контент? Так вы увидите сайт глазами робота
- Проверка URL в Search Console — показывает, каким Google видит отрендеренный HTML, и что не подгрузилось
- Консоль браузера — F12 → Console: нет ли красных ошибок JavaScript
- SEO-аудит — открывает страницу в реальном браузере, сравнивает HTML до и после JS, находит контент и ссылки, которые есть только после скриптов
Частые ошибки из наших аудитов
- Весь сайт — SPA без SSR — сервер отдаёт пустой каркас, контент рисует JS; для поиска страница почти пустая;
- H1 и текст «прилетают» скриптом — робот при первом заходе видит заглушку или пустоту;
- Меню и ссылки на JavaScript — навигация есть для человека, но робот по ней плохо обходит сайт;
- Незамеченные ошибки JS — скрипт падает на части устройств, и там контент не отрисовывается;
- Тяжёлый JS блокирует загрузку — критический скрипт грузится долго или с ошибкой, и страница остаётся без контента.
Что дальше
Проверьте ключевые страницы: откройте исходный код и убедитесь, что title, H1, основной текст и важные ссылки присутствуют в нём, а не появляются только после JS. Отключите JavaScript в браузере и посмотрите, что останется. Если контент исчезает — планируйте серверный рендеринг или пререндеринг хотя бы для главных страниц. Это фундаментальная вещь: без неё остальная SEO-работа может не сработать.
Хотите точно знать, какой контент, заголовки и ссылки вашего сайта существуют только после JavaScript? Закажите комплексный SEO-аудит: откроем сайт в реальном браузере, сравним HTML до и после JS, найдём ошибки скриптов — а заодно проверим метатеги, скорость и видимость в ИИ-поиске.
Коротко о JavaScript и SEO
Google же умеет выполнять JavaScript — в чём проблема? +
Нужно ли вообще отказываться от JavaScript? +
Мой сайт на WordPress/конструкторе — это меня касается? +
Как быстро понять, есть ли проблема? +
Видит ли поисковик весь ваш контент?
Закажите SEO-аудит — откроем сайт в реальном браузере, сравним HTML до и после JavaScript и покажем, какой контент, заголовки и ссылки существуют только после скриптов. А заодно проверим метатеги, скорость и видимость в ИИ-ответах.
