Миграция с WordPress на Headless CMS под ключ

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Миграция с WordPress на Headless CMS под ключ
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    956
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    947

Монолитный WordPress тормозит при 5000 публикациях? В админке каждый клик длится 3 секунды? Редакторы теряют терпение, а PHP-шаблоны не дают реализовать современный дизайн. Выход — headless-архитектура. Мы помогаем мигрировать сайты под ключ, сохраняя SEO-позиции и сокращая Time to Market. На фронтенде используем Next.js или Nuxt — SSR/SSG, ленивая загрузка, оптимизация Core Web Vitals. Контент-менеджеры работают в удобном интерфейсе, а разработчики вольны выбирать стек.

Headless CMS Wikipedia отделяет управление контентом от представления. Миграция требует тщательного планирования: инвентаризации контента, маппинга типов записей, настройки API и периода параллельной работы.

Оценка до начала

Перед выбором целевой CMS проводим аудит: инвентаризируем кастомные типы записей, поля ACF, используемые плагины (WooCommerce, Events Calendar), уровень подготовки контент-команды, бюджет на лицензии и требования к черновикам и preview. На основе этих данных выбираем платформу: Strapi для self-hosted, Contentful для SaaS с мощным редактором, Sanity для гибкой схемы. После миграции затраты на хостинг и лицензии снижаются до 60% — средняя экономия составляет от 2000$ до 5000$ в год.

Как выбрать Headless CMS?

Сравним популярные платформы:

Критерий Contentful Sanity Strapi KeystoneJS
Хостинг SaaS SaaS/Self Self Self
Тариф Enterprise Стартовый Open Source Open Source
Редактор Хороший Отличный Базовый Базовый
API REST + GraphQL GROQ + GraphQL REST + GraphQL GraphQL
Медиа CDN включён CDN включён Своё хранилище Своё

Strapi превосходит KeystoneJS по размеру сообщества в 3 раза и по количеству готовых плагинов. GraphQL API позволяет выбирать только нужные поля, сокращая объём передаваемых данных в 2-3 раза по сравнению с REST. Стоимость лицензий headless CMS в среднем в 2-3 раза ниже, чем у корпоративных решений. На Next.js с headless CMS LCP в 2-3 раза ниже, чем на классическом WordPress, что подтверждают замеры Core Web Vitals.

Этап 1: Аудит и маппинг контента (1–2 недели)

Инвентаризация существующего контента:

# Экспорт из WordPress через WP-CLI
wp export --post_type=post,page,product --status=publish --path=/var/www/html

# Анализ ACF-полей
wp acf field-group export --group_id=all --output=json > acf-fields.json

# Статистика по типам
wp post list --post_type=post --format=count
wp post list --post_type=page --format=count

Маппинг WordPress → целевая CMS:

# mapping.yaml
wordpress_types:
  post:
    target: blogPost
    fields:
      post_title: title
      post_content: body (RichText)
      post_excerpt: excerpt
      post_date: publishedAt
      _thumbnail_id: featuredImage (Asset)
      categories: categories (Reference[])
      tags: tags (Reference[])
      acf.seo_title: seoTitle
      acf.seo_description: seoDescription

  product:
    target: product
    fields:
      post_title: name
      _regular_price: price (Number)
      _stock_qty: stock (Number)
      product_cat: categories
      acf.gallery: gallery (Asset[])

Как перенести контент без потерь?

Для этого пишем скрипты на TypeScript. Они через WP REST API получают записи, медиа и связи, а затем отправляют их в новую CMS через Management API. Код обрабатывает rate limiting, преобразует HTML в Markdown и загружает изображения.

// scripts/migrate-from-wp.ts
import axios from 'axios';
import * as contentful from 'contentful-management';
import TurndownService from 'turndown';

const turndown = new TurndownService({ headingStyle: 'atx' });
const cmaClient = contentful.createClient({ accessToken: process.env.CMA_TOKEN! });

async function migratePosts() {
  const space = await cmaClient.getSpace(process.env.SPACE_ID!);
  const env = await space.getEnvironment('master');

  let page = 1;
  while (true) {
    const { data: posts } = await axios.get(
      `${WP_URL}/wp-json/wp/v2/posts?per_page=100&page=${page}&_embed`
    );
    if (!posts.length) break;

    for (const wpPost of posts) {
      await migratePost(env, wpPost);
      await delay(200);
    }
    page++;
  }
}

async function migratePost(env: any, wpPost: any) {
  const featuredImageUrl = wpPost._embedded?.['wp:featuredmedia']?.[0]?.source_url;
  let imageAsset;

  if (featuredImageUrl) {
    imageAsset = await uploadAsset(env, featuredImageUrl, wpPost.title.rendered);
  }

  const entry = await env.createEntry('blogPost', {
    fields: {
      title:       { 'en-US': wpPost.title.rendered },
      slug:        { 'en-US': wpPost.slug },
      body:        { 'en-US': turndown.turndown(wpPost.content.rendered) },
      excerpt:     { 'en-US': wpPost.excerpt.rendered.replace(/<[^>]*>/g, '') },
      publishedAt: { 'en-US': wpPost.date },
      ...(imageAsset && {
        featuredImage: { 'en-US': { sys: { type: 'Link', linkType: 'Asset', id: imageAsset.sys.id } } },
      }),
    },
  });

  await entry.publish();
  console.log(`Migrated: ${wpPost.title.rendered}`);
}

Этап 2: Настройка новой CMS (1 неделя)

Создание Content Types в целевой CMS точно по маппингу. Настройка валидаций, локализации, ролей. Этот этап делаем параллельно с аудитом.

Этап 3: Скрипт миграции (1–2 недели)

Код выше — пример для Contentful. Аналогичные скрипты пишем для Strapi через его REST API или для Sanity через mutation API.

Этап 4: Миграция медиафайлов

// Скачиваем и загружаем все медиафайлы WP
async function migrateMedia() {
  const { data: media } = await axios.get(`${WP_URL}/wp-json/wp/v2/media?per_page=100`);

  for (const item of media) {
    const asset = await env.createAsset({
      fields: {
        title:       { 'en-US': item.title.rendered },
        description: { 'en-US': item.alt_text },
        file: { 'en-US': {
          contentType: item.mime_type,
          fileName:    path.basename(item.source_url),
          upload:      item.source_url,
        }},
      },
    });

    await asset.processForAllLocales();
    await asset.publish();
    mediaIdMap[item.id] = asset.sys.id;
  }
}

Этап 5: Параллельный запуск и переключение

  1. Запустить новый фронтенд на staging с реальными данными.
  2. Провести редизайн-ревью с контент-командой.
  3. Настроить автоматическую синхронизацию WordPress → новая CMS на период перехода.
  4. DNS-переключение в low-traffic период.
  5. Отключить WordPress через 2–4 недели после стабилизации.

Сроки типовой миграции

Этап Небольшой сайт (<500 записей) Средний (500–5000) Крупный (5000+)
Аудит и маппинг 1 неделя 1–2 недели 2–4 недели
Настройка CMS 3–5 дней 1 неделя 1–2 недели
Скрипт миграции 1 неделя 1–2 недели 2–4 недели
Тестирование 3–5 дней 1 неделя 2 недели
Запуск 1 день 1–2 дня 1 неделя
Итого 4–6 недель 6–10 недель 3–5 месяцев
Типичные ошибки при миграции
  • Простой сайта из-за отсутствия параллельной работы.
  • Потеря связей между записями из-за некорректного маппинга.
  • Падение производительности из-за неоптимизированных GraphQL-запросов.
  • Некорректная обработка медиафайлов (дубликаты, потеря alt-тегов).

Все эти риски мы закрываем на этапе тестирования.

Что входит в работу?

  • Аудит текущей архитектуры и маппинг контента.
  • Настройка целевой CMS (Content Types, роли, локализация).
  • Скрипты миграции контента и медиа.
  • Настройка автоматической синхронизации на переходный период.
  • Разработка фронтенда на Next.js/Nuxt с учётом Core Web Vitals.
  • DNS-переключение и пост-миграционная поддержка.
  • Документация и обучение контент-команды.

Гарантируем сохранение SEO-позиций при условии выполнения наших рекомендаций. Оценим ваш проект за 2 дня. Свяжитесь с нами для предварительного аудита. Получите консультацию — мы подберём оптимальную архитектуру и сроки.

Редизайн и миграция сайта: смена 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 до запуска

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

Если трафик упал — действуйте немедленно:

  1. Краул нового сайта на 404 и сравнение с предмиграционным списком URL.
  2. Создание редиректов для всех потерянных страниц с трафиком >0.
  3. Проверка структурированных данных и мета-тегов на тестовой выборке.
  4. Ежедневный мониторинг Coverage в Search Console и позиций по топ-50 запросам.
  5. Если спустя 2 недели трафик не восстанавливается — глубокий аудит редиректов (транзитивность, цепочки, циклы).

В нашей практике такой случай: крупный интернет-магазин потерял 50% трафика при переезде с Битрикса на React + Strapi. За три дня восстановили 95% редиректов, через 3 недели трафик вернулся на 90% от исходного.

Предмиграционный аудит: что нельзя пропустить

До начала разработки нового сайта нужно:

  1. Полный краул текущего сайта через Screaming Frog или Sitebulb. Получить список всех индексируемых URL с трафиком из Google Search Console.
  2. Выгрузить все страницы с органическим трафиком >0 за последние 6 месяцев — это приоритет для редиректов.
  3. Зафиксировать все внешние ссылки (backlinks) на конкретные страницы — Ahrefs, Semrush.
  4. Сфотографировать текущие позиции по ключевым запросам — база для сравнения после миграции.
  5. Сохранить 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)

Что входит в работу

Результаты, которые вы получаете:

  1. План миграции с маппингом URL и редиректов в формате Excel/Google Sheets.
  2. Настроенные 301 редиректы на серверном уровне (Nginx/Cloudflare/Vercel).
  3. Перенесённый контент с проверкой целостности: изображения, мета-поля, ссылки.
  4. Структурированные данные (Schema.org) на новом сайте, идентичные старым или улучшенные.
  5. Отчёт по SEO: динамика позиций через 1, 3 и 6 недель после запуска.
  6. Мониторинг Coverage в Search Console с уведомлениями об ошибках.
  7. Гарантия сохранения позиций: если трафик падает более чем на 15% в течение первого месяца — бесплатный аудит и коррекция.

Сроки и ориентиры

  • Редизайн с миграцией небольшого сайта (до 100 страниц): 4–8 недель.
  • Миграция e-commerce с 500+ страниц товаров: 8–16 недель.
  • Только техническая часть миграции (редиректы, метаданные) без редизайна: 1–3 недели.

Стоимость рассчитывается индивидуально по объёму. Средняя экономия клиента за счёт сохранения трафика после миграции — от 300 000 до 500 000 рублей в год.

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