Setting up multi-regionality for a 1C-Bitrix website

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
    1189
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    813
  • 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
    657
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Setting up Multi-regional Site in 1C-Bitrix

Multi-regional setup is when Moscow sees one price and content, Yekaterinburg sees another, and search engines index both variants separately. In Bitrix this is achieved through several approaches with different tradeoffs in implementation complexity and SEO results.

Three architectural approaches

Subdomains: msk.example.com, ekb.example.com. Each subdomain is a separate site in multi-site installation (b_lang). Clean solution from SEO perspective — different URLs for different regions. More complex to maintain: content needs to be synchronized between sites or shared infoblocks used with filtering by site attachment.

Directories: example.com/msk/, example.com/ekb/. Technically simpler: one site, different sections. SEO worse than subdomains, but acceptable with proper geotargeting setup in search console.

GET parameter or cookie: example.com/?region=msk. Bad choice for SEO — one URL, different content, search engine can't distinguish.

For serious projects — subdomains. For small ones — directories.

Implementation through subdomains in multi-site

Create several sites in Bitrix (b_lang): msk with SERVER_NAME = msk.example.com, ekb with SERVER_NAME = ekb.example.com. Each site has its own language code and settings.

Infoblocks in Bitrix are tied to sites through b_iblock_site table. Infoblock can be shared for all sites or separate for each. For product catalog, usually one shared infoblock, regional prices managed through price lists (b_catalog_price with user group attachment).

Regional prices: create price types in catalog (/bitrix/admin/cat_price_type.php) — "Moscow", "Regions". User when moving to regional site automatically falls into group with needed price type. Group assignment logic — in OnAfterUserAuthorize and when region changes.

Determining user region

Automatic determination through IP + manual through "city selection popup". sale module contains class \Bitrix\Sale\Location\LocationTable and b_sale_location table with city/region hierarchy. But for IP geolocation Bitrix doesn't provide built-in solution — use third-party services (MaxMind GeoIP, Sypex Geo, DaData).

Typical scheme: on first visit determine region by IP through external API or local GeoIP database, show popup "Your city — Yekaterinburg? Yes / Choose another", save choice to session and cookie with long TTL.

$regionId = $_COOKIE['user_region'] ?? detectRegionByIp($_SERVER['REMOTE_ADDR']);
$_SESSION['REGION_ID'] = $regionId;
// Redirect to needed subdomain if not matching

SEO settings for multi-regional site

In Yandex.Webmaster for each subdomain set up geotargeting: Moscow → msk.example.com, Yekaterinburg → ekb.example.com. This allows search engine to rank regional versions by corresponding regions.

Tag hreflang for regional variants in Russian not needed (it's for languages, not regions). But canonical — needed: if one URL accessible from both subdomains, point canonical to primary.

In Bitrix canonical is set in template through $APPLICATION->SetPageProperty('canonical', 'https://msk.example.com' . $APPLICATION->GetCurPage()).

Regional phones and addresses

Content specific to region — phones, office addresses, delivery conditions. Either site settings in b_option with region suffix, or separate "Offices" infoblock with region attachment through property. Component on contacts page filters offices by current site/region.