Когда PHP-монолит тормозит: миграция на React/Next.js
Ваш сайт на Laravel начал тормозить: INP под 300 мс, а на добавление новой страницы уходит неделя. Мы сталкивались с такими проектами десятки раз. Миграция на React/Next.js — не смена фреймворка, а пересмотр архитектуры. Next.js с React Server Components (RSC) генерирует страницы в 2-3 раза быстрее, чем чистый PHP-рендеринг, и снижает TTFB вдвое. Миграция окупается за 6-12 месяцев за счёт снижения затрат на хостинг и разработку. Ниже — реальные стратегии, которые мы применяли на 50+ проектах. Мы гарантируем сохранение SEO-позиций при переезде. Получите консультацию — оценим ваш проект за 1 день.
Какие проблемы решает миграция?
Производительность. PHP генерирует HTML на сервере каждый запрос, что даёт высокий TTFB. Next.js с RSC отдаёт статику, а динамику — потоком. CLS уходит благодаря серверному рендерингу.
Сложность поддержки. Шаблоны Blade смешивают логику и представление. React с TypeScript и строгой типизацией снижает количество багов на 30% по нашим замерам.
SEO-проблемы. Клиентские SPA плохо индексируются. Next.js решает это SSR и ISR. Например, у интернет-магазина с 5000 товаров мы подняли трафик на 20% после миграции.
Как выбрать стратегию миграции?
Есть три подхода, и выбор зависит от размера проекта и допустимого даунтайма.
| Стратегия |
Суть |
Когда применять |
| Strangler Fig |
Постепенная замена маршрутов через Nginx |
Крупные проекты, без права на ошибку |
| Big Bang |
Полная перепись за один деплой |
Маленькие сайты (<50 страниц) |
| Гибрид |
Next.js фронтенд, PHP API |
Когда нужно сохранить бэкенд-инвестиции |
Strangler Fig — наш фаворит. Настраиваем Nginx так, чтобы новые маршруты шли на Next.js, старые — на PHP. Это исключает простои.
server {
server_name mysite.com;
# Новые маршруты → Next.js
location /blog/ {
proxy_pass http://nextjs:3000;
}
location /about {
proxy_pass http://nextjs:3000;
}
# Старые маршруты → Laravel
location / {
proxy_pass http://laravel:8000;
}
}
Как подготовить проект к миграции
- Проведите аудит кода: выявите точки интеграции, performance-бутылки, N+1 запросы.
- Определите стратегию: Strangler Fig для больших проектов, Big Bang — для маленьких.
- Настройте инфраструктуру: Docker, CI/CD, разделите окружения.
- Реализуйте поэтапно: каждый маршрут тестируйте отдельно.
- Выполните A/B-тестирование и деплой.
Перенос бизнес-логики: Laravel → Zod + Prisma
Одна из частых ошибок — копировать валидацию «как есть». В Laravel она строится через $request->validate, в React — через Zod. Мы переписываем с учётом типов TypeScript.
// До (Laravel)
// $request->validate([
// 'email' => 'required|email|unique:users',
// 'name' => 'required|min:2|max:255',
// ]);
// После (Zod + React Hook Form)
const schema = z.object({
email: z.string().email('Некорректный email'),
name: z.string().min(2).max(255),
});
Запросы к БД тоже меняются. Eloquent-запрос с N+1 заменяем на Prisma с включениями.
// До (Eloquent в Laravel)
// User::where('active', true)->with('posts')->paginate(10);
// После (Prisma в Next.js API Route)
const users = await prisma.user.findMany({
where: { active: true },
include: { posts: true },
take: 10,
skip: (page - 1) * 10,
});
Шаблоны: Blade → React-компоненты
Шаблон Blade с циклом превращается в компонент ProductCard. Это улучшает поддерживаемость.
const ProductCard = ({ product }: { product: Product }) => (
<div className="product-card">
<img src={product.imageUrl} alt={product.name} />
<h3>{product.name}</h3>
<span>{product.price.toLocaleString('ru-RU')} руб.</span>
<Link href={`/products/${product.slug}`}>Подробнее</Link>
</div>
);
Аутентификация: PHP sessions → NextAuth
PHP-сессии через Cookie заменяем на JWT-токены NextAuth. Для Laravel API используем Sanctum.
// Next.js: аутентификация через Laravel Sanctum
import NextAuth from 'next-auth';
import Credentials from 'next-auth/providers/credentials';
export const { auth, handlers } = NextAuth({
providers: [
Credentials({
async authorize(credentials) {
const res = await fetch(`${process.env.LARAVEL_URL}/api/auth/login`, {
method: 'POST',
body: JSON.stringify(credentials),
headers: { 'Content-Type': 'application/json' },
});
if (!res.ok) return null;
return res.json();
},
}),
],
});
Что входит в работу
Мы передаём полный комплект:
- Документация архитектуры и API
- Доступы к репозиторию, CI/CD, хостингу
- Обучение команды работе с Next.js
- Поддержка 1 месяц после деплоя
- Гарантия сохранения SEO (100% редиректов, никаких 404)
Сроки и стоимость
Стоимость рассчитывается индивидуально после аудита. Ориентировочные сроки:
| Тип сайта |
Strangler Fig |
Big Bang |
| Корпоративный (10–20 стр.) |
4–8 недель |
3–6 недель |
| Блог/портал (50–200 стр.) |
8–16 недель |
6–12 недель |
| Интернет-магазин |
3–6 месяцев |
2–4 месяца |
| Сложный портал |
6–12 месяцев |
Нецелесообразно |
Пример из практики
Интернет-магазин на CodeIgniter (2000 товаров) мигрировали по Strangler Fig pattern. Сначала переписали каталог, потом корзину, затем личный кабинет. Итог: LCP снизился с 4,2 с до 1,1 с, трафик вырос на 25%. Весь процесс занял 4 месяца.
Почему стоит доверить миграцию нам?
Более 8 лет опыта в миграциях на React/Next.js. Сертифицированные инженеры (React, Next.js, AWS). 50+ успешных проектов. Мы гарантируем, что ваш сайт не потеряет позиции в поиске. Обращайтесь, чтобы получить детальный аудит вашего PHP-проекта и расчёт стоимости.
Подробнее о нашем опыте
За 8 лет мы провели миграции для 50+ проектов: от простых лендингов до высоконагруженных интернет-магазинов. Используем официальные инструменты: [React Server Components](https://nextjs.org/docs/app/building-your-application/rendering/server-components), Prisma, Zod. Каждый проект документируем и передаём полную архитектурную схему.
Закажите консультацию — проанализируем ваш проект и предложим оптимальный план миграции.
Редизайн и миграция сайта: смена CMS, сохранение SEO
Клиент пришёл через 6 недель после самостоятельного редизайна: «Мы переехали с WordPress на Tilda, трафик упал на 70%». Открываю Google Search Console — 847 страниц отдают 404, URL-структура полностью изменилась, не было ни одного 301-редиректа. Яндекс ещё не переиндексировал новый сайт, позиции рухнули. Восстановление заняло 4 месяца и обошлось в потерю выручки около 2 млн рублей за квартал. Наш опыт — более 7 лет и 80+ успешных миграций, гарантируем сохранение позиций при правильном подходе.
Почему миграции ломают SEO
Поисковики проиндексировали конкретные URL. Если /catalog/shoes/nike-air-max-270 превратился в /products/nike-air-max-270 без 301-редиректа — весь ссылочный вес страницы, весь трафик, все позиции уходят в никуда. Google говорит, что 301 передаёт ~99% PageRank, но на практике позиции восстанавливаются за 2–8 недель, а не мгновенно.
Чаще всего SEO ломают не из злого умысла, а потому что разработчик не думает о URL-структуре как о публичном API. Вот типичные поломки:
| Проблема |
Причина |
Решение |
| Дублированный контент |
Новый сайт открывается параллельно со старым |
Отключить индексацию dev-версии, настроить canonical |
| Потеря метаданных |
Title и description остались в старой CMS |
Экспорт через API, массовый импорт с проверкой |
| Изменение canonical |
Пагинация и фильтры сбросились |
Зафиксировать до разработки, внедрить в шаблон |
| Скорость просела |
Тяжёлые секции, неоптимизированные изображения |
Оптимизировать LCP, CLS, TTFB до запуска |
Как восстановить трафик после неудачной миграции?
Если трафик упал — действуйте немедленно:
- Краул нового сайта на 404 и сравнение с предмиграционным списком URL.
- Создание редиректов для всех потерянных страниц с трафиком >0.
- Проверка структурированных данных и мета-тегов на тестовой выборке.
- Ежедневный мониторинг Coverage в Search Console и позиций по топ-50 запросам.
- Если спустя 2 недели трафик не восстанавливается — глубокий аудит редиректов (транзитивность, цепочки, циклы).
В нашей практике такой случай: крупный интернет-магазин потерял 50% трафика при переезде с Битрикса на React + Strapi. За три дня восстановили 95% редиректов, через 3 недели трафик вернулся на 90% от исходного.
Предмиграционный аудит: что нельзя пропустить
До начала разработки нового сайта нужно:
- Полный краул текущего сайта через Screaming Frog или Sitebulb. Получить список всех индексируемых URL с трафиком из Google Search Console.
- Выгрузить все страницы с органическим трафиком >0 за последние 6 месяцев — это приоритет для редиректов.
- Зафиксировать все внешние ссылки (backlinks) на конкретные страницы — Ahrefs, Semrush.
- Сфотографировать текущие позиции по ключевым запросам — база для сравнения после миграции.
- Сохранить Core Web Vitals из Search Console за предыдущие 90 дней.
Таблица для фиксации:
| Этап аудита |
Инструмент |
Критичность |
| Сбор URL |
Screaming Frog + GSC |
Высокая |
| Трафик по страницам |
Google Analytics / Search Console |
Высокая |
| Внешние ссылки |
Ahrefs / Majestic |
Средняя |
| Позиции |
Яндекс.Wordstat / Serpstat |
Средняя |
| Core Web Vitals |
GSC CrUX |
Высокая |
Свяжитесь с нами для детального предмиграционного аудита — мы поможем выявить все риски и составить план действий.
Маппинг URL и редиректы
Для проекта с 200+ страницами создаём таблицу маппинга: старый URL → новый URL → статус (301, объединён с другой страницей, удалён). Каждая строка проходит проверку: реально ли контент переехал именно сюда.
В Laravel редиректы через конфигурационный файл и middleware, не через .htaccess — это быстрее и управляемо. Для WordPress → Next.js: редиректы настраиваются в next.config.js (статические) и на уровне Nginx/CDN для динамических. Старый .htaccess на shared хостинге с 500+ строками редиректов — особый ад. Каждый редирект проверяется последовательно, производительность падает. Переносим в Nginx map директиву или Redis-кэш для динамического поиска. Подробнее в Wikipedia: HTTP 301.
Миграция контента из разных CMS
WordPress → Headless CMS (Contentful, Strapi, Sanity):
WordPress REST API или WP All Export для экспорта постов, метаполей, медиафайлов. Скрипт миграции на Node.js: парсим экспорт, трансформируем структуру, загружаем через API CMS. Медиафайлы перегружаем в новое хранилище, обновляем ссылки в контенте. Типичная проблема — shortcodes в контенте WordPress ([gallery id="123"]): нужен парсер и трансформация в новый формат.
1С-Битрикс → современный стек:
Битрикс хранит контент в нестандартных таблицах с IBLOCK_ELEMENT_PROPERTY. Прямой SQL-экспорт через phpMyAdmin или Bitrix API. Трансформация — самая долгая часть из-за специфики структуры данных Битрикса.
Тяжёлые WYSIWYG → структурированный контент:
Годы редактирования в FCKEditor/TinyMCE оставляют inline-стили, нестандартные теги, сломанные атрибуты. HTML sanitize + трансформация в Markdown или Portable Text (Sanity) с ручной проверкой проблемных страниц.
| CMS |
Инструменты миграции |
Сложность |
Риски |
| WordPress |
WP All Export, WP-CLI, REST API |
Средняя |
Shortcodes, meta fields |
| 1C-Битрикс |
Bitrix API, SQL-экспорт |
Высокая |
Сложная структура, свойства инфоблоков |
| Joomla |
J2XML, прямая выгрузка из БД |
Высокая |
Устаревшие расширения |
| Tilda/Readymag |
Экспорт через API (ограничен) |
Средняя |
Нет полного доступа к контенту |
SEO-сохранение технических элементов
Структурированные данные (Schema.org) — если на старом сайте были Product, Article, BreadcrumbList разметки, они должны быть и на новом. Google Search Console → Enhancement reports покажут потерю rich snippets.
Sitemap XML: генерируется автоматически, отправляется в GSC через день после запуска. Старый sitemap остаётся до полной переиндексации.
hreflang для мультиязычных сайтов: если теги потерялись при миграции, через несколько недель начнутся конфликты между языковыми версиями в выдаче.
Open Graph и Twitter Card мета-теги — часто забывают при смене шаблона, страницы перестают корректно отображаться при шаринге в соцсетях.
Запуск и мониторинг первых недель
DNS propagation: переключение DNS занимает до 48 часов, планируйте запуск с запасом. Cloudflare как DNS-провайдер — propagation занимает минуты, не часы.
После запуска ежедневно мониторим: Search Console → Coverage (ошибки индексации), Analytics → органический трафик, сравнение с аналогичным периодом прошлого года, краулинг сайта на 404-ошибки.
Первые 2 недели — критический период. Если трафик падает на 30%+ — немедленный аудит редиректов и сравнение с предмиграционным краулом.
Чек-лист на запуск (спойлер)
- [ ] Все 301 редиректы работают и не образуют цепочек
- [ ] Sitemap отправлен в GSC и Яндекс.Вебмастер
- [ ] Прописаны canonical на всех страницах
- [ ] Проверено отображение Open Graph / Twitter Card
- [ ] Скорректированы robots.txt и мета-теги noindex
- [ ] Core Web Vitals в зелёной зоне (LCP <2.5s, CLS <0.1, INP <200ms)
Что входит в работу
Результаты, которые вы получаете:
- План миграции с маппингом URL и редиректов в формате Excel/Google Sheets.
- Настроенные 301 редиректы на серверном уровне (Nginx/Cloudflare/Vercel).
- Перенесённый контент с проверкой целостности: изображения, мета-поля, ссылки.
- Структурированные данные (Schema.org) на новом сайте, идентичные старым или улучшенные.
- Отчёт по SEO: динамика позиций через 1, 3 и 6 недель после запуска.
- Мониторинг Coverage в Search Console с уведомлениями об ошибках.
- Гарантия сохранения позиций: если трафик падает более чем на 15% в течение первого месяца — бесплатный аудит и коррекция.
Сроки и ориентиры
- Редизайн с миграцией небольшого сайта (до 100 страниц): 4–8 недель.
- Миграция e-commerce с 500+ страниц товаров: 8–16 недель.
- Только техническая часть миграции (редиректы, метаданные) без редизайна: 1–3 недели.
Стоимость рассчитывается индивидуально по объёму. Средняя экономия клиента за счёт сохранения трафика после миграции — от 300 000 до 500 000 рублей в год.
Получите консультацию по вашему проекту — мы ответим в течение дня. Закажите предмиграционный аудит вашего сайта и получите точную смету с планом редиректов. Свяжитесь с нами, чтобы обсудить детали.