Разработка многосайтовой структуры на 1С-Битрикс — единственное разумное решение, когда клиент запускает второй бренд. Двойная лицензия, двойной обмен с 1С, двойная админка. Через месяц выясняется: товарная база общая, менеджеры в разных админках, синхронизация остатков летит. Мы проектируем многосайтовые архитектуры с 2014 года и знаем все подводные камни: от протекающего кэша до некорректного sitemap. Получите консультацию — оценим ваш проект за 2 дня.
Когда многосайтовость оправдана?
Холдинг с пятью брендами. Франшиза с региональными представительствами. Группа компаний, где у каждого направления свой домен, но товарная база общая. Альтернатива — пять отдельных установок Битрикса, пять лицензий, пять серверов, пять обменов с 1С. Многосайтовость на одной установке — один сервер, одна лицензия (начиная с редакции «Бизнес»), одна админка. Экономия на лицензиях и поддержке достигает 30–50% по сравнению с раздельными установками.
Не оправдана — когда сайты вообще не пересекаются по данным, аудитории и бизнес-логике. Тогда связка через одну базу только усложняет деплой и увеличивает радиус поражения при сбое.
Архитектура: общая база vs раздельные
Битрикс поддерживает два режима многосайтовости.
Общая база, общие файлы
Все сайты живут в одной базе MySQL и одной файловой системе. Разделение — через SITE_ID в таблицах. Инфоблок можно привязать к нескольким сайтам через b_iblock_site. Пользователь, зарегистрированный на сайте A, автоматически авторизован на сайте B (общая таблица b_user, общие сессии).
Подводные камни:
-
Кеш компонентов — если не указать SITE_ID в ключе кеша, компонент news.list на сайте B отдаст данные, закешированные для сайта A. Стандартные компоненты Битрикса обычно учитывают SITE_ID, а вот кастомные — нет, пока не добавишь
$this->arParams['CACHE_GROUPS']и не включишь SITE_ID вgetAdditionalCacheID(). При 5 сайтах с общим каталогом из 50 000 товаров время полного обновления кэша сокращается на 60%, если правильно настроить ключи. - Права доступа — группы пользователей общие. Менеджер контента сайта A может случайно отредактировать инфоблок сайта B, если не выстроена матрица прав на уровне инфоблоков.
- Модуль SEO — sitemap.xml генерируется через seo.sitemap.run. Нужно создавать отдельную карту для каждого SITE_ID, иначе в карту сайта A попадут URL сайта B.
Раздельные базы
Настройка через .settings.php, секция connections. Каждый сайт подключается к своей базе. Полная изоляция данных, но общих пользователей и общих инфоблоков больше нет. Используется редко — в основном для полного разделения, когда общая админка нужна только для управления серверной инфраструктурой.
Как решается проблема общего кэша?
В многосайтовой структуре кэш — главная головная боль. Без привязки к SITE_ID один сайт может показывать данные другого. Решение — на уровне разработчика: в result_modifier.php добавляем SITE_ID в ключ кэша через $arParams['CACHE_GROUPS'] и CPHPCache::SetCache(). Для композитного кэша настраиваем отдельный домен в модуле "Композитный сайт". Это гарантирует, что HTML-снимок сайта A не отдастся на домене B.
Подробнее о механизмах cookie — Wikipedia.
Общая пользовательская база
Главное преимущество общей базы — единая авторизация. Пользователь регистрируется на brand-a.com, заходит на brand-b.com — уже авторизован. Это работает через общую таблицу b_user и общие сессии.
Но есть подвох. Сессии хранятся в файлах по умолчанию — в /bitrix/sessions/. При двух доменах cookie PHPSESSID не передаётся между ними (разные домены — разные cookie). Решения:
- SSO через токен — при переходе между доменами передаём одноразовый токен в URL, на принимающей стороне создаём сессию. Модуль socialservices или кастомный обработчик.
- Общий домен верхнего уровня — .company.com, cookie ставится на .company.com, работает для a.company.com и b.company.com.
- Redis для сессий — сессии хранятся централизованно, но проблема cookie остаётся. Redis решает другую задачу — горизонтальное масштабирование, не кросс-доменную авторизацию.
Контент: что делить, что разделять
Инфоблоки привязываются к сайтам через настройку в админке. Один инфоблок может быть доступен на нескольких сайтах. Типичный сценарий: каталог товаров — общий (SITE_ID: s1, s2, s3), новости — у каждого сайта свои.
Важный момент — свойства инфоблока общие. Нельзя добавить свойство "Акция" только для сайта A, если инфоблок привязан к сайтам A, B, C. Все три сайта увидят это свойство. Решение — использовать множественное свойство типа "Привязка к сайту" и фильтровать в компоненте.
Торговый каталог. Модуль catalog позволяет настроить разные типы цен для разных сайтов. Сайт для оптовиков показывает оптовые цены, розничный — розничные. Складские остатки — общие или раздельные через привязку к магазинам (b_catalog_store).
SEO-настройки — шаблоны META через iblock.type.edit задаются на уровне инфоблока, не сайта. Для разных сайтов с одним инфоблоком придётся генерировать META программно в result_modifier.php, подставляя нужные значения по SITE_ID.
Частые проблемы при масштабировании
- Обмен с 1С — модуль catalog.import.1c импортирует товары в инфоблоки. Если каталог общий на три сайта, импорт один. Если у каждого сайта свой каталог — три отдельных обмена, три профиля в 1С. При 50К+ товаров каждый обмен блокирует таблицы на 15–30 минут. Разносим по крону, чтобы не пересекались.
- Поиск — штатный search.title индексирует все сайты в одну таблицу b_search_content. Результаты фильтруются по SITE_ID, но индекс общий. На 5 сайтах с 100К страниц каждый — индекс на полмиллиона записей, переиндексация занимает часы. Elasticsearch вместо штатного поиска — если объём данных существенный.
- Композитный кеш — модуль composite работает корректно с многосайтовостью, но требует отдельной настройки для каждого домена. Без этого HTML-снимок сайта A может отдаться на домене B.
Что входит в разработку многосайтовой структуры
- Аудит текущей инфраструктуры и интеграций.
- Проектирование архитектуры: матрица сайтов, инфоблоков, прав доступа, шаблонов.
- Настройка ядра: создание сайтов, привязка доменов, настройка сессий и кэширования.
- Разработка шаблонов: общий базовый шаблон + индивидуальные шаблоны сайтов.
- Миграция контента и настройка SEO-модуля для каждого домена.
- Настройка обмена с 1С (если требуется).
- Тестирование кросс-сайтовых сценариев: авторизация, кэш, sitemap.
- Обучение редакторов работе в единой админке.
- Мониторинг после запуска.
Как сравнить общую базу с раздельными?
Общая база дешевле в 2 раза по лицензиям и проще в поддержке, раздельные — быстрее при пиковых нагрузках и изолируют сбои. Выбор зависит от SLA и бюджета: для большинства проектов хватает общей базы с правильным кэшированием.
Сроки ориентировочно
| Масштаб | Сроки |
|---|---|
| 2-3 сайта, общий каталог, разные шаблоны | 6-10 недель |
| 5+ сайтов, разные каталоги, SSO | 10-16 недель |
| Региональная сеть 10+ сайтов с интеграцией 1С | 14-24 недели |
Стоимость рассчитывается индивидуально после детального анализа — оценим ваш проект за 2 дня.
Типичные сложности и их решения
| Проблема | Решение |
|---|---|
| Кэш одного сайта протекает в другой | Добавить SITE_ID в ключ кэша компонентов |
| Авторизация не работает между доменами | SSO через одноразовый токен или общий cookie-домен |
| SEO-модуль генерирует sitemap с чужими URL | Создать отдельную карту для каждого SITE_ID |
| Импорт из 1С блокирует таблицы | Разнести импорт по крону и использовать разные профили |
Свяжитесь с нами для оценки вашего проекта. Закажите консультацию — подберём оптимальную архитектуру без переплат.







