Если нужно перенести старый SPA на SSR без потери URL, нельзя начинать с переписывания компонентов. Сначала нужна карта маршрутов, SEO-страниц, параметров, редиректов и данных, которые сейчас видят пользователи и поисковые системы.

Главное правило миграции: старые важные URL должны либо открываться с тем же содержанием, либо отдавать корректный 301 на новый адрес. SSR должен улучшить индексацию, а не создать новые дубли и 404.

Что проверить в первую очередь

  • Соберите список всех индексируемых URL из sitemap, логов, Метрики и Search Console.
  • Разделите страницы на публичные SEO-страницы, кабинет, фильтры и технические маршруты.
  • Зафиксируйте текущие title, description, h1, canonical и структуру контента.
  • Проверьте, какие данные нужны для серверного рендера каждой страницы.

Основные причины

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

  • SPA-роутинг и серверный роутинг расходятся по правилам обработки URL.
  • Фильтры и параметры создают дубли страниц без canonical.
  • SSR-страница отдает контент только после клиентского запроса.
  • Старые URL не включены в rewrite или redirect-карту.

Пошаговая диагностика

  • Проверьте текущие URL через curl: какой HTML видит бот без JS.
  • Сравните список URL из логов с роутами нового приложения.
  • Найдите страницы с поисковым трафиком и проверьте их будущий HTML.
  • Проверьте обработку 404, 301, trailing slash и регистра символов.
  • Проверьте гидрацию: нет ли расхождения server/client HTML.

Как исправить

Исправление лучше делать небольшими шагами. Сначала зафиксируйте текущее поведение, затем внесите одну правку, проверьте контрольный сценарий и только после этого переходите к следующему месту. Так проще понять, какая именно правка решила проблему.

  • Сделайте таблицу соответствия старых и новых URL.
  • Настройте SSR-роуты для всех важных публичных страниц.
  • Сохраните SEO-теги и контентную структуру там, где URL остается прежним.
  • Добавьте 301 только там, где URL действительно меняется.
  • Обновите sitemap и robots после тестовой проверки.

Безопасный план решения

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

Как проверить результат

  • Старые важные URL открываются с 200 или корректным 301.
  • HTML содержит title, h1 и основной контент до выполнения JS.
  • Нет массовых 404, цепочек редиректов и дублей canonical.
  • Метрика и логи показывают стабильную отдачу страниц после релиза.

Чего не стоит делать

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

Как не допустить повторения

  • Перед релизом прогоняйте список URL автоматической проверкой статусов.
  • Не меняйте URL-структуру без необходимости и карты редиректов.
  • Разделяйте клиентские страницы кабинета и публичные SEO-страницы.
  • Сравнивайте HTML старой и новой страницы перед выкладкой.

Что подготовить перед исправлением

  • Ссылку на проблемную страницу, кабинет, заказ, интеграцию или API-метод.
  • Точное время ошибки и пример пользователя, товара, платежа или запроса.
  • Скриншот, текст ошибки, лог веб-сервера, приложения или webhook-события.
  • Краткое описание ожидаемого поведения: что должно было произойти вместо ошибки.

Частые вопросы

SSR всегда улучшает SEO?

Нет. SSR помогает, если сервер реально отдает контент и правильные мета-теги. Плохая миграция может дать больше 404 и дублей.

Можно ли оставить старые URL?

Да, и часто это лучший вариант. Если структура уже приносит трафик, менять ее стоит только при понятной причине.

Когда стоит обратиться за помощью

Для миграции нужны текущий список URL, доступ к проекту, данные аналитики и понимание, какие страницы критичны для поиска.

Итог

Миграция SPA на SSR должна начинаться с карты URL и проверки HTML, а не только с выбора фреймворка. Я могу подготовить план, роутинг, редиректы и проверку SEO-страниц перед запуском.