SSR в SPA есть, а SEO нет

Вы перевели интернет-магазин на Next.js либо Nuxt.js, подключили SSR, все «рендерится на сервере», но органический трафик не вырастает. В Гугл Search Console видно частичную индексацию, а в Yandex Веб-мастере практически пусто. Знакомо?

Неувязка не в самом SPA. Неувязка – в качестве HTML, который отдается с сервера. Наличие SSR – это только техно возможность. Чтоб она работала на SEO, SSR-верстка обязана быть полной, семантически корректной и лишенной обычных ошибок.

Обычные ошибки SPA

Разберем девять критичных заморочек, которые делают веб-сайт «невидимым» для поисковиков даже при формальном наличии SSR. В особенности животрепещуще для проектов, нацеленных на российскую аудиторию и продвигающихся в Yandex’е.

  1. Ссылки без < a >: веб-сайт становится «непролазным»

Сущность ошибки

В SSR-HTML заместо семантической ссылки < a href="/product/123" > употребляются < div >, < span >, < button > и обработчики кликов (onClick, router.push()).

Почему это критично

Обе поисковые машины – Гугл и Yandex – полагаются на тег < a > с атрибутом href как на главный сигнал навигации снутри веб-сайта. Лишь такие элементы участвуют в построении карты сканирования; передают anchor text, который впрямую влияет на текстовую релевантность мотивированной странички; разрешают боту осознать иерархию и структуру веб-сайта, распределить ссылочный вес.

Если ссылка реализована без < a >, она быть может проигнорирована при сканировании, даже если работает в браузере. В итоге страничка не получает anchor text от остальных разделов, не участвует во внутренней перелинковке и теряет релевантность по мотивированным запросам.

Пример отсутствия тега < a > в коде

Sitemap.xml помогает найти URL, но не подменяет внутренние ссылки. Он не дает контекста, не сформировывает иерархию и не влияет на осознание темы.

Но даже наличие тега < a > не является страховкой от ошибки.

Тег < a > есть, а атрибута href нет

Верный подход

Внутренние ссылки на веб-сайте должны применять семантический тег < a href > с корректным значением адреса. Даже если зрительно элемент ведет на страничку через < div >, < span > либо < button > с обработчиком клика, поисковые боты его не распознают.

  1. Различный HTML в SSR для ПК (Персональный компьютер — компьютер, предназначенный для эксплуатации одним пользователем) и мобильных устройств: отсутствие единой структуры

    Сущность ошибки

    На веб-сайте употребляется раздельная верстка: сервер дает различные HTML-структуры для десктопных и мобильных устройств. Это не адаптивность через CSS, а практически две различные странички.

    Приведем обычные примеры различий меж версиями веб-сайта.

    • Пагинация. В десктопной версии есть обычная навигация по страничкам – ссылки вроде < a href="/page/2" >2< /a > и < a href="/page/3" >3< /a >. В мобильной версии ее подменяют нескончаемой лентой: юзер просто скроллит перечень, а ссылок на остальные странички при всем этом нет.

    • Хлебные крошки. На рабочем столе, отображается полная цепочка навигации со ссылками на все уровни разделов. В мобильной версии она облегчена: к примеру, остается лишь клавиша «Вспять» либо укороченная цепочка, где часть уровней совершенно отсутствует в DOM.

    • Меню. В десктопной версии это обычно выпадающее меню с разделами. В мобильной – просто ссылка, ведущая на отдельную страничку «Каталог».

    Почему это критично

    Гугл употребляет mobile-first indexing, для него главный является мобильная версия. Yandex почаще сканирует десктопную версию, в особенности если она содержит больше контента. Если в одной из версий нет ссылок на пагинацию, поисковик не может перейти на вторую и следующие странички группы.

    Это становится критической неувязкой, если sitemap.xml отсутствует либо не полный. В таковой ситуации пагинация – единственный путь для поисковика добраться до глубочайших карточек. Если ее нет в SSR, то ассортимент обрезается: индексируются лишь продукты с первой странички группы.

    Аналогично, если в одной из версий отсутствуют промежные звенья хлебных крошек, то пропадает anchor text для категорий, передача веса по иерархии и контекст для расчета текстовой релевантности.

    При помощи инструмента Diff Checker можно сопоставить код страничек для различных устройств.

    Верный подход

    Чтоб избежать таковых заморочек, лучше сходу закладывать несколько базисных принципов в архитектуру веб-сайта.

    Во-1-х, по способности применять адаптивную верстку, когда для всех устройств отдается один и этот же HTML. Это понижает риск того, что поисковый бот увидит структуру страничек по другому, чем юзер.

    Во-2-х, если навигация на рабочем столе и в мобильной версии принципно различается, принципиально сохранять семантические ссылки в HTML. К примеру, пагинация обязана оставаться реализованной через < a href >, даже если зрительно она укрыта. То же касается и хлебных крошек: в DOM лучше оставлять полную цепочку разделов.

    Еще одна страховка – животрепещущий sitemap.xml с прямыми ссылками на все продукты и странички каталога. Он помогает поисковым системам отыскивать странички даже в тех вариантах, когда навигация на веб-сайте работает неидеально.

    И в конце концов, стоит часто инспектировать, совпадает ли структура ссылок в начальном HTML для десктопной и мобильной версии. Это обычная проверка, которая нередко помогает впору увидеть препядствия с индексируемостью.

    1. Контент в аккордеонах, вкладках и FAQ отсутствует в SSR

      Сущность ошибки

      Частая неувязка – контент, который подгружается лишь на стороне клиента. К примеру, тексты во вкладках «Описание», «Свойства», «Гарантия», «FAQ» могут появляться на страничке уже опосля загрузки, через JavaScript. В итоге в SSR-версии странички этого контента просто нет.

      Если поглядеть начальный HTML, картина обычно смотрится так: контейнеры под описание продукта либо блоки с товарными советами находятся, но остаются пустыми. Вкладки с чертами и отзывами могут совершенно отсутствовать в разметке, поэтому что данные для их загружаются асинхронно на клиенте.

      Схожая ситуация возникает с контентом снутри аккордеонов, вкладок либо выпадающих списков. Часто он подгружается лишь опосля взаимодействия юзера – к примеру, при клике на вкладку либо раскрытии блока. Для поисковых машин таковой контент может оказаться труднодоступным либо индексироваться существенно ужаснее.

      Почему это критично

      Поисковые машины – и Гугл, и Yandex – индексируют контент, сокрытый через CSS (display: none, visibility: hidden), если он находится в начальном HTML-коде странички. Критичная разница возникает, когда текст отсутствует в SSR-HTML и подгружается динамически лишь опосля выполнения JavaScript на клиенте: Гугл может выполнить скрипты и проиндексировать таковой контент, но с задержкой (в рамках 2-ой волны индексации) и без гарантий, потому что рендеринг зависит от доступности ресурсов краулера. Yandex наименее жестко делает клиентский JavaScript, потому контент, которого нет в исходном HTML, с высочайшей вероятностью не будет проиндексирован. В итоге понижается релевантность, отсутствуют доверительные сигналы.

      Верный подход

      Весь принципиальный контент должен быть в SSR-HTML, даже если вначале он укрыт.

      «Сокрытый» не означает «отсутствующий» – для SEO принципиально присутствие в DOM. Если API недоступен на сервере, используйте кеширование ответов на стороне сервера.

      1. Lazy-loading критичного контента в SSR

        Сущность ошибки

        Блоки ниже первого экрана (отзывы, достоинства, сопоставления) удалены из SSR ради «убыстрения» начальной загрузки. Нередко совместно с текстом через lazy-load отдают и изображения, включая основное фото продукта.

        Почему это критично

        Таковая архитектура влияет не только лишь на индексируемость, да и на технические метрики веб-сайта.

        Индексация. Если контент возникает лишь опосля взаимодействия юзера, к примеру, опосля скролла либо клика по вкладке, то поисковые боты могут его просто не узреть. Для Yandex’а это в особенности критично: бот не гарантирует выполнение сценариев, требующих действий юзера, потому контент, которого нет в начальном HTML, с высочайшей вероятностью не попадет в индекс.

        Гугл в схожих вариантах может проиндексировать контент позднее, при рендеринге. Но это значит задержку: странички подольше возникают в поиске, а часть сигналов учитывается не сходу. В итоге оба поисковика могут созидать страничку в усеченном виде, что понижает ее оценку полезности.

        Core Web Vitals. Подгрузка контента уже опосля отрисовки странички нередко приводит к сдвигам макета. Это впрямую усугубляет показатель CLS.

        Отдельная всераспространенная ошибка – когда основное изображение странички отмечают атрибутом loading=»lazy». В этом случае браузер откладывает его загрузку, из-за что замедляется отображение главного элемента странички и усугубляется метрика Largest Contentful Paint (LCP).

        Пример: большие изображения с атрибутом loading=»lazy», показатель LCP нехороший

        Верный подход

        Чтоб избежать схожих заморочек, принципиально верно настроить работу ленивой загрузки. Lazy-load имеет смысл применять лишь для томного медиаконтента за пределами первого экрана, к примеру, для изображений либо видео. Текстовые блоки и коммерчески весомый контент должны сходу находиться в SSR-версии странички.

        Очередной принципиальный момент – предотвращение сдвигов макета. Для этого пространство под изображения и остальные элементы лучше заблаговременно резервировать в CSS. Тогда при их загрузке страничка не будет «прыгать», а характеристики стабильности верстки останутся в норме.

        1. В SSR отсутствуют стоимость и CTA-кнопки

          Сущность ошибки

          Стоимость, клавиши «Приобрести» и «В корзину» пустые либо отсутствуют в SSR, потому что подгружаются лишь опосля гидратации.

          Почему это критично

          Для Yandex’а наличие цены и CTA – главные коммерческие сигналы. Их отсутствие понижает коммерческую релевантность, в особенности по запросам «приобрести» и «стоимость».

          Для Гугл отсутствие этих частей ослабляет E-E-A-T причины (Experience, Expertise, Authoritativeness, Trustworthiness). Поисковик ужаснее распознает веб-сайт как надежный интернет-магазин.

          В итоге страничка теряет позиции в коммерческой выдаче, расширенный сниппет в Гугл по схеме https://schema.org/Product.

          Верный подход

          Принципиально, чтоб главная коммерческая информация была доступна уже в SSR-версии странички. К примеру, базисную стоимость продукта лучше отдавать сходу в HTML, хотя бы в формате «от 10 000 руб.».

          Клавишу «В корзину» также стоит включать в начальную разметку. Даже если до загрузки JavaScript она неактивна, сам элемент должен находиться в HTML – это помогает поисковым системам корректно распознавать коммерческую функцию странички.

          Добавочно полезно добавлять микроразметку, к примеру, Product и Offer, тоже на уровне SSR. Это упрощает поисковым системам интерпретацию данных о товаре и увеличивает шансы на корректное отображение странички в поисковой выдаче.

          1. В SSR врубается излишний, нерелевантный контент

            Сущность ошибки

            В SSR-HTML автоматом вставляется большой юридический либо шаблонный текст в поп-апе, не связанный с главный темой странички:

            • политика обработки индивидуальных данных (полный текст на каждой страничке);

            • пользовательское соглашение;

            • условия доставки, возврата, гарантии дублируются в полном объеме на всех карточках продуктов.

            Принципиально! Извещения о cookie – исключение. Их наличие не вредит SEO, а быстрее подтверждает соответствие требованиям прозрачности.

            Почему это критично

            Поисковики анализируют весь текст в HTML, включая сокрытые блоки. Большенный размер нерелевантного контента размывает текстовую релевантность странички (к примеру, «iPhone 15» пропадает посреди 2000 символов о политике конфиденциальности), понижает долю неповторимого мотивированного текста, может воздействовать на систематизацию странички как малополезной, в особенности в Yandex’е.

            В итоге вырастает риск утраты релевантности по мотивированным запросам, усугубляется ранжирование в конкурентных нишах.

            Верный подход

            Полный текст юридических документов лучше располагать на отдельных страничках, а не выводить его в футере либо модальных окнах на любом URL. Это делает структуру веб-сайта чище и не перегружает HTML излишним контентом.

            Если модальное окно все-же нужно, его содержимое можно подгружать уже на стороне клиента. Основное – не включать таковой контент в SSR, если он не несет SEO-ценности.

            1. Различные SSR-версии для Гугл и Yandex’а: мобильная для Гугл, десктопная для Yandex’а

              Сущность ошибки

              Время от времени команды пробуют «подстроить» веб-сайт под различных поисковых ботов на уровне SSR. К примеру, при User-Agent Googlebot (mobile) сервер дает мобильную версию странички с нескончаемой лентой и облегченной навигацией. А при User-Agent YandexBot – десктопную, где есть пагинация и наиболее полная структура ссылок.

              На 1-ый взор это смотрится как разумный соглашение: любому поисковику показывается версия, которая лучше соответствует его особенностям. Но на практике таковой подход приводит к тому, что практически есть две различные модели веб-сайта. Это усложняет индексацию, диагностику ошибок и делает поведение страничек в поиске наименее прогнозируемым.

              Почему это критично

              Неувязка в том, что в таковой схеме поисковые машины начинают созидать различные версии веб-сайта.

              Гугл получает мобильную страничку, где может не быть обычных частей навигации, к примеру, ссылок на пагинацию, полной цепочки хлебных крошек либо даже части продуктов в каталоге. Yandex, напротив, лицезреет десктопную версию с полной структурой разделов. Но при всем этом он не соображает, как веб-сайт смотрится для юзеров со телефонов, а конкретно мобильный трафик сейчас составляет огромную часть поисковых переходов.

              Из-за этого усложняется и технический аудит. Практически приходится инспектировать не одну, а две различные SSR-версии веб-сайта, отслеживая, как любая из их отдается различным ботам.

              Не считая того, возникает риск расхождений в индексации. Гугл может не узреть часть ассортимента, а Yandex – не учесть настоящие мобильные сценарии использования веб-сайта.

              В итоге различные SSR-версии под различных поисковиков преобразуются в технический долг: поддержка становится труднее, поведение веб-сайта в поиске – наименее прогнозируемым, а риск утраты трафика – выше.

              Верный подход

              Лучше отдавать одну и ту же SSR-версию странички для всех устройств и поисковых ботов, используя адаптивную разметку через CSS.

              Также полезно временами инспектировать сохраненные копии страничек в Гугл Search Console и Yandex Веб-мастере, чтоб убедиться, что главные элементы – цены, клавиши, навигация – находятся и индексируются корректно.

              1. Гидратация как источник «мигания» контента

                Сущность ошибки

                При использовании SSR сервер дает готовую разметку с контентом. Но при загрузке клиентского JavaScript начинается гидратация – процесс перехода от статичной странички к динамической. Если она реализована неправильно, фреймворк сбрасывает состояние компонент в «режим загрузки», и контент исчезает, сменяясь скелетонами. Потом, через несколько сотен миллисекунд, контент возникает опять.

                Зрительно это смотрится так:

                • юзер лицезреет контент;

                • страничка «мигает»;

                • возникают скелетоны;

                • контент ворачивается.

                Почему это критично

                Googlebot сейчас основан на Chromium и при рендеринге страничек практически имитирует поведение обыденного юзера. Он фиксирует зрительные конфигурации на страничке, определяет Core Web Vitals в настоящем времени и оценивает плавность загрузки как показатель свойства. Иными словами, бот глядит на веб-сайт практически так же, как настоящий юзер, и учитывает это при ранжировании.

                Результаты неправильной гидратации

                Верный подход

                Неправильная гидратация – это не попросту «косметический баг». Это прямой удар по метрикам свойства, которые Гугл употребляет для ранжирования. Исправление данной нам ошибки улучшает сразу и пользовательский опыт, и SEO-показатели.

                1. Отсутствие либо ошибки в rel=»canonical»

                  Сущность ошибки

                  В SSR-версии странички время от времени отсутствует тег < link rel="canonical" >, или он формируется неправильно, к примеру, указывается относительный путь либо возникает ошибка в URL при применении фильтров. В таковых вариантах поисковым системам труднее осознать, какая версия странички считается главный.

                  Почему это критично

                  Поисковые машины полагаются на каноническую ссылку, чтоб различать основную страничку от дублирующих, к примеру, при фильтрах, сортировках либо UTM-метках. Если тег < link rel="canonical" > отсутствует в начальном HTML, бот может проиндексировать альтернативную версию URL, что приводит к дублированию контента и понижает эффективность SEO.

                  Верный подход

                  Тег < link rel="canonical" > должен находиться в секции < head > SSR-версии странички. При всем этом принципиально применять абсолютный URL, к примеру, https://site.com/catalog, а не относительный путь.

                  Для основных страничек каждой версии канонический тег обычно ссылается на саму страничку. А для страничек с фильтрами либо сортировками, где контент не уникален, canonical показывает на основную категорию. Таковой подход помогает поисковикам верно определять основную версию странички и избегать заморочек с дублирующимся контентом.

                  Как проверить SSR-верстку: четыре надежных метода

                  Метод 1: начальный HTML под User-Agent поисковика

                  Один из методов проверить, что SSR-страница корректно отдается поисковикам, – применять начальный HTML под различными User-Agent. В Chrome DevTools это делается через вкладку Network:

                  1. Откройте меню ⋮ → More tools → Network conditions.

                  2. В разделе User agent снимите галочку Use browser default и вставьте подходящий User-Agent:

                  • Googlebot (телефон):

                    Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.гугл.com/bot.html)

                  • YandexBot:

                    Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)

                  1. Обновите страничку и в перечне запросов изберите главный HTML-документ (совпадает с URL странички).

                  2. На вкладке Response вы увидите незапятнанный HTML, приобретенный от сервера без конфигураций со стороны JavaScript.

                  Проверьте, что в этом HTML находятся: ссылки < a href="…" > для навигации, стоимость, описание, клавиши действий, текст в FAQ, свойствах и хлебных крошках.

                  Сравнивая ответы под различными User-Agent’ами, вы удостоверьтесь, что структура странички схожа для всех ботов и устройств – это главный момент для корректной индексации.

                  Метод 2: сохраненные копии в системах веб-мастеров

                  Для проверки того, как поисковые машины лицезреют страничку, можно применять интегрированные инструменты.

                  В Гугл Search Console откройте «Проверка URL» и изберите «Просмотреть тестированную страничку». В Yandex Веб-мастере используйте «Проверка странички» и перейдите на вкладку «Версия странички в поисковой базе».

                  Принципиально убедиться, что в обеих копиях находятся все главные элементы: навигация, цены, клавиши, тексты. Любые расхождения меж версиями говорят о вероятной дилемме с SSR либо подгрузкой контента.

                  Метод 3: Поиск по фрагменту контента

                  Чтоб проверить, что текстовый контент странички вправду индексируется, можно пользоваться поиском по неповторимому фрагменту из описания продукта, довольно 5-7 слов.

                  К примеру:

                  • По всему веб-сайту: «неповторимый фрагмент текста» site:example.com

                  • По определенной страничке: «неповторимый фрагмент текста» url:https://example.com/product/123 (URL должен быть в индексе).

                  Если поиск не возвращает результатов, то это сигнал, что контент может отсутствовать в SSR и не был проиндексирован поисковой машиной.

                  Метод 4: Тест без JavaScript

                  В Chrome DevTools можно проверить, что принципиальный контент доступен в SSR, даже если JavaScript отключен. Для этого:

                  1. Нажмите Cmd+Shift+P (Windows: Ctrl+Shift+P) и введите Disable JavaScript, потом изберите подобающую опцию.

                  2. Обновите страничку.

                  Если страничка при всем этом остается читаемой и навигируемой, означает, главный контент находится в SSR. Если же заместо описания и инфы о товаре видна пустота, это сигнал, что SEO-значимый контент загружается лишь на клиенте и не попадает в начальный HTML.

                  Для чего необходимо работать с SSR: настоящие кейсы

                  Чемодан 1

                  Важная часть контента карточки продукта отсутствовала в SSR и не попадала в HTML, который получал поисковый бот. В итоге поисковик не лицезрел ряд главных частей странички:

                  • отзывы о товаре;

                  • подробную информацию о работающей скидке либо акции;

                  • клавишу «Добавить в корзину»;

                  • блок с критериями доставки;

                  • товарные советы («Вас может заинтриговать»).

                  Опосля исправления позиции стали лучше.

                  Трафик без бренда

                  Чемодан 2

                  Цены в каталоге и клавиша «В корзину» в SSR отсутствовали, подгружаясь лишь на клиенте.

                  Опосля исправления позиции в Yandex’е выросли.

                  Чемодан 3

                  Часть перелинковки на выборки была укрыта под клавишей «Показать еще» и не подтягивалась в SSR.

                  Опосля прибавления ссылок из перелинковки в SSR-версию позиции страничек подборок выросли.

                  Чемодан 4

                  В хлебных крошках не выводилась вся цепочка навигации, лишь ссылка на страничку «Каталог».

                  Опосля исправления видимость категорий выросла и в Yandex’е, и в Гугл.

                  Рост позиций в Yandex’е

                  Рост позиций в Гугл

                  Чемодан 5

                  Товарные блоки советов «Похожие продукты» и «Приобретают совместно» не индексировались.

                  Опосля вывода блоков в SSR позиции выросли и в Yandex’е, и в Гугл.

                  Рост позиций в Yandex’е

                  Рост позиций в Гугл

                  Рост трафика из Поиска

                  Чемодан 6

                  Меню не подгружалось в SSR.

                  Видимость в Yandex’е стала лучше опосля опции индексации меню.

                  Рост позиций в Yandex’е

                  SSR в e-commerce: не формальность, а точка риска

                  SSR – это не «галочка» в чеклисте. Это ответственность за HTML, который получает поисковик.

                  Для e-commerce в Рф SSR должен быть:

                  • полным (все главные элементы – в HTML);

                  • семантически корректным (ссылки – через < a >);

                  • единым для всех устройств;

                  • незапятнанным от нерелевантного контента.

                  Если вы реализуете в РФ (Российская Федерация — государство в Восточной Европе и Северной Азии, наша Родина) – не ориентируйтесь лишь на Гугл. Yandex как и раньше просит «добросовестного» HTML. И если ваша SSR-верстка нарушает хотя бы одну из обрисованных выше заморочек, то вы теряете трафик, конверсии и… средства.

                  Оригинал статьи на SEOnews

                  Добавить комментарий

                  Ваш адрес email не будет опубликован. Обязательные поля помечены *