Настройка мультисайтовости Magento 2 (Website/Store/Store View)

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка мультисайтовости Magento 2 (Website/Store/Store View)
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка мультисайтовости Magento 2 (Website/Store/Store View)

Magento 2 позволяет управлять несколькими сайтами из одной инсталляции. Это не просто удобство — при правильной архитектуре мультисайт значительно снижает операционную нагрузку: одна кодовая база, один деплой, общие продукты и клиентская база с раздельными каталогами и настройками.

Трёхуровневая иерархия

Magento делит сайты на три уровня с чёткой иерархией:

Website — верхний уровень. Определяет:

  • Независимую корзину и чекаут (покупки не переносятся между Website)
  • Общую клиентскую базу (по умолчанию) или изолированную
  • Базовую валюту
  • Группы Store

Store (Store Group) — средний уровень:

  • Корневая категория каталога (разные деревья категорий для разных Store)
  • Несколько Store View для одной языковой версии
  • Один Store View должен быть помечен как Default

Store View — нижний уровень:

  • Язык и локализация
  • URL (поддомен или путь)
  • Переводы контента

Типичная структура:

Website: Main (myshop.ru)
├── Store: Retail
│   ├── Store View: Russian (ru_RU)   [default]
│   └── Store View: English (en_US)
└── Store: Wholesale
    └── Store View: Russian (ru_RU)   [default]

Website: Partner (b2b.myshop.ru)
└── Store: B2B Catalog
    └── Store View: Russian (ru_RU)   [default]

Создание через Admin

Admin > Stores > All Stores

1. Create Website
   - Name: B2B Portal
   - Code: b2b (уникальный, только латиница/цифры/underscore)
   - Sort Order: 2

2. Create Store (Store Group)
   - Website: B2B Portal
   - Name: B2B Catalog
   - Root Category: B2B Categories (создаётся отдельно)
   - Default Store View: (выбирается после создания Store View)

3. Create Store View
   - Store: B2B Catalog
   - Name: Русский
   - Code: b2b_ru
   - Status: Enabled
   - Sort Order: 1

Nginx конфигурация для мультисайта

Вариант 1 — разные поддомены:

# /etc/nginx/sites-available/magento-retail.conf
server {
    listen 443 ssl http2;
    server_name shop.example.com;
    root /var/www/magento/pub;

    set $MAGE_RUN_CODE "base";
    set $MAGE_RUN_TYPE "website";
    include /etc/nginx/snippets/magento.conf;
}

# /etc/nginx/sites-available/magento-b2b.conf
server {
    listen 443 ssl http2;
    server_name b2b.example.com;
    root /var/www/magento/pub;

    set $MAGE_RUN_CODE "b2b";
    set $MAGE_RUN_TYPE "website";
    include /etc/nginx/snippets/magento.conf;
}

Вариант 2 — URL-пути (один домен):

server {
    listen 443 ssl http2;
    server_name example.com;
    root /var/www/magento/pub;

    # Определение Store View по URL-пути
    location ~ ^/b2b {
        set $MAGE_RUN_CODE "b2b_ru";
        set $MAGE_RUN_TYPE "store";
        rewrite ^/b2b/?(.*) /$1 break;
    }

    location / {
        set $MAGE_RUN_CODE "base";
        set $MAGE_RUN_TYPE "website";
    }

    include /etc/nginx/snippets/magento.conf;
}

Вариант 3 — через PHP entry point (наиболее гибкий):

// pub/index.php — кастомный маппинг до Bootstrap::run()
use Magento\Framework\App\Bootstrap;

require __DIR__ . '/../app/bootstrap.php';

$host = $_SERVER['HTTP_HOST'] ?? '';
$params = $_SERVER;

$runCodes = [
    'shop.example.com'   => ['type' => 'website', 'code' => 'base'],
    'b2b.example.com'    => ['type' => 'website', 'code' => 'b2b'],
    'de.example.com'     => ['type' => 'store',   'code' => 'store_de'],
];

if (isset($runCodes[$host])) {
    $params['MAGE_RUN_TYPE'] = $runCodes[$host]['type'];
    $params['MAGE_RUN_CODE'] = $runCodes[$host]['code'];
}

$bootstrap = Bootstrap::create(BP, $params);
$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
$bootstrap->run($app);

Настройка URL для Store View

Admin > Stores > Configuration > Scope: [Store View]
> General > Web > Base URLs

Base URL: https://b2b.example.com/
Base Link URL: https://b2b.example.com/
Base Static View Files URL: https://b2b.example.com/pub/static/
Base Media Files URL: https://b2b.example.com/pub/media/

Для HTTPS:

> Base URLs (Secure)
Secure Base URL: https://b2b.example.com/
Use Secure URLs on Storefront: Yes
Use Secure URLs in Admin: Yes

Раздельные каталоги

Каждый Store имеет свою Root Category. Это позволяет показывать разные деревья категорий:

Admin > Catalog > Categories

Создать корневую категорию "B2B Categories":
├── Промышленное оборудование
│   ├── Станки
│   └── Измерительные приборы
└── Расходные материалы

Создать корневую категорию "Retail Categories":
├── Электроника
├── Бытовая техника
└── Инструменты

Продукты при этом могут быть общими — один продукт привязан к категориям из разных деревьев.

Scope конфигурации

Большинство настроек Magento имеют Scope: Global → Website → Store View. Настройки Store View перекрывают Website, которые перекрывают Global.

Admin > Stores > Configuration
Текущий scope: выбирается в левом верхнем углу

Пример — разные методы доставки для разных Website:
Scope: Website B2B
  > Sales > Shipping Methods
    Table Rates: Enabled
    Free Shipping: Disabled (для B2B показываем реальную стоимость)

Scope: Website Retail
  > Sales > Shipping Methods
    Table Rates: Enabled
    Free Shipping: Enabled (от 3000 RUB)

Через CLI с указанием scope:

# Установка базового URL для конкретного Website
bin/magento config:set --scope=websites --scope-code=b2b web/unsecure/base_url https://b2b.example.com/
bin/magento config:set --scope=websites --scope-code=b2b web/secure/base_url https://b2b.example.com/

# Для Store View
bin/magento config:set --scope=stores --scope-code=b2b_ru general/locale/code ru_RU
bin/magento config:set --scope=stores --scope-code=b2b_ru general/locale/timezone Europe/Moscow

bin/magento cache:flush

Деплой статики для нескольких тем

При мультисайте разные Website/Store могут использовать разные темы:

# Деплой для всех тем и локалей
bin/magento setup:static-content:deploy ru_RU en_US de_DE \
    --theme MyCompany/retail \
    --theme MyCompany/b2b \
    --jobs=4 \
    -f

Общая клиентская база vs изолированная

По умолчанию клиенты общие для всей инсталляции — email уникален глобально. Для изоляции клиентов по Website:

Admin > Stores > Configuration > Scope: Global
> Customers > Customer Configuration > Account Sharing Options
  Share Customer Accounts: Per Website

После изменения — обязательный bin/magento customer:hash:upgrade и переиндексация.

Производительность мультисайта

Каждый Store View добавляет нагрузку на индексеры и кеш. При большом количестве Store View:

  • Индексер catalog_product_price — самый тяжёлый, нужна оптимизация
  • Varnish FPC разделяет кеш по Store View через X-Magento-Tags
  • Redis кеш должен иметь отдельные базы для разных типов данных

Мониторинг медленных индексеров:

bin/magento indexer:status
bin/magento indexer:reindex catalog_product_price

# Время последней переиндексации
SELECT indexer_id, status, updated FROM indexer_state;

Сроки

Добавление второго Website/Store с общим каталогом и раздельными настройками: 2–3 дня. Полноценный мультисайт с 3–5 Website, разными темами, изолированными каталогами, раздельной клиентской базой и кастомными Nginx-правилами: 1–2 недели. Если добавить B2B-модуль Adobe Commerce с корпоративными аккаунтами и прайс-листами: дополнительно 2–4 недели.