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

Когда миграция на 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):
- оборачиваете текущий фронт в единый endpoint;
- новые pages и критичные маршруты реализуете на Next.js app router;
- старые части постепенно переносятся или удаляются.
- Зелёный проект: под новый крупный модуль запускается отдельный 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 «под ключ» — от аудита и архитектуры до релиза и сопровождения.
