Javascript SEO – это практика поисковой оптимизации сайтов, использующих JavaScript для вывода контента. Основная проблема сайтов, использующих Javascript, заключается в том, что клиентский JS обрабатывается пользовательским устройством, браузером. Это называется CSR (рендеринг на стороне клиента). Исходный код не содержит конечного контента, и браузер должен сначала преобразовать весь Javascript в HTML.
Поисковые системы на сегодняшний день сканируют и извлекают информацию с сайта как минимум за два прохода: в первых проход извлекаются данные из “сырого” HTML. И только при следующем посещении поисковая система обработает Javascript и проведет рендеринг (отрисовку) страницы так, как видят её посетители-люди, использующие обычный браузер.
Проблема заключается в том, что после первого сканирования поисковая система может отложить рендеринг JS или вовсе от него отказаться, если не сочтёт страницу достаточно важной и нужной. Кроме того, далеко не все возможности JS, доступные для пользовательских браузеров, поддерживаются поисковыми роботами. Важно учитывать, что рендеринг требует значительных вычислительных ресурсов, и чем сложнее задача – тем меньше вероятность того, что она будет выполнена.
Вариантов решения проблем, связанных с JS, несколько:
Использовать рендеринг на стороне сервера (SSR). В этом случае поисковые роботы и люди получают уже сформированный документ в HTML.
Использовать JS только для вывода второстепенного контента, не влияющего на релевантность страницы.
Применить динамический рендеринг: в этом случае поисковому роботу предоставляется уже прошедшая рендеринг страница в кэше, а посетителям-людям предоставляется отрисовывать JS на уровне браузера.
Схема динамического рендеринга, при котором поисковому роботу отдаётся страница из кэша, а посетителям людям предлагается CSR
Когда речь идёт о Javascript SEO, подразумеваются не только JS-скрипты, но в большей мере – JS-фреймворки: Angular, React, Vue и т.п. Официальная документация поисковых систем не предоставляет информации по поддержке того или иного фреймворка, и это дополнительно усложняет работы по оптимизации.
Javascript может препятствовать доступу поискового робота к важному контенту или ссылкам, ведущим на недоступные никак иначе страницы. Недоступный контент не может быть проиндексирован.
Если поисковый робот обращается к странице во время обновления кэша, время обращения может быть слишком большим. Результатом этого становится ошибка 503 (сервис недоступен), что дополнительно отложит учёт любых изменений на странице.