Миграция на headless без потери SEO: план по шагам

Автор: WebGoodPeople

  • SEO
  • Migration
  • Headless

Headless‑миграция убивает SEO, если планировать её как обычный редизайн. URL‑структура меняется, canonical уезжает, hreflang ломается, sitemap опаздывает на пару недель — и через месяц после переезда вы смотрите в Search Console на минус 40% органики и не понимаете, как откатиться.

Делимся планом, по которому переводим магазины с 1С‑Битрикс на Next.js. На каждом этапе есть критерий «можно идти дальше». Если критерий не выполняется — не движемся. Это медленнее, но не приходится потом разбирать постмортем.

1. URL‑structure: 1:1 или строгий redirect‑map

Первое решение, которое нужно зафиксировать до старта разработки — что будет с URL. Вариантов два, и оба легитимные:

  • 1:1. Старые URL‑ы Битрикса сохраняются на новом фронте побайтно. Это правило по умолчанию: новый Next.js‑роутер принимает /catalog/
    //, обрабатывает их так же, как Битрикс, отдаёт ту же страницу. SEO‑история, ссылки из писем, закладки пользователей, индекс Google — всё продолжает работать без 301.
  • Новая структура + 301 map. Если URL‑ы переезжают сознательно (например, убирается завершающий слэш, меняются slug‑и категорий) — каждый старый URL должен иметь явный 301 на новый. Map составляется до разработки, не после. Включается в момент переключения трафика, не позже.

Критерий выхода: либо список «всё 1:1, исключений нет», либо CSV с парами old_url → new_url на каждый индексируемый URL Битрикса. Не вылавливать редиректы постфактум — за каждую промашку платим органикой.

2. Canonical: явный self‑reference, без cross‑locale ошибок

На каждой странице нового фронта добавляем явный на саму себя (без UTM, без хешей, в той самой версии URL, которая попадёт в sitemap). Без этого Google имеет право выбрать любой вариант — с www, без www, с трейлинг‑слэшем, без — и склеить ваши страницы как ему удобно.

Отдельная боль: cross‑locale canonical. Если у вас русская и английская версии сайта, RU‑страница должна канонизироваться сама на себя (/ru/foo), а не на EN‑зеркало. EN‑страница — сама на себя. Hreflang отвечает за связь, canonical — за самоидентификацию. Путаница тут приводит к выпадению одного из языков из индекса целиком.

3. Hreflang: полный цикл взаимных ссылок

Если сайт мультиязычный, hreflang должен быть на каждой странице в обоих локалях. Минимальный набор тегов на RU‑странице:



Тот же блок — на EN‑странице, с противоположной симметрией. Если на одной стороне ссылка есть, а на второй нет — Google трактует как ошибку и игнорирует hreflang целиком. Самый частый баг: новые страницы добавили, hreflang забыли, поисковик неделю пытается понять, какую страницу показывать в SERP, и в итоге показывает не ту.

Критерий выхода: автоматический e2e‑тест в CI, который проходит по карте сайта, дёргает hreflang каждой страницы и проверяет обратную ссылку. Без теста человек обязательно где‑то пропустит.

4. Sitemap delta: что добавилось, что ушло, в какой день

Новый sitemap.xml генерируется фронтом (в Next.js это обычно app/sitemap.xml/route.ts) и должен содержать только индексируемые URL: без thank-you, без /api/*, без legal, без noindex‑страниц. Lastmod — реальная дата последнего изменения контента, а не дата сборки.

Перед переключением трафика готовим три файла:

  • Sitemap старого сайта — снимок состояния до миграции.
  • Sitemap нового сайта — что отдаёт Next.js в день‑X.
  • Delta‑отчёт — какие URL ушли (должны быть закрыты 301), какие добавились (должны индексироваться), какие остались без изменений.

Delta — это основной артефакт, по которому проверяется правильность миграции на стороне поисковика. Без него вы будете гадать, индексируется ли страница, по графику в Search Console.

5. Google Search Console и Яндекс.Вебмастер: ручная подача

После запуска новый sitemap отправляется в обе панели вручную. Не ждём, пока поисковик сам найдёт изменения — это занимает недели, и за это время URL‑ы успевают потерять позиции.

  • В Google Search Console: Sitemaps → Add new → /sitemap.xml. Через час проверяем, что sitemap прочитан, ошибок 0.
  • В Яндекс.Вебмастере: Индексирование → Файлы Sitemap. Дополнительно — раздел Переобход страниц, куда вручную добавляем топ‑20 самых трафиковых URL‑ов первой недели.
  • IndexNow (Bing, Yandex) — если фронт умеет (у нас в Frontbox умеет), посылаем сигнал об изменениях сразу. Это даёт переиндексацию за часы, а не дни.

6. Pre/Post measurement: фиксируем метрики до и после

За две недели до переключения трафика снимаем baseline:

  • Органический трафик в день — медиана по 14 дням.
  • Топ‑50 запросов и позиции по каждому (Search Console).
  • Топ‑200 страниц по показам и кликам.
  • Core Web Vitals: LCP, INP, CLS (CrUX или Lighthouse).
  • Доля проиндексированных страниц от sitemap‑а.

После переключения смотрим те же метрики каждый день первые две недели, потом еженедельно. Если что‑то проседает больше чем на 10% за пределами обычной волатильности — расследуем сразу, не ждём «может само вернётся».

На headless‑миграции с правильной 1:1 структурой Core Web Vitals улучшаются с первого дня (это положительный ранжирующий сигнал), а трафик не должен проседать совсем. Если просел — что‑то сломали технически. Чек‑лист расследования в следующем разделе.

7. Fallback rollback: план Б, который реально работает

Самое недооценённое — план Б. Если новая версия после раскатки рушит ранжирование, мы должны уметь откатить трафик за минуты, а не часы.

Как мы это делаем на Frontbox:

  • Старый Битрикс‑фронт остаётся развёрнутым и работоспособным в течение первого месяца после миграции.
  • Переключение трафика — через DNS или edge‑router (Cloudflare Workers, nginx upstream). Не через большой деплой.
  • Поэтапная раскатка: 5% → 25% → 100% с паузой 2–3 дня на каждой ступени, чтобы успеть увидеть проблему до того, как пострадает 100% трафика.
  • Триггеры автоматического отката: 5xx>1%, LCP>4s на p75, падение конверсии на проверочной когорте более 15%.

Если триггер сработал — трафик автоматически уезжает обратно на Битрикс. Дальше — разбор инцидента, а не паника.

Что должно быть готово до дня‑X

Чек‑лист, по которому мы принимаем решение запускать переключение трафика:

  • URL‑map (1:1 или 301) подтверждён и подписан.
  • Canonical отдаётся правильно на всех индексируемых URL — проверено e2e‑тестом.
  • Hreflang между ru/en полный, симметричный — проверено e2e‑тестом.
  • Sitemap.xml собирается на фронте, lastmod — реальный.
  • Delta‑отчёт по sitemap до/после — на руках.
  • Robots.txt: AI‑боты разрешены, чувствительные пути закрыты.
  • OG/Twitter теги перенесены и валидны (1200×630, alt, description).
  • Schema.org перенесена — Organization, BreadcrumbList на каждой странице, плюс Service/Product/Article где уместно.
  • Core Web Vitals у нового фронта на p75 — зелёные.
  • Yandex Metrika и GA4 настроены, события собираются.
  • Rollback‑механизм проверен (раскатывали 1% и откатывали).
  • Baseline метрик собран за 14 дней.

Почему headless при правильной миграции помогает SEO

Технически грамотная headless‑миграция почти всегда даёт прирост органики через 2–4 месяца после стабилизации, потому что:

  • Core Web Vitals на Next.js обычно в 3–5× лучше, чем на типовом Битрикс‑фронте. Это прямой ранжирующий фактор с 2021 года.
  • SSR/SSG отдаёт полный HTML на первый запрос — Google и Яндекс не зависят от JavaScript‑рендеринга.
  • Schema.org проще поддерживать в кодовой базе фронта, чем в Битрикс‑шаблонах.
  • Sitemap всегда актуальный — генерируется из реальных данных, а не вручную составляется.

Но всё это работает только при условии, что вы прошли семь шагов выше. Без них headless становится способом потерять трафик красиво.

Следующий шаг

Если у вас Битрикс‑магазин и вы думаете о headless — начните с Catalog Probe: за 3 дня поднимаем headless‑витрину на вашем каталоге, замеряем метрики, отдаём отчёт. Решение, идти ли дальше в полный Headless Pilot, принимаете на основе цифр, а не презентаций.

SEO‑миграция в комплекте: 1:1 URL, canonical/hreflang/sitemap — всё переносится автоматически, потеря трафика стремится к нулю.

Расскажите нам о своем проекте

Наши офисы

  • Россия
    Россия, Санкт-Петербург, Рижская улица, 5, корп. 1 офис 402
    +7 (967) 555-90-32
  • Казахстан
    Алма-Ата
    +7 (707) 340-29-12