Представьте: у вас Sulu-сайт на русском, нужно добавить английский, но URL для каждого языка должны быть разными — ru.example.com и en.example.com. Вы гуглите, находите документацию Sulu по Webspace, но сталкиваетесь с нюансами: как правильно скопировать структуру страниц без потери данных? Как настроить hreflang, чтобы Google не ругался? Типичная ошибка — пропуск команды sulu:webspace:copy-locale, после чего контент дублируется, а SEO ломается. Мы прошли этот путь десятки раз и собрали готовые конфиги, объяснения и лайфхаки. Закажите настройку мультиязычного сайта — получите решение под ключ.
Проблема: мультиязычность в Sulu кажется сложной, но это не так
Клиенты часто приходят с вопросом: «Как сделать сайт на русском и английском, чтобы контент был независимым, а URL красивыми?». Мы накопили практический опыт настройки Sulu и выработали подход, который работает без сюрпризов. Ниже — готовые конфиги, объяснения и лайфхаки. Экономия времени при использовании Webspace составляет до 30% по сравнению с кастомными решениями на Symfony.
Как устроены Webspace и мультиязычность в Sulu?
Sulu строит мультиязычность и мультисайтовость вокруг концепции Webspace. Один Webspace — один сайт с набором языков и порталов (поддоменов/URL-префиксов). Несколько Webspace в одном инстансе — полноценный мультисайт с общим backoffice и независимым контентом. Как указано в официальной документации Sulu, Webspace является корневым узлом контент-дерева.
| Элемент | Описание |
|---|---|
| Webspace | Логический сайт (example.com, blog.example.com) |
| Portal | Вариант доступа к Webspace (production, staging, dev) |
| Localization | Язык контента (ru, en, de) |
| URL | Привязка языка к домену или пути |
Один Webspace может обслуживаться с нескольких доменов. Обратное невозможно — один домен всегда принадлежит одному Webspace.
Как настроить мультиязычный Webspace? Пошаговая инструкция
-
Создайте XML-конфигурацию в
config/packages/webspaces/. Пример для основного сайта с тремя языками (русский по умолчанию):
<webspace xmlns="http://schemas.sulu.io/webspace/webspace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.sulu.io/webspace/webspace http://schemas.sulu.io/webspace/webspace-1.1.xsd"> <name>Main Site</name> <key>main</key> <localizations> <localization language="ru" default="true" xDefault="true"/> <localization language="en"/> <localization language="de"/> </localizations> <shadow-base-language>ru</shadow-base-language> <default-templates> <default-template type="page">default</default-template> <default-template type="home">homepage</default-template> </default-templates> <templates> <template type="page">default</template> <template type="page">article</template> <template type="home">homepage</template> </templates> <excluded-templates> <excluded-template>overview</excluded-template> </excluded-templates> <portals> <portal> <name>Main</name> <key>main</key> <environments> <environment type="prod"> <urls> <url language="ru" redirect="false">example.com</url> <url language="en">en.example.com</url> <url language="de">de.example.com</url> </urls> </environment> <environment type="stage"> <urls> <url language="ru">stage.example.com</url> </urls> </environment> <environment type="dev"> <urls> <url language="ru">example.localhost</url> <url language="en">en.example.localhost</url> </urls> </environment> </environments> </portal> </portals> </webspace> - Запустите инициализацию:
php bin/console cache:clear php bin/console sulu:document:initialize php bin/console sulu:phpcr:init --user=admin php bin/console sulu:webspace:copy-locale main --from=ru --to=en sulu:webspace:copy-locale копирует структуру дерева страниц с одного языка на другой — удобно при добавлении нового языка к уже заполненному сайту. Без этой команды страницы придётся создавать заново на каждом языке.
- Настройте URL-порталы для каждого окружения, как показано в конфиге. Для продуктивного окружения используйте боевые домены.
Что такое Shadow page и как их использовать?
Shadow page — страница, которая отображает контент другого языка без создания отдельного перевода. Включается в backoffice переключателем. Это экономит время на переводы для разделов, где они не нужны (например, контакты, о компании). Настройка через API:
$document = $this->documentManager->find('/cmf/main/contents/about', 'en'); $document->setShadowLocale('ru'); $document->setShadowLocalesEnabled(true); $this->documentManager->persist($document, 'en'); $this->documentManager->flush(); Shadow pages полезны, когда нужно сохранить единый контент для всех языков, но при этом иметь разные URL (за счёт стратегии URL).
Какие стратегии URL для языков существуют?
Sulu поддерживает три варианта настройки URL:
| Стратегия | Пример | Когда использовать |
|---|---|---|
| Поддомены | ru.example.com, en.example.com | Для географического таргетинга (hreflang с x-default) |
| Префикс пути | example.com/ru, example.com/en | Проще в настройке, единый домен |
| Отдельные домены | example.ru, example.com | Для брендов с разными доменами |
Для SEO обязательно добавьте hreflang в <head> (см. документацию MDN):
{% for locale in ['ru', 'en', 'de'] %} <link rel="alternate" hreflang="{{ locale }}" href="{{ sulu_content_path(null, webspace, locale) }}"> {% endfor %} <link rel="alternate" hreflang="x-default" href="{{ sulu_content_path(null, webspace, 'ru') }}"> Переключатель языков в Twig лучше реализовать с учётом доступных локалей и атрибута aria-current — этот код мы даём в рамках настройки.
Что входит в настройку мультиязычного сайта на Sulu?
Мы предоставляем:
- Конфигурацию Webspace с нужными локалями и порталами
- Настройку URL-стратегии (поддомены, префикс, отдельные домены)
- Реализацию переключателя языков и hreflang
- Настройку Shadow pages для непереводимых разделов
- Права доступа для редакторов по Webspace
- Документацию по эксплуатации
- Обучение редакторов работе с мультиязычным контентом
- Гарантию корректной работы в течение 30 дней
Почему стоит доверить настройку нам?
Мы занимаемся Sulu с момента его появления, реализовали более 15 мультиязычных проектов. Наши инженеры — участники сообщества Sulu, знают все подводные камни. Гарантируем, что настройка через Webspace в 3 раза быстрее кастомных решений на Symfony. Свяжитесь с нами для консультации — оценим ваш проект в течение дня. Закажите настройку мультиязычного сайта и получите готовое решение под ключ. Стоимость настройки мультиязычности, как правило, ниже, чем переписывание системы с нуля. Ориентировочная стоимость добавления второго языка составляет от 15 000 до 30 000 рублей в зависимости от сложности.
Сроки настройки
- Добавление второго языка к работающему сайту: 1–2 дня.
- Настройка мультисайта с двумя Webspace с нуля: 2–3 дня.
- Полная конфигурация (3 языка, 2 Webspace, shadow pages, hreflang, навигация): 4–5 дней.
Стоимость рассчитывается индивидуально в зависимости от сложности и количества языков.







