Миграция на Joomla и интеграции: 1С, CRM, почта

Мост миграции: документы, фотографии и коробки товаров переезжают со старого выцветшего сервера на современный сайт на Joomla

Три типовых миграционных сценария

Меня зовут Евгений Семёнов, я технический директор ITfresh. Мы обслуживаем компании до 50 рабочих мест в Москве, держим собственные серверы в дата-центре МТС и за последние годы перенесли на Joomla не один десяток сайтов — со старых версий самой Joomla, с WordPress и из самописных движков разной степени запущенности. Эта статья — концентрат того, что мы узнали на этих проектах: где миграция проходит за пару дней, где превращается в квест, и как заранее понять, к какому сценарию готовиться. А во второй половине — то, ради чего сайт вообще переносят: интеграции с 1С, CRM и почтой.

Практически все обращения «перенесите нас на Joomla» укладываются в три сценария. У каждого своя цена, свои риски и свои маркеры «пора».

Сценарий 1: апгрейд легаси Joomla 3.x/4.x до 6.x

Самый частый запрос 2026 года. Joomla 3.x давно не получает патчей безопасности, и сайты на ней — открытая дверь: уязвимости в ядре и в старых расширениях известны, эксплойты автоматизированы, и вопрос взлома — это вопрос времени, а не вероятности. При этом таких сайтов в рунете всё ещё тысячи: сделали в 2016–2019, работает — не трогали.

Маркеры «пора мигрировать»:

  • в админке версия начинается с 3 или 4 — обе ветки уже вне поддержки;
  • хостер прислал письмо о повышении версии PHP, и сайт после этого падает;
  • в почту сыплется спам «с вашего сайта рассылается рассылка» — классический симптом залитого шелла;
  • нужные расширения перестали обновляться, а новые не ставятся на старое ядро.

Сценарий 2: переезд с WordPress, когда стало тесно

WordPress прекрасен для блога и лендинга, но у него есть потолок, в который упираются растущие компании. Типичные жалобы, с которыми к нам приходят: десять редакторов топчутся по чужим материалам, потому что штатная модель прав примитивна; двуязычный сайт держится на платном плагине, который конфликтует с половиной остальных; структура из сотен вложенных страниц управляется через боль. В Joomla разграничение прав (ACL), мультиязычность и вложенные категории — это ядро, а не плагины, и именно за этим с WordPress уходят.

Маркеры: больше 3–5 редакторов с разными зонами ответственности, два языка и больше, каталожная структура контента, счёт установленных плагинов перевалил за тридцать.

Сценарий 3: вытащить сайт из самописного движка

Грустная классика: сайт написал штатный разработчик, разработчик уволился, документации нет, движок понимает только он. Пока сайт работает — все терпят. Потом нужно поменять телефон в шапке, и выясняется, что править надо в семи местах в PHP-файлах. Здесь миграция — это не прихоть, а снятие риска: сайт, который умеет обслуживать только один человек на планете, — это не актив, а заложник.

Маркеры: никто в компании не может внести правку без «того самого» подрядчика; движок не обновлялся годами; резервных копий нет или их никто не проверял; любая доработка оценивается в недели.

Апгрейд Joomla 3.x → 6.x: почему это миграция, а не обновление

Главное, что я объясняю клиентам на первой встрече: между Joomla 3 и Joomla 6 лежит смена поколений, и «нажать кнопку обновить» не получится. Официальный путь — цепочка 3.10 → 4.4 → 5.x → 6.x, и на каждом шаге ядро проверяет готовность через Pre-Update Check: версию PHP, базу данных, совместимость установленных расширений. Требования конечной точки жёсткие: Joomla 6 хочет PHP 8.3.0+ и MySQL 8.0.13+ либо MariaDB 10.4.0+. Сайт на 3.x обычно живёт на PHP 7.x — то есть параллельно с CMS мигрирует и весь серверный стек.

Ориентир по версиям на момент написания: актуальная — Joomla 6.1.2 (security-релиз от 7 июля 2026, вышел одновременно с 5.4.7 LTS и закрыл 12 уязвимостей). Сама ветка 6.1 «Nyota» стала стабильной 14 апреля 2026, а 6.2 ожидается примерно 13 октября 2026. Целиться при миграции имеет смысл сразу в свежую 6.1.x — прыгать через полгода ещё раз никто не захочет.

Главный блокер — расширения

Ядро по цепочке проходит достаточно предсказуемо. Ломается всё на расширениях. Наша статистика по типовому сайту на Joomla 3.x: из 15 установленных расширений 4–6 не имеют версий под Joomla 5/6. Это конструкторы контента (CCK), старые галереи, слайдеры, формы, SEO-плагины — их авторы либо забросили проекты, либо переписали продукт платно и с другой архитектурой.

Наша стратегия на этот случай отработана:

  • Выпилить лишнее. На старых сайтах половина расширений либо выключена, либо дублирует друг друга. Каждое расширение, которое не переезжает, — минус час-другой работ и минус вектор атаки.
  • Заменить возможностями ядра. Самая частая замена — кастомные поля (Custom Fields) вместо тяжёлых CCK: то, ради чего в 2017 ставили сторонний конструктор, ядро умеет само начиная с 3.7, а в шестёрке поля стали ещё гибче — вплоть до медиаполей.
  • Для оставшегося — искать актуальные аналоги, и только в крайнем случае портировать старый код (это дорого и почти всегда не нужно).
Никогда не обновляйте боевой сайт напрямую. Staging-прогон обязателен: копия сайта на отдельном поддомене или сервере, полная цепочка апгрейда на копии, чек-лист проверки страниц и форм — и только потом повтор на бою в согласованное окно. Все наши «в 9 утра всё лежит» истории из чужой практики начинаются одинаково: «решили обновить по-быстрому прямо на проде».

Кейс: производственная компания, 1200 материалов

Показательный проект прошлого сезона: сайт производственной компании на Joomla 3.10 — 1200 материалов, каталог продукции на кастомных полях, 14 расширений. По плану: день на аудит и staging-прогон (на нём отвалились три расширения — старый слайдер, форма обратной связи и SEO-компонент), день на замену отвалившегося (слайдер — на возможности шаблона, форму — на современный конструктор, SEO — на связку ядро плюс редиректы), день на прогон по цепочке на бою, финальные проверки и снятие старых бэкапов. Итого три рабочих дня, контент и позиции в поиске не пострадали. Это типовой, хороший сценарий — но он стал таким именно потому, что staging показал все сюрпризы заранее.

Перенос контента с WordPress и самописных движков

Когда исходная система — не Joomla, встаёт вопрос переноса контента. Здесь важно сразу разделить: что переносится инструментами, а что — руками и скриптами.

Маппинг сущностей

С WordPress соответствие почти прямое: рубрики становятся категориями Joomla, записи и страницы — материалами, медиатека — медиаменеджером. Для переноса есть миграционные компоненты, но я честно скажу: на реальных объёмах мы чаще пишем собственный скрипт экспорта-импорта — из базы WordPress данные достаются простыми запросами, а кладутся в Joomla через её API или CLI. Так мы контролируем каждое поле, а не молимся на чёрный ящик.

С самописками универсальных инструментов нет по определению. Порядок такой: разбираем структуру базы старого движка, составляем таблицу соответствия «их сущность → материал/категория/кастомное поле Joomla», пишем одноразовый скрипт конвертации, прогоняем, проверяем выборочно и по счётчикам («в старой базе 840 товаров — в новой должно быть 840»).

SEO: таблица 301-редиректов обязательна

Самая дорогая ошибка миграции — потерять поисковый трафик. URL-структура почти наверняка изменится, и каждый старый адрес обязан отдавать 301-редирект на новый. Мы делаем это так: берём sitemap.xml старого сайта (или выгружаем список URL из поисковой консоли), скриптом генерируем таблицу соответствия «старый URL → новый URL», спорные случаи сводим руками, а результат кладём либо в правила веб-сервера, либо в компонент редиректов Joomla. После запуска пару недель следим за логами на предмет 404 — всегда всплывает десяток адресов, которых не было ни в одном sitemap.

Что не тащить с собой

  • Мусорные шорткоды плагинов WordPress. Если в текстах остались конструкции вида [gallery id=...] от давно удалённых плагинов — их надо вычистить регулярками на этапе конвертации, иначе они так и будут торчать в текстах на новом сайте.
  • Старые формы и их архивы заявок. Формы дешевле пересобрать на новом стеке, чем портировать; архив заявок при необходимости выгружается в таблицу и отдаётся клиенту отдельно.
  • Дубли и черновики десятилетней давности. Миграция — лучший момент провести ревизию: на одном из переносов из 2400 «материалов» до нового сайта доехало 1100, и никто ни разу не вспомнил об остальных.

Интеграция с 1С: каталог и цены

Теперь про то, что делает корпоративный сайт живым, — данные из учётной системы. Сразу честно: штатного обмена CommerceML, как у Битрикса, у Joomla нет. Битрикс и 1С — продукты одной экосистемы, их обмен «из коробки» — это их конкурентное преимущество, и врать, что в Joomla так же, я не буду. Но задача «каталог и цены с сайта всегда актуальны» решается, и решается надёжно.

Рабочая схема: выгрузка по расписанию + импорт скриптом

Проверенный на наших проектах поток выглядит так: 1С по расписанию выгружает номенклатуру, цены и остатки в CSV или XML → файл уезжает на сервер сайта по FTP или HTTP → cron на сервере запускает CLI-скрипт импорта → скрипт раскладывает данные в материалы и кастомные поля Joomla (или в таблицы e-commerce-компонента) через её API. Обновление раз в час или раз в ночь — по потребности бизнеса.

Схема потока данных: 1С формирует файл выгрузки, cron по расписанию запускает скрипт импорта, данные попадают в базу и на витрину сайта Joomla

Почему именно файл + cron, а не онлайн-запросы сайта в 1С напрямую: учётная база — не то место, куда стоит пускать веб-сервер в реальном времени. Файловый обмен развязывает системы: 1С может быть за VPN, на обеде, на обновлении — сайт продолжает работать на последних загруженных данных. Для компаний нашего профиля (до 50 рабочих мест) этой асинхронности хватает в ста процентах случаев.

Если нужен полноценный магазин

Когда на сайте не просто каталог-витрина, а корзина и заказы, подключаются e-commerce-расширения: VirtueMart — ветеран с самой богатой функциональностью и самым тяжёлым характером; J2Store — изящное решение «магазин из обычных материалов Joomla», наш выбор для каталогов до пары тысяч позиций; EShop — крепкая середина. Для всех трёх существуют коннекторы к 1С у сторонних разработчиков, но их качество плавает, поэтому мы чаще держим свой слой импорта — он переживает обновления и не зависит от прихотей автора коннектора.

Когда честнее сразу взять Bitrix. Если интернет-магазин — ядро бизнеса: тысячи SKU, обмен заказами в обе стороны, резервы, статусы оплат и доставки в реальном времени — экономика меняется, и штатный CommerceML-обмен Битрикса окупает стоимость лицензии. Joomla оправдана там, где сайт — это контент, каталог и лидогенерация, а не полноценный e-commerce-контур. Мы делаем и то и другое, поэтому советуем без религии — по задаче.

Лиды с сайта в CRM: Битрикс24, amoCRM, Planfix

Вторая по частоте интеграция: заявка с сайта должна мгновенно оказаться в CRM, а не в почтовом ящике, который менеджер проверяет по вдохновению.

Формы делаем либо на встроенных контакт-формах, либо — почти всегда на коммерческих проектах — на конструкторах Convert Forms или RSForm Pro: многошаговые сценарии, условные поля, свои обработчики. Передачу в CRM — Битрикс24, amoCRM, Planfix — строим на вебхуках с серверной стороны: обработчик формы после валидации отправляет данные HTTP-запросом в API CRM.

Путь заявки: форма на сайте проходит антиспам-защиту, сервер отправляет вебхук в воронку CRM, параллельная ветка сохраняет заявку в журнал базы данных

Почему серверная отправка, а не JS-виджет CRM

У каждой CRM есть готовый JS-виджет «вставьте код на сайт». Мы их на боевых проектах избегаем, и вот почему: виджет грузится с чужого CDN и тормозит страницу; при блокировках или сетевых проблемах CDN форма просто исчезает вместе с заявками; блокировщики рекламы режут чужие скрипты. Серверная отправка лишена всех трёх проблем: форма — ваша, рендерится вашим сервером, а CRM получает данные из бэкенда. Если API CRM недоступен — заявка не теряется, а уходит в очередь на повтор.

Антиспам и страховка

  • PoW-капча из ядра. В Joomla 6.1 появилась встроенная proof-of-work капча без внешних сервисов: браузер посетителя решает вычислительную задачку невидимо для человека. Не нужны ни reCAPTCHA (привет, блокировки Google-доменов), ни сторонние подписки.
  • Honeypot-поле — скрытое поле, которое человек не видит, а бот заполняет. Копеечный приём, отсекающий львиную долю примитивного спама.
  • Логирование заявок в базу сайта. Обязательное правило наших внедрений: каждая заявка сначала пишется в локальную таблицу и только потом уходит в CRM. Упал вебхук, сменился токен, CRM на техработах — ни одна заявка не пропала, всё доотправляется из журнала.

REST API Joomla как основа интеграций

Мой любимый аргумент в пользу современной Joomla: REST API есть в ядре начиная с Joomla 4 — без плагинов и доработок. Авторизация — по токену через заголовок X-Joomla-Token (токен выпускается в профиле пользователя), эндпоинты имеют вид /api/index.php/v1/content/articles. Через API создаются и читаются материалы, категории, пользователи, значения кастомных полей — этого достаточно для большинства интеграционных задач.

Практический пример: автопубликация новостей из внутреннего портала

Живой сценарий с одного из наших проектов: новости компании пишутся во внутреннем портале, а на сайт попадают автоматически. Вся «интеграция» — один HTTP-запрос из скрипта портала:

curl -X POST "https://site.ru/api/index.php/v1/content/articles" \
  -H "Content-Type: application/json" \
  -H "X-Joomla-Token: ВАШ_API_ТОКЕН" \
  -d '{
    "title": "Компания открыла новый склад в Подольске",
    "alias": "novyy-sklad-podolsk",
    "catid": 14,
    "articletext": "<p>Полный текст новости...</p>",
    "state": 1,
    "language": "*"
  }'

Материал появляется в категории 14 в статусе «опубликовано». Тем же способом делается чтение: GET на тот же эндпоинт возвращает список материалов в JSON — на этом строятся выгрузки на сторонние витрины и в мобильные приложения.

Headless: Joomla как контент-бэкенд

Из наличия полноценного API следует приятная возможность: Joomla может работать headless — как чистый бэкенд контента, который по API отдаёт материалы мобильному приложению или фронтенду на React/Vue. Редакция работает в привычной удобной админке, а «морда» может быть какой угодно. Для компании, у которой есть и сайт, и приложение, это означает один источник контента вместо двух.

Ограничения API, о которых стоит знать заранее. Ядро покрывает стандартные сущности: контент, категории, пользователей, поля, меню, теги. Данные сторонних компонентов (тот же магазин) в API появляются, только если их автор реализовал поддержку — а это редкость. Сложная фильтрация тоже скромнее, чем хотелось бы. Рецепт стандартный: для нестандартных данных пишется собственный API-плагин — по нашей практике это 8–16 часов работы, и дальше внешние системы работают с вашими сущностями так же, как со штатными.

Почта, календари и обвязка: SSO, Telegram, карты

Несколько интеграций поменьше, которые превращают сайт из витрины в часть корпоративной инфраструктуры.

SSO через Active Directory

В ядре Joomla есть LDAP-плагин аутентификации, и для нашего типового клиента — компания с Active Directory на 20–50 человек — это готовое SSO для закрытых разделов: сотрудник входит в интранет-раздел сайта под своей доменной учёткой. Уволили человека — отключили в AD — доступ к сайту умер сам, без отдельного «а ещё удалите его на сайте». На внедрение с тестами закладываем 4–8 часов, из них половина обычно уходит на согласование сервисной учётки и сетевой доступности контроллера домена.

Новости и вакансии в Telegram-канал

Схема, которую мы ставим почти всем: опубликованный на сайте материал автоматически улетает в Telegram-канал компании через Bot API. Реализация — маленький плагин на событие публикации или cron-скрипт, который забирает свежие материалы через тот же REST API и постит анонсы со ссылками. Отдел маркетинга публикует в одном месте, канал живёт сам. То же самое работает для вакансий.

Карты: Яндекс вместо Google

Мелочь, о которую спотыкаются на каждом переносе старого сайта: карта офиса на Google Maps. В российских реалиях Google-карты грузятся нестабильно, а API требует зарубежной оплаты. При миграции меняем на Яндекс.Карты — виджет бесплатен для типовых сценариев, стабилен и с нормальной детализацией российских адресов. Пять минут работы, если вспомнить об этом заранее, и «почему у нас на контактах серый прямоугольник» — если нет.

Смета и сроки: сколько это стоит в часах

Финальный раздел — про деньги, точнее про часы, из которых деньги складываются. Цифры ниже — из наших реальных смет; это диапазоны для типовых сайтов до нескольких тысяч материалов, без эксклюзивного дизайна.

РаботаТрудозатратыЧто входит
Апгрейд Joomla 3.x → 6.x16–40 чАудит, staging-прогон цепочки 3.10 → 4.4 → 5 → 6, замена расширений, боевой прогон, проверка
Переезд с WordPress24–60 чМаппинг сущностей, скрипт конвертации, медиа, шаблон, таблица 301-редиректов
Переезд с самописного движкаот 40 чРеверс структуры базы, конвертация, пересборка функциональности на ядре и расширениях
Интеграция каталога с 1С (файловый обмен)16–32 чНастройка выгрузки, CLI-импорт, cron, контрольные сверки
Формы + передача лидов в CRM8–16 чКонструктор форм, вебхуки, антиспам, журнал заявок
SSO через LDAP/AD, Telegram-постинг, карты8–16 чНастройка LDAP-плагина, скрипт постинга, замена карт

Что удорожает проект

  • Кастомные расширения без версий под Joomla 5/6 — каждое такое либо заменяется (часы), либо портируется (десятки часов).
  • Дизайн. «Перенесите один в один» на новом шаблонизаторе — это отдельная работа, иногда сопоставимая со всей миграцией. Часто дешевле и полезнее взять современный шаблон и адаптировать под фирменный стиль.
  • Объём и качество контента. Пять тысяч материалов с картинками, вставленными абсолютными ссылками на старый домен, — это не пять тысяч строк в скрипте, а неделя чистки.

И последнее, выстраданное: фиксируйте скоуп до старта. Миграция — магнит для «а ещё вот это перенесите, раз уж вы всё равно там»: старый форум 2012 года, фотоархив корпоративов, три заброшенных поддомена. Каждая такая просьба посреди проекта двигает сроки и бюджет. Мы прописываем в смете явный список того, что переносится, и — отдельно — того, что не переносится, и возвращаемся к нему при каждом «а ещё». Это не бюрократия, это единственный способ сдать миграцию в срок.

Если суммировать: типовой проект «апгрейд плюс базовые интеграции» — это 2–4 недели календарного времени при 40–80 часах работ. Не бесплатно, но это разовая инвестиция, после которой у вас поддерживаемая CMS с патчами безопасности, живыми данными из 1С и заявками, которые не теряются по дороге в CRM.

Перенесём сайт и свяжем его с 1С и CRM

ITfresh — IT-аутсорсинг для компаний до 50 рабочих мест в Москве. Проведём миграцию на Joomla 6 со staging-прогоном и без потери SEO, настроим обмен с 1С, передачу лидов в CRM и SSO через Active Directory, разместим сайт на наших серверах в дата-центре МТС и возьмём на сопровождение. 15+ лет опыта. Telegram: @ITfresh_Boss, телефон: +7 903 729-62-41

📞 Связаться с нами
#Joomla #миграция #1С #CRM #REST API #интеграции #аутсорсинг
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.