Битрикс не «переводит» сайт одной галочкой, как WPML в WordPress, — многоязычность строится на встроенной мультисайтовости: несколько «Сайтов» в одном ядре, у каждого свой язык, домен или путь и свой набор контента. Разберём, как это устроено, как завести второй язык и на чём чаще всего ошибаются.
Зачем нужен многоязычный сайт и какие есть варианты
Технически у второй языковой версии есть три способа адресации, и выбор влияет на SEO и стоимость поддержки:
| Вариант | Пример | Особенности |
|---|---|---|
| Подпапка | site.ru/en/ | Один домен, весь вес и репутация сайта общие. Проще всего настроить и поддерживать. |
| Поддомен | en.site.ru | Технически почти отдельный сайт. Требует отдельной настройки DNS и часто — SSL. |
| Отдельный домен | site.com | Максимальное разделение (удобно, если у языковых версий разные юрлица), но репутация и ссылочный вес не переносятся автоматически. |
Для большинства проектов подпапки — самый практичный вариант: он не требует
дополнительных доменов и проще всего связывается через hreflang.
Мультисайтовость: как устроена многоязычность в Битрикс
В терминах ядра Битрикс языковая версия — это отдельный сайт
(CSite, идентификатор SITE_ID), а не отдельная копия
движка. Все сайты одной инсталляции используют:
- одно ядро и одну базу данных;
- общие модули и общий административный раздел;
- собственный
LANGUAGE_ID, шаблон, домен или путь и настройки SEO.
Не копируйте папку сайта на файловом уровне ради второго языка — так вы получите два независимых движка с разными обновлениями, разными модулями и рассинхронизированной базой. Правильный путь — завести новый «Сайт» в том же ядре.
Нужна помощь с Битрикс?
Создание нового сайта под язык
Новый сайт добавляется в разделе Настройки → Настройки продукта → Сайты. Для языковой версии обычно достаточно заполнить:
- SITE_ID — короткий уникальный код (например,
en); - Домен или путь — в зависимости от выбранного варианта адресации из первого раздела;
- Язык — привязка к языку интерфейса (
LANGUAGE_ID), от него зависят системные тексты компонентов и форматы даты/чисел; - Шаблон сайта — можно использовать тот же шаблон, что и у основного сайта, если он не завязан на конкретный язык жёстко.
После сохранения сайт появляется в списке, и его можно выбрать при создании инфоблоков, разделов меню и других сущностей, привязанных к конкретному сайту.
Контент на двух языках: инфоблоки и разделы
Инфоблоки, разделы меню и большинство сущностей в Битрикс привязаны к конкретному сайту. Это значит, что для второго языка контент придётся выстроить параллельно:
- создать копии нужных инфоблоков, привязанные к новому сайту;
- перевести элементы вручную — автоматического перевода в ядре нет;
- при необходимости связать элементы разных языковых инфоблоков между собой, чтобы переключатель языка на карточке товара или новости вёл на её перевод, а не на общую страницу раздела.
Если структура каталога одинакова на обоих языках, держите одинаковый
символьный код (CODE) у элементов-переводов в разных
инфоблоках — это сильно упрощает программное сопоставление «эта карточка
на другом языке» без ручного связывания каждой пары.
Получить список инфоблоков конкретного сайта из кода можно так:
<?php
$res = CIBlockElement::GetList(
['SORT' => 'ASC'],
[
'IBLOCK_ID' => $iblockId,
'ACTIVE' => 'Y',
],
false,
false,
['ID', 'NAME', 'CODE']
);
while ($el = $res->GetNext()) {
// элемент с тем же CODE есть и в инфоблоке другого языка —
// ссылку на перевод строим по нему, а не по ID
}
Переключатель языков
Переключатель обычно строится не как ссылка на главную другого сайта, а как ссылка на перевод текущей страницы. Для страниц с одинаковой структурой путей достаточно заменить директорию сайта в текущем URL:
<?php
global $APPLICATION;
$curDir = $APPLICATION->GetCurDir(); // например, /catalog/mebel/stol/
$links = [
'ru' => '/' . $curDir,
'en' => '/en' . $curDir,
];
Для карточек инфоблоков (товар, статья) такой прямой подстановки пути недостаточно — там ссылка должна вести на связанный элемент в языковом инфоблоке (см. предыдущий раздел), иначе переключение языка на карточке будет приводить на страницу 404 или на список раздела.
SEO для мультиязычного сайта: hreflang
Каждая языковая версия страницы должна явно указывать поисковым системам,
какие у неё есть альтернативы на других языках — тег hreflang
в <head>:
<link rel="alternate" hreflang="ru" href="https://site.ru/catalog/mebel/stol/" />
<link rel="alternate" hreflang="en" href="https://site.ru/en/catalog/mebel/stol/" />
<link rel="alternate" hreflang="x-default" href="https://site.ru/catalog/mebel/stol/" />
Частая недоработка — проставить hreflang только на одной
языковой версии. Тег обязателен на каждой из связанных
страниц, включая self-reference (страница должна ссылаться сама на себя
тем же тегом) — иначе Google может проигнорировать разметку целиком.
Частые ошибки
- Копирование движка вместо создания сайта. Два независимых ядра вместо одного с двумя сайтами — двойная работа на каждое обновление и доработку.
- Один инфоблок на оба языка. Без разделения контента по сайтам элементы на разных языках перемешиваются в одном списке.
-
Забытые языковые файлы шаблона. Компоненты ядра переводятся
автоматически по
LANGUAGE_ID, а вот тексты, зашитые прямо в шаблон сайта, — нет: их нужно вынести в файлыlang/{ЯЗЫК}/...вручную. - Хreflang без self-reference — см. раздел про SEO выше.
Итог
Многоязычность в 1С-Битрикс — это не «переключатель», а архитектурное решение:
отдельный «Сайт» на каждый язык в общем ядре, параллельная структура контента
и явные ссылки между переводами — как для переключателя языка, так и для
hreflang. Закладывать её лучше на старте проекта: переносить
контент в мультисайтовую структуру постфактум заметно дороже, чем настроить
её сразу.