Миграция сайта с другой CMS на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Миграция сайта с другой CMS на 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1167
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    743
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Миграция сайта с другой CMS на 1С-Битрикс

Перенести сайт с WordPress, OpenCart или MODx на Битрикс — значит не просто скопировать файлы. Структуры данных кардинально разные: что в WordPress хранится в wp_posts + wp_postmeta, в Битрикс разбито по b_iblock_element, b_iblock_element_property и b_iblock_element_prop_m. Миграция — это ETL-проект (Extract, Transform, Load) с серьёзной аналитической фазой.

Аудит исходной CMS

Первый шаг — инвентаризация того, что нужно перенести:

Контент:

  • Статические страницы (количество, структура URL)
  • Новости, статьи, блог (объём, теги, категории)
  • Галереи и медиафайлы

Каталог (для магазинов):

  • Количество товаров и торговых предложений (SKU)
  • Структура атрибутов и характеристик
  • Цены и остатки
  • Изображения товаров

Пользователи и заказы:

  • База покупателей (email, хешированные пароли)
  • История заказов
  • Бонусные баллы и скидки

SEO:

  • Текущие URL и их структура
  • Meta title/description для всех страниц
  • Sitemap и robots.txt

Типичные маппинги данных

WordPress → Битрикс (контент):

WordPress Битрикс
wp_posts (post) Инфоблок «Статьи», элемент b_iblock_element
wp_posts (page) Страница в файловой структуре или инфоблок
wp_postmeta Свойства инфоблока b_iblock_element_property
wp_terms Разделы инфоблока b_iblock_section
wp_users b_user

OpenCart → Битрикс (каталог):

OpenCart Битрикс
oc_product b_iblock_element (каталог)
oc_product_attribute Свойства инфоблока (характеристики)
oc_product_option + oc_product_option_value Торговые предложения (SKU)
oc_category Разделы инфоблока b_iblock_section
oc_order b_sale_order

Скрипт миграции: подход

Миграция реализуется через PHP-скрипты, работающие с API Битрикс. Прямая запись в таблицы БД — только для массовых данных с последующей перестройкой индексов.

Пример миграции товара через API:

// Чтение товара из источника (OpenCart DB)
$ocProduct = $sourceDb->query("SELECT * FROM oc_product WHERE product_id = ?", [$productId])->fetch();
$ocDesc = $sourceDb->query("SELECT * FROM oc_product_description WHERE product_id = ? AND language_id = 2", [$productId])->fetch();
$ocImages = $sourceDb->query("SELECT * FROM oc_product_image WHERE product_id = ? ORDER BY sort_order", [$productId])->fetchAll();

// Создание элемента в Битрикс
$el = new CIBlockElement();
$elementId = $el->Add([
    'IBLOCK_ID'         => CATALOG_IBLOCK_ID,
    'NAME'              => $ocDesc['name'],
    'CODE'              => \Bitrix\Main\Text\StringHelper::translit($ocDesc['name']),
    'DETAIL_TEXT'       => $ocDesc['description'],
    'PREVIEW_TEXT'      => $ocDesc['meta_description'],
    'ACTIVE'            => $ocProduct['status'] ? 'Y' : 'N',
    'IBLOCK_SECTION_ID' => getCategoryMapping($ocProduct['manufacturer_id']),
    'PROPERTY_VALUES'   => [
        'ARTICLE'  => $ocProduct['model'],
        'WEIGHT'   => $ocProduct['weight'],
        'BRAND_ID' => getBrandMapping($ocProduct['manufacturer_id']),
    ],
]);

// Загрузка главного изображения
if ($ocProduct['image']) {
    migrateImage($elementId, $sourceImgPath . $ocProduct['image'], 'DETAIL_PICTURE');
}

// Загрузка галереи
foreach ($ocImages as $img) {
    migrateImageToGallery($elementId, $sourceImgPath . $img['image']);
}

// Установка цены
CCatalogProduct::Add(['ID' => $elementId, 'QUANTITY' => $ocProduct['quantity']]);
CPrice::SetBasePrice($elementId, $ocProduct['price'], 'RUB');

Сохранение SEO и URL-структуры

Это самая коммерчески чувствительная часть. Потеря позиций в поиске при смене CMS — реальный риск.

Стратегия сохранения URL:

  1. Формируем маппинг старых URL → новых URL в Битрикс
  2. Настраиваем редиректы 301 через .htaccess или nginx
  3. В Битрикс устанавливаем символьные коды (CODE) элементов и разделов максимально близко к старым URL
# .htaccess — редиректы старых URL WordPress
RewriteRule ^blog/(.+)/$  /news/$1/  [R=301,L]
RewriteRule ^product/(.+)/$  /catalog/item/$1/  [R=301,L]
  1. Meta title и description переносятся в свойства инфоблока или через модуль SEO-фильтров Битрикс

Карта редиректов — обязательный артефакт проекта, экспортируется в CSV для проверки.

Перенос пользователей

Пароли из WordPress (bcrypt) нельзя перенести напрямую — алгоритм хеширования в Битрикс другой. Варианты:

  • Принудительный сброс — пользователи получают письмо с просьбой установить новый пароль
  • Временный логин по email — при первом входе после миграции запрашивается только email, затем установка нового пароля
  • Гибридный хеш — при входе проверять пароль сначала по старому алгоритму, при успехе перехешировать в Битрикс-формат

Третий вариант требует кастомного обработчика авторизации, но сохраняет UX — пользователи не замечают миграции.

Тестирование и приёмка

После миграции — сверка данных:

# Псевдокод сверки
source_count = source_db.query("SELECT COUNT(*) FROM oc_product WHERE status=1")
bitrix_count = bitrix_db.query("SELECT COUNT(*) FROM b_iblock_element WHERE IBLOCK_ID=? AND ACTIVE='Y'", [CATALOG_IBLOCK_ID])
assert source_count == bitrix_count, f"Product count mismatch: {source_count} vs {bitrix_count}"

Проверяется: количество товаров, разделов, пользователей, заказов. Выборочно — контент 20–30 случайных элементов.

Сроки выполнения

Масштаб проекта Срок
Контентный сайт (до 500 страниц) 1–2 недели
Магазин до 5 000 товаров 3–6 недель
Крупный каталог 10 000+ товаров + история заказов 2–4 месяца

Миграция с другой CMS — это полноценный проект разработки, а не просто «экспорт-импорт». Качество результата зависит от глубины аудита на старте.