Developing a multi-brand storefront on 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1175
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Multi-Brand Storefront Development on 1C-Bitrix

A multi-brand storefront is a shop where several brands are presented as separate "mini-shops" within a single platform. The buyer sees a Nike section, an Adidas section, a Puma section — each with its own visual style, its own banners, and its own navigation. But the cart, checkout, and user account are shared. These are not simply catalogue categories; they are separate spaces within a single site.

Data Storage Architecture

The multi-brand storefront catalogue is built on the Bitrix catalogue info block with a section hierarchy. Structure:

b_iblock_section (catalogue)
├── BRAND_ID: 1 (Nike)
│   ├── Sneakers
│   ├── Clothing
│   └── Accessories
├── BRAND_ID: 2 (Adidas)
│   ├── Sneakers
│   └── Clothing

A brand is the top-level section or a separate brands info block linked to products. The second option is more flexible: one "Brands" info block contains brand metadata (logo, colours, description, banners), while each product in the catalogue info block has a BRAND_ID property of type "Element".

"Brands" info block (IBLOCK_BRANDS):

  • LOGO — SVG or PNG logo
  • BANNER_DESKTOP, BANNER_MOBILE — brand section banners
  • PRIMARY_COLOR, ACCENT_COLOR — colours for CSS variables
  • DESCRIPTION — brand history
  • BRAND_URL — official website
  • OFFICIAL_DEALER — authorised dealer status (flag)

Dynamic Section Branding

When a user opens a brand section, the template changes colours, the header, and the banner. This is implemented via CSS variables generated by PHP and injected into <head>:

// In the brand section's template.php
$brandId = $arResult['SECTION']['UF_BRAND_ID']; // custom section field
$brand   = BrandTable::getByPrimary($brandId)->fetch();

if ($brand) {
    $APPLICATION->SetAdditionalCSS('
        :root {
            --brand-primary: ' . htmlspecialchars($brand['PRIMARY_COLOR']) . ';
            --brand-accent:  ' . htmlspecialchars($brand['ACCENT_COLOR']) . ';
        }
    ');
}

The brand logo in the section page header replaces the main site logo. In other sections the regular logo is shown. This is done via a global variable in the template:

// In the template's header.php
global $currentBrand;
echo $currentBrand
    ? '<img src="' . $currentBrand['LOGO_URL'] . '" alt="' . $currentBrand['NAME'] . '">'
    : '<img src="/local/templates/main/img/logo.svg" alt="Store">';

Filtering and Navigation by Brand

Inside a brand section, the catalogue filter works only within that brand's products. The standard smart filter component bitrix:catalog.smart.filter must be parameterised:

$APPLICATION->IncludeComponent('bitrix:catalog.smart.filter', '', [
    'IBLOCK_ID'         => CATALOG_IBLOCK_ID,
    'SECTION_ID'        => $brandSectionId, // root section of the brand
    'DEPTH_LEVEL'       => 5,               // nested sub-sections of the brand
    'HIDE_NOT_SELECTED' => 'Y',
    // ...
]);

The smart filter calculates available values (b_catalog_smart_filter) only for products in the specified section — this works correctly out of the box.

Breadcrumbs show the path: "Home → Nike → Sneakers". The bitrix:breadcrumb component works automatically with the correct section structure.

Brand Page: Landing + Catalogue

A brand page is not just a product listing. It is a storefront with: a brand banner, brand history, key collections, new arrivals, and bestsellers.

Brand page composition via $APPLICATION->IncludeComponent():

// brand.php — separate page template
IncludeComponent('custom:brand.page', '', ['BRAND_ID' => $brandId]);
// Inside the component:
// - Brand banner
// - "About the brand" block from DESCRIPTION
// - catalog.section component with product listing
// - New arrivals block (filter by date added)
// - Bestsellers block (filter by sales count)

Cross-Brand Product Comparison

The standard comparison component bitrix:catalog.compare.buy works within a single info block. For a multi-brand storefront, comparison must work across brands for similar characteristics (e.g., Nike vs Adidas vs Puma sneakers).

This is technically achievable: the comparison list is stored in the session, characteristics come from info block properties. The challenge — different brands may have different sets of characteristics. Solution: a fixed set of "common" properties for comparison (upper material, sole type, last type), with unique properties per brand shown separately.

Managing Content in Brand Sections

If each brand has its own manager, access must be restricted:

// The "Nike Brand Manager" group has access only to elements with BRAND_ID = 1
// Configured via info block access permissions at the section level
CIBlock::SetPermission(CATALOG_IBLOCK_ID, $nikeSectionId, $nikeManagerGroupId, 'W');

Bitrix's standard access control allows granting access at the info block section level — a Nike manager sees and edits only products in the Nike section.

Analytics by Brand

Storefront owners need a breakdown of sales and traffic by brand:

  • Traffic: page events by brand are sent to Yandex.Metrica via dataLayer with a brand_id parameter
  • Sales: the BRAND_ID field is written to order item properties (b_sale_order_props), aggregated via SQL
  • Conversion: brand-level funnel in a BI tool (ClickHouse + Metabase or Power BI)

SEO for the Multi-Brand Storefront

Each brand is a potential search entry point. A brand page should be optimised for queries like "buy Nike in London":

  • SEO description for the brand section in b_iblock_section.DESCRIPTION
  • Individual META_TITLE and META_DESCRIPTION for the brand page
  • BreadcrumbList Schema.org markup
  • Canonical to the brand page when filtering

Timelines

Scale What's included Timeline
3–5 brands, basic branding Section structure, brand pages, filter 3–5 weeks
5–20 brands + dynamic colours, brand manager dashboard, analytics 6–10 weeks
20+ brands, marketplace + partner cabinet, financial calculation, API 12–20 weeks

A multi-brand storefront complicates the catalogue but creates a competitive advantage: buyers come not for a specific product, but to a "place" where they compare several brands of the same product type.