Міграція сайту з іншого CMS на 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Показано 1 з 1 послугУсі 1626 послуг
Міграція сайту з іншого CMS на 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Міграція сайту з іншої 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'], 'UAH');

Збереження 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 — це повноцінний проєкт розробки, а не просто «експорт-імпорт». Якість результату залежить від глибини аудиту на старті.