ZonaForum

📌 Органика Яндекс упала после переезда на Next.js App Router — как проверить SSR и индексацию

ПоделитьсяTelegramVK
@seo_anna0Участник
15 сообщ.

Коллеги, нужен разбор по фактам.

Сайт на Next.js 14 (App Router), переехали с PHP/WordPress ~3 недели назад. В Яндекс.Вебмастере:

  • покрытие: часть URL ушла в «Исключённые» / «Редирект» / «Не удалось загрузить»;
  • по ключевым коммерческим посадочным просадка 35–50% показов и кликов (Метрика + Вебмастер);
  • Google Search Console почти держится, Яндекс — просел сильнее.

Что уже сделали:

  1. 301 со старых ЧПУ на новые (карта редиректов ~800 URL).
  2. sitemap.xml отдаётся, robots.txt открыт.
  3. В «Просмотр как робот» Яндекса на части страниц вижу почти пустой body / скелетон, хотя в Chrome контент есть.
  4. title/H1 вроде на месте, но meta description и основной текст в исходнике (view-source) на части маршрутов нет — только после гидрации.

Стек: Next.js App Router, часть блоков client components, данные через fetch на сервере + client-side для фильтров/каталога. Хостинг Node (next start), без edge.

Вопросы:

  • как системно проверить, что Яндекс получает SSR HTML, а не пустой shell;
  • что смотреть в next.config (headers, trailingSlash, redirects) и в разметке app/;
  • типичные причины, почему Google ест, а Яндекс — нет после переезда на Next.

Ниша: услуги B2B, коммерческие посадочные + фильтры каталога. Нужен чеклист именно под НЧ/СЧ коммерцию, не «сделайте контент лучше».

@kirill_tech0Участниклучший ответ
14 сообщ.

Яндекс хуже переживает client-only shell, чем Googlebot. После Next App Router типичный сбой: HTML без товарного/услугового текста → слабая индексация → просадка именно в Яндексе.

Шаг 1. Зафиксировать, что реально отдаёт сервер (не DevTools DOM)

# сырой HTML без JS
curl -sL -A "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" \
  "https://example.com/usluga/" | head -c 8000

В ответе должны быть: <title>, один H1, абзацы оффера, цена/УТП, внутренние ссылки. Если видите только пустые layout-слоты — для Яндекса страница «пустая».

Повторите для:

  • 5 коммерческих URL с просадкой;
  • 2 URL фильтров/каталога;
  • 1 URL, который Вебмастер пометил «не удалось загрузить».

Сверьте с «Просмотр как робот» и с кодом ответа (200 vs 3xx/5xx/soft-404).

Шаг 2. Вернуть критичный контент в Server Components

  1. Посадочные услуги/категории — Server Component по умолчанию; 'use client' только на интерактиве (форма, виджет).
  2. Данные для title/H1/текста — fetch на сервере (не useEffect).
  3. generateMetadata — title/description с сервера, не из client state.
  4. Фильтры: либо SSR первых экранов + rel=canonical на корень кластера, либо noindex для тонких комбинаций.
  5. Редиректы — один канонический вариант (со/без trailing slash), без цепочек.

Контроль через 7–14 дней

  • Вебмастер → Индексирование: снижение «не удалось загрузить».
  • Повторный curl с YandexBot-UA: полный текст в первом ответе.
  • Не наращивать ссылки, пока SSR/индексация по чеклисту не зелёные.
@max_ops0Участник
8 сообщ.

Добавлю к curl-проверке: смотрите ещё Content-Type и Content-Encoding. Иногда CDN отдаёт боту закешированный soft-404 или старый 301-цикл.

Практический чеклист после деплоя:

  1. В nginx/Cloudflare — не резать YandexBot по JS-challenge.
  2. trailingSlash в next.config = как в карте 301 (иначе дубли).
  3. Для фильтров каталога — отдельный robots/canonical policy, иначе тысячи полупустых URL в «Исключённых».

Если после SSR-фикса через 2 недели URL всё ещё «не удалось загрузить» — смотрите 5xx/timeout на SSR fetch к CMS (у нас так падал один раздел).

Чтобы ответить, войдите.

Похожие темы

Ещё по разделу и тегам — не уходите с пустыми руками