Главная » Администрирование Битрикс » Многоязычный сайт на 1С-Битрикс: как настроить и какие есть варианты

Многоязычный сайт на 1С-Битрикс: как настроить и какие есть варианты

Битрикс не «переводит» сайт одной галочкой, как WPML в WordPress, — многоязычность строится на встроенной мультисайтовости: несколько «Сайтов» в одном ядре, у каждого свой язык, домен или путь и свой набор контента.

Битрикс не «переводит» сайт одной галочкой, как 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. Закладывать её лучше на старте проекта: переносить контент в мультисайтовую структуру постфактум заметно дороже, чем настроить её сразу.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний