Переезд с самописного движка на поддерживаемую платформу
Перенести магазин из самописного движка можно двумя способами: забрать каталог прямо из базы либо собрать его разбором HTML витрины, когда доступа к базе уже нет. Какой из них ваш – виден после того, как мы посмотрим хостинг: в самописи структура данных каждый раз другая, документации не существует, автор кода недоступен. Далее работа одинакова – карта соответствия адресов, 301-редиректа, сборка на OpenCart 4.x с админкой, в которой менеджер работает сам. Позиций не обещаем. Обещаем, что ни один старый адрес не отдаст 404.
сайт и домен потерян - каталог восстанавливали из архивных снимков
Самый трудный случай в практике
8 909
Сколько адресов собрал архив этого магазина
уникальных, из них 7 565 карт товара
в измеренном магазине два метода подсчета разошлись на 2 810 позиций
Почему одного источника мало
25–50
Срок переезда
рабочих дней от утверждения ТС
бесплатный аудит старого магазина, 3–5 рабочих дней
Перед сметой
Этапы работы
Прозрачные этапы с согласованием на каждом шагу
Общий срок:25–50 дней
1
Аудит и полная копия старого магазина
3–5 рабочих дней
Смотрим хостинг, базу и структуру адресов, снимаем копию файлов и базы, отдельно сохраняем HTML категории с пагинацией. Копия производится до любых изменений: старый магазин после этого можно исследовать спокойно.
2
Выгрузка каталога и нормализация данных
4–12 рабочих дней
Скрипт разбора базы или витрины, возведение товаров, категорий, характеристик и фотографий в один машинный формат. Количество позиций считаем двумя способами и сверяем между собой — расхождение здесь показывает, сколько страниц рискует потеряться.
3
Карта соответствия адресов
3–6 рабочих дней
Таблица старый адрес → новый на каждую страницу, которую знает поиск. Источника три: карта сайта, обход каталога и Search Console. Здесь же решаем, какие дубли не тянем за собой, а возводим в один канонический адрес.
4
Сборник магазина на OpenCart
8–15 рабочих дней
Чистая сборка с нужными модулями, дерево категорий и набор атрибутов под фильтр, карточка товара, корзина и чекаут, роли в админке. Параллельно заливаем каталог тестовым прогоном и сверяем количество записей до и после.
5
Контент, оплата, доставка, аналитика
4–8 рабочих дней
Переносим уже работающие тексты и мета-описания, подключаем оплату и перевозчиков, ставим GA4 и Tag Manager, подтверждаем права в Search Console, собираем карту сайта без дублей.
6
Редиректы, переключение, наблюдение
3–4 рабочих дня
Прогон всего списка старых адресов с проверкой кодов ответа, переключение в окне с минимальным трафиком, старый магазин остается в резерве не менее 30 дней. Далее отчет по ошибкам сканирования и по 404.
Технологии и интеграции
На чём строим и с чем это соединяется
Стек
OpenCart 4.x — обновленная ветка с обычным администрированием. Ограничения: некоторые украинские модули пока доступны только под 3.х, поэтому перед стартом просматриваем список интеграций.
PHP и MySQL — та же пара, что и у большинства самописей, поэтому данные переносятся без конвертации типов; цена — те же требования к версии PHP
Собственные скрипты разбора базы или витрины – пишутся под конкретный магазин и дальше не переиспользуются
nginx и HTTP/2 - редиректы живут в map-файле сервера, а не в коде
HTTPS + HSTS – без этого браузер показывает предупреждение на форме оплаты
Search Console – единственное место, где видно количество адресов в индексе
GA4 и Tag Manager показывают тенденцию, а не бухгалтерскую истину: блокировщики и режим согласия срезают часть событий
Интеграции
LiqPay
WayForPay
Privat24
monobank
безналичный расчет
наложенный платеж
Новая Почта
Укрпочта
Meest Express
Google Tag Manager
GA4
Google Ads
Google Search Console
Telegram
Viber
Что входит
Полный перечень работ и того, что вы получаете на выходе
Полная копия старого магазина к началу работ - файлы, база, дамп HTML категорий
Разбор базы или HTML витрины и выгрузка каталога в машинный формат – каталог живет в файле, а не внутри чужого кода
Восстановление категорий и характеристик под фильтр: в самописи характеристики часто лежат одним текстовым полем, и его разлагают на атрибуты
Сборник магазина на OpenCart 4.x с админкой, где менеджер заводит товар и меняет цену без разработчика
Карта соответствия адресов: правило там, где структура регулярная, поштучная таблица там, где каждый путь уникален
301-редиректы по всем адресам, которые были в индексе, прогнаны полным списком с проверкой кодов ответа к переключению
Перенос текстов и уже работающих мета-описей: переписывать то, что приносит трафик, на переезде не стоит
Оплата и доставка заново: LiqPay, WayForPay, monobank, безналичный счет, Новая Почта, Укрпочта
Техническое SEO: ЧПУ, canonical, уникальные title, карта сайта без дублей
Аналитика: GA4 и Tag Manager, подтверждение прав в Search Console – чтобы смотреть ошибки сканирования, а не гадать
Резервные копии по расписанию и документация по проекту: следующий подрядчик не начинает с нуля
Условия: предоплата 50%, два раунда правок на этапе дизайна, гарантийный срок 30 календарных дней
Когда эта услуга не подходит
Что не входит в работу — чтобы не было сюрпризов на сдаче
Восстановление утраченных данных, которых нет ни в базе, ни в архивных снимках
Перенос функционала, который не описан и не воспроизводится из старого кода, без отдельной оценки
Гарантии сохранения позиций в поиске
Реклама после запуска
Хостинг, домен, эквайринг
Кому подходит
Ситуации, в которых эта услуга даёт результат
Сценарий 1 из 4
Разработчик исчез, а магазин работает
Самая частая причина, по которой приходят с самописью. Сайт продает, заказы идут, но изменить что-то сложнее цены товара некому. Риск не в дизайне: обновления безопасности этот код не получал годами, и в день, когда хостер поднимет версию PHP, магазин перестанет отдавать страницы. Переезд меняет зависимость от одного человека на зависимость от платформы, которую поддерживает кто-то еще кроме вас.
Разберём вашу ситуацию на бесплатном аудите
Сценарий 2 из 4
Двигатель писали под ваши процессы, и в этом была логика
Десять лет назад отдельный учет остатков или нестандартный расчет доставки действительно проще было написать руками. Вопрос не в том, правильно ли это, а в том, сколько из написанного до сих пор используется. На аудите мы просим назвать функции, без которых магазин не работает – своими словами. Список обычно вдвое короче того, что лежит в коде, и именно он определяет объем работ.
Сценарий 3 из 4
Каждая правка идет через разработчика и ждет своей очереди
Менеджер не заводит товар, потому что в админке нет поля под новую характеристику. Маркетолог не ставит счетчик, потому что шаблон собирается в коде. Коробочная платформа снимает большую часть таких обращений: товар, категория, атрибут и заказ редактируются без программиста. Не все — импорт прайса все равно настраивается один раз.
Сценарий 4 из 4
Сайт уже лежит, а от магазина остались архивные снимки
Крайний случай, и он случается. Мы проходили его на собственном проекте: домен не продлили вовремя, хостинг закрылся вместе с ним, единственным источником остался вебархив. Каталог в таком состоянии восстанавливается, но дороже – страницы обходятся с пагинацией и разбираются по HTML, а части снимков просто нет. Поэтому аудит для этого сценария длиннее.
Переезд на поддерживаемую платформу против дальнейшего доработки самописи
Чем этот вариант отличается от альтернативы
Оставить самопись и доделыватьНаш подход
Кто может вносить изменениятолько тот, кто разберется в чужом коде без документациименеджер в админке, разработчик — только под нестандартные задачи
Обновление безопасностине выходят вообще: обновлять некому и нечеговыходят регулярно, ставятся руками по расписанию
Поднятие версии PHP на хостингериск: код писался под старую версию и на новой может перестать работатьплановая процедура с тестовым пролетом
Стоимость мелкого наследиясначала разбор кода, затем доработка — разбор обычно длиннеемодуль или настройки, часы
Разовый рискнет, пока ничего не меняется - и накапливается, пока не меняетсяесть: переезд означает изменение адресов, и его закрывает карта соответствия с 301
Когда доработка честнееоправдана, если код читателен, автор на связи и задача узкане всегда оправдан: на каталоге в несколько десятков позиций дешевле завести все заново
Бесплатный аудит старого магазина
С самописным движком главный вопрос не «на что переезжать», а «что оттуда вообще можно достать». Аудит отвечает именно на него: смотрим базу, структуру адресов и то, что сейчас в индексе.
Что мы измеряем
Откуда брать данныеЕсть ли доступ к базе и в каком она состоянии. Если нет доступа, остается разбор HTML страниц — это работает, но дольше и дороже.
Структура адресовКак она регулярна. В самописных магазинах пути часто уникальны для каждого раздела, поэтому редирект правилом не всегда возможен, и часть таблицы приходится делать поштучно.
Объем каталога и адресовСчитаем по карте сайта и перекрестно обходом каталога. Если карты сайта нет вообще – а это частая ситуация – обходим категории с пагинацией.
Что в индексесколько адресов реально в поиске. Без Search Console полного списка не видит никто, включая нас, поэтому доступ к нему — первое, о чем мы просим.
Техническое состояниеВерсия PHP, HTTPS и HSTS, мобильный viewport, наличие резервных копий. Здесь сразу видно, что с текущего сайта переносить не стоит.
Скорость переездаПервый ответ, полная загрузка, вес HTML – чтобы после запуска сравнивать замеры, а не ощущения.
Что вы получаете
Вывод, откуда и в каком виде можно забрать каталог.
Документ с цифрами: объем каталога, адрес, скорость, вес HTML, техническое состояние.
Оценка количества строк в карте соответствия адресов и части, которую удастся закрыть правилом.
Разговор на 30-40 минут по документу.
Срок: 3–5 рабочих дней — разбор нестандартной базы длиннее обычного аудита
Почему это бесплатно
Потому что мы сами не знаем цену, пока не увидели базу. Назвать вилку вслепую для самопишущего магазина значило бы заложить двойной запас – это нечестно по отношению к вам и неудобно нам. Аудит снимает неизвестность обеих сторон.
Что дальше
После аудита – сумма и срок по этапам с датами, договор, счет, акт. Если окажется, что подешевле достроить текущий магазин, мы напишем это в документе.
Короткая форма: контакт и адрес сайта
Не нашли свой случай?
Опишите, как это устроено у вас, — ответим, подходит ли «Перенос магазина с самописного движка» и что это значит в вашей ситуации. Без брифа и без звонка: один вопрос, один ответ.
Договор, акт и гарантия 30 дней
На каждый проект письменный договор: объём, сроки, сумма, порядок приёмки. После сдачи — акт и счёт, затем 30 календарных дней гарантии.
ФОП и безналичный расчёт
Исполнитель — зарегистрированный ФОП. Оплата на счёт с закрывающими документами.
Права и доступы — ваши
Код, дизайн и материалы переходят к вам после полной оплаты. Домен, хостинг, репозиторий оформляем на вас.
Портал клиента вместо переписки
Во время работы вы получаете доступ к порталу: договоры, счета, акты и статус проекта в одном месте.
Заказчики из Европы
Среди работ — проекты для Норвегии, Болгарии, Молдовы и Испании.
Цифры, которые можно проверить
Каждый кейс в портфолио — со ссылкой на живой сайт и техническим замером.
Сначала аудит, потом сумма
Прайса на сайте нет намеренно: объём одной и той же работы у двух клиентов отличается кратно.
Говорим «нет», когда не уверены
Если задача не наша или срок нереальный — скажем сразу.
Что влияет на стоимость
Почему две одинаковые на вид задачи считаются по-разному
Есть ли доступ к базеГлавная развилка сметы. С базой выгрузки каталога – это запрос и скрипт нормализации, несколько дней. Без базы остается обход витрины с пагинацией и разбор HTML под конкретную верстку, а это другой порядок трудоемкости.
Как сохраняются характеристикиАккуратные таблицы атрибутов выгружаются почти даром. Характеристики одним текстовым полем в произвольном формате разбираются правилами, проверяются выборками и приходятся руками – разница кратная.
Регулярность структуры адресовЕсли пути строятся по схеме, редирект закрывается одним правилом nginx. Если каждый раздел писали отдельно, то карта соответствия становится поштучной таблицей на тысячи строк. Поэтому долю под правило меряем на аудите.
Куда ведет фотоВ самописи изображения часто привязаны путями в файловой системе, а не идентификаторами. Файлы приходится сверять с записями: часть путей ведет в никуда и без проверки это вылезает после импорта.
Нестандартный функционалПросчет доставки по своей формуле, роли менеджеров, накопительные скидки. Каждый блок – отдельная строка: воспроизвести модулем, заказать доработку или отказаться. Решение ваше, наша часть – цена каждого варианта.
Объем каталога и состояние контентаТысяча позиций с заполненными описаниями и тридцать тысяч с названиями в разных регистрах – разные недели работы. Чистить каталог на переезде дешевле: данные все равно идут через наши руки.
Кейсы
Задачи и результат в цифрах — все показатели сняты нашим замером
розничный интернет-магазин нижнего белья с каталогом более 110 тыс. позиций
Задача
Подсчитать реальный объем каталога перед переносом: сколько страниц везти и сколько из них известны поиску.
Решение
Считали двумя независимыми методами. Карта сайта: индекс из 42 подкарт, после дедупликации 112 646 уникальных товарных адресов. Штатный поиск CMS: 1 154 страницы по сотне плюс 56 на последний.
Результат
115 456 товарных позиций против 112 646 адресов в карте сайта — расхождение 2 810 позиций, или 2,4%. Около 2,8 тысяч товаров магазин показывает покупателям, а в карте сайта их нет. На переезде эти позиции теряются первыми. Измерение 01.08.2026.
интернет-магазин профессиональной косметики, каталог более 5 тыс. позиций
Задача
Измерить каталог там, где карта сайта не работает: /sitemap.xml отдает HTTP 200 с пустым телом.
Решение
Считали обходом каталога штатным поиском CMS: 55 страниц по 100 позиций плюс 61 на последнюю, и сняли показатели главной как точку отсчета.
Результат
5 561 товар в живом каталоге, измерение 31.07.2026. TTFB 801,2 мс при 153,8 КБ HTML. Дефекты: карта сайта пуста, на главной нет ни одного счетчика – ни GTM, ни gtag, ни пикселя, конверсии не меряются никак.
B2B-каталог запчастей к промышленным швейным машинам
Задача
Контрпример: магазин, данные из которого переносятся без приключений, и что при этом не следует везти дальше.
Решение
Проверили карту сайта полным списком, сверили уникальные адреса, сняли скорость и перечислили подключенное.
Результат
1 992 адреса в карте сайта без дубликата — 1 848 карточек товара и 138 категорий. Карта соответствия здесь это две тысячи строчек, а не десятки тысяч. TTFB 388,1 мс при 120,2 КБ HTML. Не переносим: Universal Analytics отключен Google 1 июля 2023 года.
Что нужно от вас
Без этого не начнём — лучше подготовить заранее
1Доступ к хостингу и базе старого магазина – это главное условие нормального переезда, и от него зависит половина сметы.
2Адрес сайта и любую сохранившуюся документацию — даже переписка с бывшим разработчиком экономит дни разбора.
3Доступ к Search Console, если права подтверждены: без него полный список адресов в индексе не видит никто.
4Доступы к DNS и домену – переключение делается там, и делать его наспех не стоит.
5Список функций, без которых магазин не работает своими словами и без технических терминов.
6Одного человека с правом принимать решения по структуре каталога: на переезде развилок больше, чем на разработке с нуля.
Если чего-то из этого нет — скажите, подскажем, как собрать или сделаем сами отдельной задачей.
Частые вопросы
Что спрашивают чаще всего — с конкретными ответами
Разработчика нет, доступов тоже – это реально перенести?
Реально, но длиннее и дороже. С доступом к хостингу и базе это простой переезд: запрос, скрипт нормализации, сверка количества. Без доступа каталог собирается разбором витрины – обходим категории с пагинацией и получаем названия, цены, характеристики и фото на страницах. Мы проходили крайнюю версию этого сценария на собственном проекте, где не осталось ни хостинга, ни домена: там единственным источником был вебархив, и из него удалось собрать 8 909 уникальных адресов, из них 7 565 карт товара. Это работает. Но заявлять объем вперед в таком режиме невозможно, поэтому аудит для него длиннее обычного.
Почему смету нельзя назвать сразу?
Ибо самопишущийся движок — это каждый раз другая структура данных. В одном случае товары лежат аккуратными таблицами и выгружаются в час. В остальном характеристики сохраняются одним текстовым полем в случайном формате, а фото привязаны путями в файловой системе, часть из которых ведет в никуда. Разница в трудоемкости между этими случаями кратна, и пока мы не посмотрели базу, любая цифра будет выдумкой. Наш совет прост: если подрядчик назвал вам сумму за переезд из самописи, не видя базы, он либо заложил двойной запас, либо докажет смету по ходу работ.
Как не потерять адреса, если у них нет логики?
Составляем карту соответствия из трех источников сразу: карта сайта, обход каталога и Search Console. Там, где структура регулярная, редирект делается правилом в map-файле nginx. Там, где каждый путь уникален, — поштучной таблицей, и это более дорогая половина работы, поэтому часть адресов под правило мы отдельно меряем еще на аудите. Массовый редирект всего на главную не предлагаем: это самая дорогая экономия в миграциях. И сразу о грани честности — карта сайта не поднимает позиции и не гарантирует индексацию; она только делает страницу существующей для поиска.
А если часть товаров на сайте, но нет в карте сайта?
Это не редкость, а норма, и именно поэтому мы измеряем каталог двумя методами. В магазине нижнего белья, который мы мерили 01.08.2026, карта сайта дала 112 646 уникальных товарных адресов, а обход каталога штатным поиском – 115 456 позиций. Расхождение 2810 позиций, то есть 2,4% каталога магазин показывает покупателям, но не показывает поисковому боту. При переезде эти позиции теряются первыми, потому что их нет в списке, по которому все работают.
Что делать с дублями адресов, накопившихся в старом магазине?
Не везти. В архивном следе нашего собственного проекта 6 704 уникальных товарных slug' были доступны по 7 565 адресам — 645 позиций открывались более чем из одной категории. На новой платформе каждая такая позиция получает один канонический адрес, а остальные старые пути ведут на него 301-м. Здесь есть эффект, о котором лучше знать заранее: после чистки количество страниц в индексе некоторое время падает. Это ожидаемый ход событий, а не сбой, просто смотрится он неприятно, если не предупредить.
Что мы получим кроме нового магазина?
Админку, в которой менеджер заводит товар и меняет цену без разработчика. Обновляемая платформа. Резервные копии по расписанию и документации по проекту. Последнее звучит скучно и самое оно решает вашу начальную проблему: следующий подрядчик откроет описание структуры, а не чужой код без комментариев. Скорость тоже обычно растет, но здесь без обещаний — скорая страница убирает техническую потерю, а не создает спрос.
Сколько длится переезд и почему такой разброс?
25–50 рабочих дней от утверждения ТС, и разброс здесь больше, чем в других миграциях. Причина во втором этапе: разгрузка каталога занимает от четырех дней до трех недель в зависимости от того, в каком виде лежат данные. Остальные этапы считаются точнее — аудит и копия 3–5 дней, карта соответствия 3–6, сборник 8–15, контент и интеграция 4–8, редиректы и переключение 3–4. Точный срок мы называем после аудита, когда база уже перед глазами.
Старый магазин можно отключить сразу после запуска?
Нет, и это наша жесткая рекомендация, а не формальность. Старый сайт остается поднятым не менее 30 дней после переключения: за это время в Search Console видно, какие адреса бот еще стучит и куда они ведут. Если в карте соответствия есть дыра, она видна именно там и именно тогда, а не по жалобе покупателя через полгода. Выключать старый магазин в день запуска означает лишить себя единственного способа проверить работу.
Покажите старый магазин – начнем с того, что из него можно достать
Дайте адрес сайта и доступ к хостингу, если он есть. За 3–5 рабочих дней вернемся с документом: откуда берется каталог, сколько в нем позиций по двум методам подсчета, сколько адресов придется перенаправлять и какую часть из них закроет правило.
Из измеренных кейсов115 456 товарных позиций против 112 646 адресов в карте сайта
Прайса на сайте нет намеренно: объём той же работы у двух клиентов отличается в разы, и цифра «от» в этом случае ничего не объясняет. Сначала бесплатный аудит — считаем ваши страницы, дубли и скорость, — потом называем сумму и срок и фиксируем их в договоре.