Багатосайтовість Statamic та багатомовний контент – це потужний інструмент для економії ресурсів. Statamic Pro з коробки вміє обслуговувати кілька сайтів з однієї інсталяції — ми використовуємо цю можливість, щоб заощадити час та ресурси клієнтів. Типовий сценарій: компанія зростає, з'являються нові ринки. Замість п'яти окремих CMS — одна інсталяція, єдиний адмінський інтерфейс, спільні оновлення. Розберемо налаштування на прикладі реального проекту: інтернет-магазин з російською, англійською та німецькою версіями. Ви дізнаєтесь, як організувати конфігурацію, керувати локалізованими записами та реалізувати перемикання мов з коректними SEO-тегами.
Налаштування багатосайтовості Statamic
Які проблеми вирішує багатосайтовість
Типове завдання: інтернет-магазин хоче вийти на німецький ринок. Потрібен новий домен, переклад контенту, але корзина та каталог — спільні. Або кожен сайт — окремий бренд зі своєю структурою. Statamic вирішує це через конфіг sites.php та централізоване керування записами.
Перша проблема — дублювання коду. Без багатосайтовості довелося б розгортати окремі інсталяції — множаться бекенди, конфіги, оновлення. Statamic дозволяє тримати все в одному репозиторії.
Друга проблема — SEO-плутанина. Якщо на одному домені висять дві мови без hreflang, пошуковики можуть вважати їх дублями. Налаштуємо hreflang правильно.
Третя проблема — перемикання мов. Неочевидні моменти в Antlers: як показати посилання на переклад поточної сторінки, якщо його ще немає? Вирішимо через fallback-логіку.
Конфігурація sites.php
Базовий конфіг — config/statamic/sites.php. Вказуємо handle, locale, url та опціонально direction. Приклад для трьох мов:
return [ 'sites' => [ 'default' => [ 'name' => 'My Site UA', 'locale' => 'uk_UA', 'url' => env('APP_URL', '/'), 'direction' => 'ltr', 'attributes' => ['lang' => 'uk'], ], 'english' => [ 'name' => 'My Site EN', 'locale' => 'en_US', 'url' => env('SITE_EN_URL', 'https://mysite.com/en/'), 'direction' => 'ltr', 'attributes' => ['lang' => 'en'], ], 'german' => [ 'name' => 'My Site DE', 'locale' => 'de_DE', 'url' => env('SITE_DE_URL', 'https://mysite.com/de/'), ], ], ]; Локалізація колекцій
У YAML колекції вказуємо, які сайти беруть участь:
# content/collections/blog.yaml sites: - default - english - german Після цього записи автоматично багатосайтові. Папки в content/collections/blog/:
-
default/my-post.md(українська версія) -
english/my-post.md(англійська версія) -
german/my-post.md(німецька версія)
Якщо локалізації для якогось сайту немає — Statamic покаже контент з default-сайту (fallback). Це зручно, коли переклад ще не готовий.
SEO та перемикання мов
Як налаштувати hreflang та перемикач мов?
Перемикач мов в Antlers. Повний варіант з перевіркою існування перекладу:
{{ if entry }} {{ collection:sites }} {{ if sites_enabled }} {{ foreach:localizations as="locale => localized_entry" }} {{ if localized_entry }} <a href="{{ localized_entry:url }}" lang="{{ locale }}" {{ if locale == {current_site:handle} }}aria-current="page"{{ /if }}> {{ site:name }} </a> {{ /if }} {{ /foreach:localizations }} {{ /if }} {{ /collection:sites }} {{ /if }} Згідно офіційної документації Statamic, тег {{ locales }} — більш лаконічна альтернатива, але він не перевіряє наявність перекладу, тому використовуйте з обережністю.
PHP-запити з урахуванням сайту. Отримати записи лише для поточного сайту:
use Statamic\Facades\Entry; use Statamic\Facades\Site; $posts = Entry::query() ->where('collection', 'blog') ->where('site', Site::current()->handle()) ->get(); Для іншого сайту — підставте його handle. SEO: hreflang теги. У шапку layout додаємо:
{{ if entry }} {{ locales }} <link rel="alternate" hreflang="{{ locale }}" href="{{ url }}"> {{ /locales }} <link rel="alternate" hreflang="x-default" href="{{ entry:url }}"> {{ /if }} Fallback-поведінка Statamic
| Ситуація | Поведінка | Приклад |
|---|---|---|
| Запис є тільки в default | Показується контент default-сайту | Українська стаття показується на англійському сайті, якщо немає англійської версії |
| Запис є в кількох сайтах | Кожен сайт отримує свою версію | Українська та англійська версії незалежні |
| Немає запису ніде | Сторінка 404 | Якщо запис не опубліковано для жодного сайту |
Практична реалізація
Процес роботи
- Аналітика — визначаємо кількість мов, доменів, політику спільного контенту.
- Конфігурація — прописуємо sites.php, налаштовуємо env-змінні.
- Перенос контенту — міграція записів із зазначенням сайту.
- Розробка шаблонів — перемикач мов, hreflang, глобали.
- Тестування — перевіряємо fallback, перемикання, швидкість. У 90% випадків все працює з першої спроби.
- Деплой — налаштовуємо маршрутизацію (Nginx/Cloudflare) під домени.
Терміни та вартість
Налаштування багатосайту з 2–3 мовами — від 1 до 3 днів, включаючи тестування. Вартість: від €800 до €1500 в залежності від кількості мов та складності контенту. Для проектів з 10 000+ записів рекомендуємо закладати до 5 днів на міграцію та оптимізацію.
Що входить в роботу
- Конфігурація sites.php та env-змінних.
- Налаштування локалізації колекцій та глобалів.
- Розробка перемикача мов в Antlers.
- Впровадження hreflang-тегів.
- Документація щодо додавання нової мови.
- Консультація щодо вибору доменної схеми.
Поради та висновки
Як уникнути типових помилок?
- Забути вказати direction для арабської/івриту — текст ламається.
- Ігнорувати fallback — якщо локалізації немає, пошуковик може показати не ту версію.
- Не перевіряти hreflang — Google Search Console покаже помилки "no return tags".
Як налаштувати багатосайтовість без дублювання коду?
Секрет у централізованій конфігурації та спільних шаблонах. Всі шаблони Antlers лежать в одній папці resources/views, а контент різниться за сайтами. Це скорочує обсяг коду на 40% порівняно з різними CMS.
Чому варто довірити багатосайтовість нам?
Ми працюємо з Statamic понад 7 років, реалізували багатосайтові проекти для e-commerce та корпоративних порталів (більше 20 проектів). Гарантуємо, що всі мови будуть коректно проіндексовані, а перемикання відбувається без перезавантаження сторінки (завдяки Livewire/Alpine). Зв'яжіться з нами, щоб обговорити ваш проект. Замовте аудит поточної конфігурації — виявимо вузькі місця та запропонуємо оптимізацію.







