Artean

Миграция на Next.js: подробный план переезда без потери SEO

Миграция с классического SPA на Next.js — момент, когда фронтенд из «приложения сам для себя» превращается в часть продуктовой стратегии: скорость, SEO, эксперименты, международные версии. Этот текст полезен тимлидам, продуктовым владельцам и CTO, у кого уже есть React‑проект и накопились проблемы с производительностью и индексируемостью. Разберём, когда переход действительно даёт выигрыш, как спланировать migration так, чтобы не положить прод, и какие настройки Next.js превращают его из «ещё одного фреймворка» в powerful инструмент роста. Вся миграция на next js — на основе реальных кейсов интернет‑магазинов, CRM и сложных веб‑сервисов.

Миграция на Next.js: безопасный перенос проекта и рост скорости

Когда миграция на Next.js действительно оправдана

Перенос на Next.js — не про красивый stack в резюме, а про конкретные метрики. Если сейчас SPA грузится 6–8 секунд на мобильных, Core Web Vitals упали в жёлтую зону, а маркетинг жалуется на плохой органический трафик, смена подхода к rendering уже даёт прямую экономику.

Сигналы, что текущий проект не справляется:

  • первая отрисовка страницы (LCP) уходит за 3 секунды, особенно на слабых устройствах;
  • JavaScript‑бандл разросся до нескольких мегабайт, без чёткого code splitting;
  • сложно добавлять новые pages и маршруты: legacy‑routing, запутанный router, дублирование логики;
  • поисковые роботы видят пустой html‑file и зависят от нестабильного client‑side rendering;
  • любая правка в сборке ломает половину app, потому что всё завязано на единую точку входа.

В этих условиях Next.js даёт выигрыш за счёт:

  • server side rendering и static generation: контент уходит на сервер ещё до загрузки JS;
  • встроенного router и файловой структуры pages / app, где routing лежит в файловой системе по умолчанию (default);
  • готовой оптимизации image, css, статических ресурсов и поддержки CDN;
  • чёткого деления на server / client components: тяжёлая логика и data‑fetching переезжают на сервер.

Где это особенно чувствуется:

  • интернет‑магазины и каталоги: десятки тысяч товаров, фильтры, A/B‑test карточек;
  • контентные проекты: статьи, лендинги под рекламу, категории и теги, которым нужен static экспорт;
  • B2B‑сервисы и CRM, где одновременно важны SEO страницы about, pricing и тяжёлый личный кабинет.

Отложить migration можно, если:

  • у вас маленькое внутреннее React‑приложение, которое никто не ищет в поиске;
  • один лендинг с минимальной логикой, который проще пересобрать как чистый static HTML;
  • архитектуры ещё нет: переносить банально нечего, сначала стоит структурировать код.

Критерии готовности команды: уже есть React, понимаете, что такое SSR, hydration, знаете, как работает export функций вроде getServerSideProps или server actions, и можете выделить 1–2 спринта не только на новые features, но и на рефакторинг.

Пошаговый план безопасной миграции на Next.js

Без плана migration легко превратить проект в вечный «переписываем на Next», где годами живут два стека. Гораздо эффективнее воспринимать переход как отдельный проект с метриками, задачами и ограничениями.

Шаг 1. Аудит текущего проекта и цели

  • замерьте LCP, FID, CLS через Lighthouse, WebPageTest и реальные данные из Analytics;
  • зафиксируйте размер JS‑бандла и CSS, время сборки, количество routes и динамических pages;
  • выделите ключевые сценарии: оформление заказа, каталог, кабинет, страницы about / blog;
  • сформулируйте цели: минус 30% TTFB, плюс 20–40% органического трафика на критичных страницах, сокращение времени вывода новой feature с недели до пары дней.

Шаг 2. Выбор стратегии миграции

  • Big bang: полностью переписать project на Next.js. Подходит для небольших приложений и команд, уже имевших дело с server side rendering и DevOps. Быстро по результату, рискованно для бизнеса.
  • Поэтапная миграция (strangler pattern):
  1. оборачиваете текущий фронт в единый endpoint;
  2. новые pages и критичные маршруты реализуете на Next.js app router;
  3. старые части постепенно переносятся или удаляются.
  • Зелёный проект: под новый крупный модуль запускается отдельный Next.js‑app, затем общие components и функции переносятся обратно в основное ядро.

Шаг 3. Архитектура и подготовка

  • решите, будете ли использовать новый app router или классический pages router. App‑подход проще для разделения server / client components и вложенного routing;
  • отделите бизнес‑логику от UI: вынесите работу с API, форматирование данных и доменные сущности в отдельные модули, чтобы их можно было import и use из любого слоя;
  • спроектируйте структуру папок: feature‑based (cart, catalog, profile) или domain‑based (orders, payments, users).

Шаг 4. Миграция первых модулей

  • выберите одну вертикаль: например, каталог товаров от URL‑маршрута до запроса к server API;
  • настройте SSR или SSG / ISR: товары и категории хорошо ложатся в static + revalidate, а персональная корзина — в SSR;
  • перенесите авторизацию, работу с cookies, заголовками и middleware: убедитесь, что login‑flow и защита страниц работают одинаково;
  • проведите тест по производительности: локально и на staging‑среде, сравните до и после.

Шаг 5. Тестирование и параллельный запуск

  • организуйте A/B‑test или канареечный релиз: часть трафика идёт на старый React‑SPA, часть — на Next.js‑version;
  • сделайте нагрузочный test, чтобы понять, как сервер справляется с пиками SSR;
  • подключите мониторинг: логи ошибок, трейсинг медленных function на backend side, алерты по Core Web Vitals.

Шаг 6. Финальный перенос и «уборка хвостов»

  • отключите старые маршруты, удалите неиспользуемый legacy‑code и конфиги сборки;
  • обновите документацию: как запускать install, где лежат shared‑components, как устроен routing и data‑layer;
  • проведите внутренний воркшоп для команды: разбор типичных паттернов в Next.js, подходов к export server actions, работе с static file и image.

Как извлечь максимум прироста скорости после переезда

Сам факт использования Next.js не гарантирует быстрый app. Основной выигрыш даёт грамотный выбор режима rendering и дисциплина в работе с ресурсами.

Выбор режима рендеринга

  • SSR — для персонализированных страниц: кабинет, корзина, рекомендации. Здесь важны актуальные данные, а TTFB всё равно будет платой за персонализацию.
  • SSG — для стабильных страниц: статьи, about, FAQ, категории без частых обновлений. Это почти static‑сайт с React‑комфортом.
  • ISR — компромисс для крупных каталогов, блогов и новостных лент: генерация по запросу и фоновые обновления каждые N секунд.

Оптимизация ресурсов и бандла

  • используйте next/image и внешнюю CDN: responsive‑image, автоматический WebP, оптимизация без ручного вмешательства;
  • делайте динамический import тяжёлых components: графики, сложные виджеты, чат‑виджеты грузите по событию, а не сразу;
  • анализируйте бандл через bundle analyzer: выносите редко используемые features в отдельные чанки, избавляйтесь от крупных библиотек, которые можно заменить точечным code.

Оптимизация клиентской части

  • минимизируйте количество client components: всё, что может работать на server side (fetch, сортировки, фильтры), оставляйте там;
  • разделяйте критический и некритический JS: скрипты аналитики грузите с defer или lazyOnload через встроенные механизмы Next.js;
  • используйте кэширование: ETag, Cache-Control, разумный срок жизни static ресурсов и css.

Контроль результатов

Регулярно замеряйте метрики ключевых страниц: карточка товара, checkout, посадочные под рекламу. Показательный кейс: перенос большого списка товаров с client‑side rendering на SSR + ISR и кэширование даёт сокращение LCP в 1,5–2 раза и прирост конверсии в корзину на 5–10% по данным наших проектов.

Когда стоит привлечь команду под миграцию

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

  • крупный интернет‑магазин или маркетплейс: простои стоят денег, каждая секунда скорости влияет на выручку;
  • монолитный legacy‑frontend с бессистемным React‑кодом, где никто не понимает полный граф зависимостей;
  • экосистема из нескольких web‑версий и мобильных приложений, которые нужно унифицировать на едином Next.js‑стеке.

Что даёт подрядчик:

  • аудит архитектуры и рисков migration, план по шагам с оценкой сроков и бюджета;
  • пилотный модуль на Next.js: по нему видно реальный выигрыш по скорости и SEO до полного переезда;
  • поддержку запуска: настройку monitorинга, alertов, доработку routing, SSR и кэшей по живым метрикам.

Наша команда разрабатывает веб‑сервисы, мобильные приложения, CRM‑системы, игры, сайты и интернет‑магазины на Next.js и React. Если нужен безопасный перенос проекта с фокусом на скорость и рост, можем взять migration «под ключ» — от аудита и архитектуры до релиза и сопровождения.