Уявіть: у вас 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. Зв'яжіться з нами для консультації — оцінимо ваш проєкт протягом дня. Замовте налаштування багатомовного сайту та отримайте готове рішення під ключ. Вартість налаштування багатомовності, як правило, нижча, ніж переписування системи з нуля. Вартість визначається індивідуально після аналізу.
Терміни налаштування
- Додавання другої мови до працюючого сайту: 1–2 дні.
- Налаштування мультисайту з двома Webspace з нуля: 2–3 дні.
- Повна конфігурація (3 мови, 2 Webspace, shadow pages, hreflang, навігація): 4–5 днів.
Вартість розраховується індивідуально залежно від складності та кількості мов.







