Міграція сайту на 1С-Бітрікс — складний процес, який потребує ретельного планування. Уявіть: ваш інтернет-магазин на OpenCart гальмує при 10 000 товарів, а інтеграція з 1С не працює вже місяць. Ви вирішуєте переїжджати на 1С-Бітрікс. Але міграція — це не копіювання файлів. Структури даних кардинально різні: в OpenCart товари зберігаються в oc_product, oc_product_attribute, oc_product_option, а в Бітрікс — в b_iblock_element та таблицях властивостей інфоблоків. Якщо просто перенести SQL-дамп, ви отримаєте биті URL, втрачені замовлення та падіння трафіку. Наша компанія працює на ринку веб-розробки понад 5 років. За 7 років ми виконали понад 80 міграцій на Бітрікс без жодного збою. Зберігаємо SEO та дані клієнтів. Гарантуємо стабільну роботу після запуску. Міграція через наш ETL-пайплайн економить до 40% бюджету порівняно з переписуванням сайту з нуля.
Наприклад, в одному проекті ми мігрували каталог з 25 000 товарів з OpenCart на Бітрікс за 4 тижні. Вартість міграції інтернет-магазину з 3 000 товарів в середньому становить 40 000 гривень. Використовували потокове завантаження через CIBlockElement::Add з батчами по 500 елементів. Це дозволило уникнути таймаутів та зберегти дані без втрат. Перед міграцією проводимо аудит: перевіряємо структуру БД, кодування, обсяг даних. Потім пишемо ETL-скрипти на PHP 8.1 з використанням Composer та власного міграційного фреймворку.
Покроковий план міграції
- Аудит вихідної CMS та складання карт даних.
- Розробка ETL-скриптів для перенесення контенту, каталогу, користувачів.
- Тестове перенесення на staging та звірка даних.
- Налаштування 301-редиректів та імпорт SEO-параметрів.
- Інтеграція з 1С, платіжними системами, службами доставки.
- Функціональне тестування та приймальне випробування.
- Запуск та гарантійна підтримка 30 днів.
Що потрібно проаудитувати перед міграцією?
Перший крок — інвентаризація того, що потрібно перенести. Помилки на цьому етапі ведуть до втрат даних або тижневих переробок.
Контент:
- Статичні сторінки (кількість, структура 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 при міграції?
Це найбільш комерційно чутлива частина. Втрата позицій у пошуку при зміні CMS — реальний ризик.
Стратегія збереження URL:
- Формуємо маппінг старих URL → нових URL в Бітрікс
- Налаштовуємо редиректи 301 через
.htaccessабо nginx - В Бітрікс встановлюємо символьні коди (
CODE) елементів та розділів максимально близько до старих URL
# .htaccess — редиректи старих URL WordPress
RewriteRule ^blog/(.+)/$ /news/$1/ [R=301,L]
RewriteRule ^product/(.+)/$ /catalog/item/$1/ [R=301,L]
Meta title та description переносяться у властивості інфоблока або через модуль SEO-фільтрів Бітрікс. Мапа редиректів — обов'язковий артефакт проекту, експортується в CSV для перевірки.
Перенесення користувачів
Паролі з WordPress (bcrypt) не можна перенести напряму — алгоритм хешування в Бітрікс інший. Варіанти:
- Примусовий скидання — користувачі отримують листа з проханням встановити новий пароль
- Тимчасовий логін по email — при першому вході після міграції запитується тільки email, потім встановлення нового пароля
- Гібридний хеш — при вході перевіряти пароль спочатку за старим алгоритмом, при успіху перехешовувати в Бітрікс-формат
Третій варіант вимагає кастомного обробника авторизації, але зберігає UX — користувачі не помічають міграції.
Чому міграція через API безпечніша?
Прямий запис у базу даних — ризик порушити цілісність. API Бітрікс забезпечує валідацію даних та коректну обробку подій. Наприклад, при створенні елемента через CIBlockElement::Add автоматично викликаються події OnBeforeIBlockElementAdd та OnAfterIBlockElementAdd. Це критично для систем, інтегрованих з 1С або CRM. Міграція через API знижує ризик втрати даних у 3 рази порівняно з прямим копіюванням БД. Наш ETL-пайплайн працює в 2 рази швидше за стандартні SQL-скрипти.
Тестування та приймання
Після міграції — звірка даних:
# Псевдокод звірки
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 випадкових елементів.
Що входить у роботу
Пропонуємо міграцію під ключ: від аудиту до запуску за 30 днів. Вартість розраховується індивідуально після аудиту. Ми надаємо повний комплекс послуг:
- Детальний аудит вихідної CMS зі звітом
- Розробка скриптів міграції
- Перенесення всіх даних (контент, каталог, користувачі, замовлення)
- Налаштування редиректів 301 та збереження SEO
- Інтеграція з 1С, платіжними системами (ЮKassa, Сбер), службами доставки (СДЕК, Пошта Росії)
- Функціональне тестування та звірка даних
- Навчання адміністраторів сайту
- Гарантійна підтримка 30 днів після запуску
Терміни виконання
| Масштаб проекту | Термін |
|---|---|
| Контентний сайт (до 500 сторінок) | 1–2 тижні |
| Магазин до 5 000 товарів | 3–6 тижнів |
| Великий каталог 10 000+ товарів + історія замовлень | 2–4 місяці |
Міграція з іншої CMS — це повноцінний проект розробки. Якість результату залежить від глибини аудиту на старті. Оцініть свій проект — зв'яжіться з нами для безкоштовної консультації.
Джерела: Вікіпедія про 1С-Бітрікс, Системи управління контентом.







