Уявіть: у вас сайт для Росії (company.ru), для Казахстану (company.kz) і для Білорусі (company.by). Кожен має показувати свої ціни, контент, юридичну інформацію. Але підтримувати три окремі сайти — дорого та неефективно. Рішення — мультидоменний сайт на єдиній кодовій базі, побудований на принципах мультитенантності. Ми налаштовуємо такі системи під ключ, забезпечуючи повну ізоляцію контенту та максимальний локальний SEO-сигнал. Мультидомен у 2–3 рази сильніший за піддиректорії за силою локального SEO-сигналу, що підтверджують кейси наших клієнтів (збільшення трафіку до 30%).
Проблеми, які вирішує мультидомен
Розділення контенту та налаштувань — налаштування мультидоменного сайту
Кожен домен — самостійний сайт в очах Google. Для цього потрібна різна валюта, часовий пояс, юридичні тексти та ціни. Єдина база даних з прив'язкою до домену вирішує проблему без дублювання коду. Ми використовуємо таблицю site_domains, де зберігаються хост, код країни, локаль та валюта. Підхід економить до 40% часу на оновленнях порівняно з підтримкою окремих інсталяцій.
SEO-ізоляція та hreflang
Google повинен бачити, що company.kz і company.ru — різні сайти для різних країн. Для цього ми генеруємо hreflang-теги в head кожної сторінки. Помилка в hreflang призводить до песимізації — ми це виключаємо автоматичною генерацією на основі таблиці доменів. Правильне налаштування збільшує локальний органічний трафік у середньому на 30%.
Втрата сесії при переході між доменами
Відзначимо: коли користувач переходить з company.ru на company.kz, сесія втрачається — куки не передаються між різними доменами. Ми реалізуємо SSO через одноразовий токен: при кліку «Перейти на сайт для Казахстану» генерується токен, другий домен обмінює його на сесію. Це працює без спільних кук і не вимагає єдиного домену.
Як працює мультитенантна архітектура?
В основі лежить таблиця site_domains, що зв'язує домен з налаштуваннями. Middleware ResolveSiteDomain визначає поточний домен, встановлює локаль, часовий пояс та валюту. Контент зберігається з прив'язкою до домену — специфічні сторінки перевизначають загальні.
CREATE TABLE site_domains (
id SERIAL PRIMARY KEY,
host VARCHAR(253) UNIQUE NOT NULL,
country_code CHAR(2) NOT NULL,
locale VARCHAR(10) NOT NULL,
currency CHAR(3) NOT NULL,
timezone VARCHAR(64) NOT NULL,
is_primary BOOLEAN DEFAULT false,
is_active BOOLEAN DEFAULT true,
meta JSONB DEFAULT '{}'
);
Middleware визначення домену
class ResolveSiteDomain
{
public function handle(Request $request, Closure $next): Response
{
$host = $request->getHost();
$domain = SiteDomain::where('host', $host)->where('is_active', true)->first();
if (!$domain) {
$primary = SiteDomain::where('is_primary', true)->firstOrFail();
return redirect("https://{$primary->host}" . $request->getRequestUri(), 301);
}
app()->instance('site.domain', $domain);
App::setLocale($domain->locale);
Carbon::setlocale($domain->locale);
date_default_timezone_set($domain->timezone);
return $next($request);
}
}
Nginx: віртуальні хости
Достатньо одного server block з кількома server_name. SSL-сертифікат можна об'єднати в SAN або використати wildcard.
server {
listen 443 ssl http2;
server_name company.ru company.kz company.by;
ssl_certificate /etc/letsencrypt/live/company.ru/fullchain.pem;
root /var/www/company/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param HTTP_HOST $host;
include fastcgi_params;
}
}
Генерація hreflang
Хелпер формує теги для всіх активних доменів:
function hreflangTags(string $path): string
{
$domains = SiteDomain::where('is_active', true)->get();
return $domains->map(fn($d) =>
"<link rel=\"alternate\" hreflang=\"{$d->locale}-{$d->country_code}\" href=\"https://{$d->host}{$path}\" />"
)->join("\n");
}
Що дає мультидомен у порівнянні з піддиректоріями?
| Характеристика | Мультидомен | Піддиректорії |
|---|---|---|
| Сила локального SEO-сигналу | Висока (окремий домен) | Середня (піддомен або папка) |
| Ізоляція контенту | Повна: різні юридичні вимоги, валюти | Обмежена: спільний домен, складніше зробити різні версії |
| Управління SSL | Потрібен SAN або wildcard сертифікат | Один сертифікат на весь домен |
| Складність реалізації | Вища: middleware, SSO, hreflang | Нижча: достатньо піддиректорій |
| Підтримка | Одна кодова база | Одна кодова база |
Як додати новий домен?
- Реєстрація домену та налаштування DNS A-записів (до доби на propagation).
- Додавання запису в таблицю
site_domains— 2 хвилини. - Оновлення SAN сертифікату через Certbot — 5 хвилин.
- Додавання server_name в Nginx і reload — 1 хвилина.
- Імпорт або створення контенту для нового домену (залежить від обсягу).
Вся процедура займає близько години, не враховуючи часу на DNS.
Google Search Central рекомендує обирати між мультидоменами та піддиректоріями виходячи з бізнес-вимог. Мультидомен є кращим, коли контент та бренд сильно відрізняються за країнами.
Часті помилки та як їх уникнути
- Забути про fallback контенту. Якщо сторінка не знайдена для конкретного домену, вона має підвантажуватись із загального пулу, інакше користувач побачить 404. Реалізуємо через глобальний route-provider.
- Неправильний порядок завантаження ініціалізації. Локаль та часовий пояс мають встановлюватись до виклику будь-якого Eloquent-запиту — на рівні middleware.
- Ігнорування кешування. Для мультидоменного сайту кеш має бути розмічений за доменом (через префікс або окремий тег), інакше користувач одного домену побачить кешовану сторінку іншого.
Етапи роботи
| Етап | Опис | Строк (дні) |
|---|---|---|
| Аудит | Аналіз поточної архітектури, вибір стратегії | 1 |
| Проектування | Схема БД, таблиця доменів, роутинг | 1 |
| Реалізація | Middleware, провайдер, хелпери, міграція контенту | 2–3 |
| Тестування | Перевірка hreflang, сесій, кешування | 1 |
| Деплой | Налаштування Nginx, SSL, DNS | 1 |
Разом: 2–5 днів.
Строки та вартість
Наші інженери мають 5+ років досвіду в побудові мультитенантних систем та реалізували понад 50 мультидоменних проєктів. Типовий проєкт налаштування мультидоменного сайту займає від 2 до 5 робочих днів залежно від складності існуючого коду та обсягу контенту. Вартість розраховується індивідуально після аудиту — замовте аудит вашої поточної архітектури або отримайте консультацію. Ми гарантуємо коректне налаштування hreflang та повну SEO-ізоляцію.







