Современная веб-разработка немыслима без javascript-фреймворков. React, Vue, Angular и Svelte позволяют создавать быстрые, интерактивные и удобные одностраничные приложения (SPA). Однако за невероятный пользовательский опыт часто приходится платить высокую цену: проблемами с поисковой оптимизацией (SEO).
Один из главных ночных кошмаров SEO-специалистов и разработчиков — это пустые страницы в поисковой выдаче. Пользователь кликает по ссылке в Google или Яндексе, но вместо полезного контента видит белый экран или бесконечный индикатор загрузки (loader). Почему это происходит и как с этим бороться? Давайте разбираться.
Традиционно поисковые роботы привыкли получать от сервера готовый HTML-документ, в котором сразу есть весь текст, заголовки и ссылки. В случае с классическим SPA сервер отдает практически пустой HTML-файл с единственным корневым тегом (например, <div id="root"></div>) и ссылкой на увесистый JS-бандл.
Чтобы увидеть контент, поисковому роботу (краулеру) нужно:
Проблема кроется в этапах 3 и 4. У поисковиков ограничен так называемый «краулинговый бюджет» (вычислительные ресурсы). Рендеринг javascript — процесс дорогостоящий. Робот может отложить его на дни или недели, либо скрипт может упасть по таймауту. Итог: поисковик индексирует пустую страницу.
Чтобы избежать пустых страниц в индексе, необходимо изменить подход к архитектуре приложения. Вот три основных пути:
При использовании SSR сервер генерирует полный HTML-код страницы в момент запроса и только потом отправляет его клиенту. Поисковый робот мгновенно получает готовый контент без необходимости выполнять javascript.
Если ваш контент обновляется не каждую секунду (например, блоги, документация или каталоги товаров), идеальным решением станет SSG. Страницы собираются в готовые HTML-файлы еще на этапе билда (сборки) проекта. С точки зрения SEO — это идеальный вариант. Роботы мгновенно индексируют контент, а страницы загружаются максимально быстро.
Если переписывать классический SPA на SSR слишком долго и дорого, можно использовать динамический рендеринг. Суть метода проста: сервер определяет, кто запрашивает страницу. Если это обычный пользователь, ему отдается стандартный SPA. Если это поисковый бот Googlebot или Yandexbot, запрос перенаправляется на специальный сервис (например, Puppeteer или prerender.io), который «на лету» выполняет JS и отдает боту чистый HTML.
Даже внедрив SSR или SSG, можно допустить ошибки. Обратите внимание на следующие аспекты:
404 Not Found. В SPA часто случается ошибка «Soft 404», когда JS рендерит страницу с надписью «Ничего не найдено», но сервер при этом отдает код 200 OK. Для робота это сигнал, что пустая страница — это норма.<title> и <meta description> должны присутствовать в исходном HTML, а не добавляться скриптом спустя секунду после загрузки браузера.<a> с атрибутом href. Роботы не умеют «кликать» по элементам <div> или <button>, на которые навешан обработчик onclick.Чтобы убедиться, что проблема пустых страниц вам не грозит, регулярно используйте инструменты для вебмастеров:
javascript и создание мощных интерфейсов больше не являются врагами SEO. Однако надеяться на то, что поисковики сами справятся с вашим SPA, — рискованная стратегия. Внедрение SSR, SSG или динамического рендеринга гарантирует, что поисковые роботы увидят ваш контент целиком и сразу. Это защитит ваш проект от проседаний в выдаче и обеспечит стабильный органический трафик.