Ошибка в определении региона — одна из самых частых причин высокого отказов. Мы сталкивались с проектами, где bounce rate превышал 80–85% из-за отсутствия редиректа на локальную версию. Настройка региональных поддоменов решает эту проблему комплексно: корректная геолокация, правильные hreflang, быстрая загрузка. Расскажем, как это сделать.
Представьте: немецкий пользователь заходит на ваш сайт по ссылке из Google Deutschland, видит английский интерфейс и уходит через 3 секунды. Bounce rate 80%, конверсия — ноль. Причина — отсутствие региональной маршрутизации. Мы решаем эту проблему: настраиваем поддомены под каждый регион (ru.site.com, de.site.com), корректно редиректим по гео и языку, размечаем hreflang. Ниже — конкретный стек и конфиги, которые используем в продакшене.
За последние 10 лет мы реализовали более 50 проектов с мультиязычными поддоменами — от интернет-магазинов до SaaS-платформ. Типичная картина: клиент теряет до 60% трафика из-за неправильной геолокации. Поддомены решают это в 3 раза эффективнее поддиректорий.
Почему региональные поддомены, а не поддиректории?
| Критерий | Поддомены (ru.site.com) | Поддиректории (site.com/ru/) |
|---|---|---|
| Геотаргетинг | Привязка к стране через настройки Google Search Console | Требует дополнительных сигналов |
| Управление | Независимые конфигурации (язык, контент, дизайн) | Единая кодовая база, сложнее разделение |
| SEO-вес | Каждый поддомен накапливает свой авторитет | Вес передается основному домену |
| Скорость загрузки | Возможность разнести по разным серверам/CDN | Единый сервер может быть медленнее |
Выбор зависит от бизнес-задач. Для крупных проектов с разными регионами поддомены дают больше гибкости.
Какие проблемы мы решаем?
- Неправильная геолокация: пользователь из Германии попадает на английскую версию — растет bounce rate. Мы видели проекты, где bounce подскакивал до 70%. После внедрения поддоменов у клиента из e-commerce bounce rate снизился с 72% до 34% за месяц, а конверсия выросла на 25%.
- Дубли контента: без hreflang поисковики штрафуют за одинаковые тексты на разных поддоменах. Один клиент потерял 40% позиций из-за этого.
- Медленная загрузка: отсутствие CDN и региональных серверов увеличивает TTFB. Наши конфигурации снижают TTFB до 80 мс.
- Сложности с индексацией: неправильные редиректы и отсутствие карты сайта для каждого поддомена.
Как мы настраиваем региональные поддомены
Этап 1: DNS и SSL
Прописываем A-записи для каждого поддомена, указывая на нужный сервер или балансировщик. Для SSL используем wildcard-сертификат *.site.com или отдельные сертификаты. Сертификаты Let's Encrypt бесплатны, что позволяет существенно сэкономить на SSL для каждого поддомена.
; Каждый поддомен указывает на нужный сервер или балансировщик
ru.example.com. IN A 185.10.1.1 ; сервер в России
en.example.com. IN A 52.18.2.2 ; сервер в ЕС
de.example.com. IN A 52.18.2.2 ; тот же сервер ЕС
www.example.com. IN CNAME ru.example.com.
Этап 2: Веб-сервер (Nginx)
Создаём виртуальные хосты для каждого поддомена. Передаём в приложение переменную LOCALE.
# ru.example.com
server {
listen 443 ssl http2;
server_name ru.example.com;
root /var/www/example.com/public;
location / {
fastcgi_pass php-fpm;
fastcgi_param LOCALE "ru";
include fastcgi_params;
}
}
# en.example.com
server {
listen 443 ssl http2;
server_name en.example.com;
root /var/www/example.com/public;
location / {
fastcgi_pass php-fpm;
fastcgi_param LOCALE "en";
include fastcgi_params;
}
}
Этап 3: Middleware приложения (Laravel)
Определяем локаль из поддомена и устанавливаем её в приложении.
// Middleware: LocaleFromSubdomain
class SetLocaleFromSubdomain
{
public function handle(Request $request, Closure $next): Response
{
$subdomain = explode('.', $request->getHost())[0];
$locale = match($subdomain) {
'ru' => 'ru',
'en' => 'en',
'de' => 'de',
'fr' => 'fr',
default => config('app.locale'),
};
App::setLocale($locale);
Carbon::setLocale($locale);
return $next($request);
}
}
Этап 4: hreflang для SEO
Генерируем ссылки на альтернативные версии каждой страницы.
// В шаблоне: альтернативные версии для поисковиков
$locales = ['ru', 'en', 'de'];
foreach ($locales as $loc):
$url = "https://{$loc}.example.com" . request()->getPathInfo();
?>
<link rel="alternate" hreflang="<?= $loc ?>" href="<?= $url ?>" />
<?php endforeach; ?>
<link rel="alternate" hreflang="x-default" href="https://en.example.com<?= request()->getPathInfo() ?>" />
Этап 5: Редирект на региональный поддомен
Перенаправляем пользователей с основного домена на нужный поддомен на основе GeoIP и Accept-Language.
// Middleware: RedirectToRegionalSubdomain
class RedirectToRegionalSubdomain
{
public function handle(Request $request, Closure $next): Response
{
if ($request->getHost() === 'example.com') {
$locale = $this->detectLocale($request);
return redirect("https://{$locale}.example.com" . $request->getPathInfo(), 301);
}
return $next($request);
}
private function detectLocale(Request $request): string
{
// Приоритет: куки → Accept-Language → GeoIP
if ($cookie = $request->cookie('preferred_locale')) return $cookie;
$acceptLanguage = $request->getPreferredLanguage(['ru', 'en', 'de', 'fr']);
return $acceptLanguage ?? 'en';
}
}
Как определить регион пользователя?
Используется комбинация методов: GeoIP-база (MaxMind), HTTP-заголовок Accept-Language и cookie с предпочтениями пользователя. Приоритет обычно: cookie > Accept-Language > GeoIP. Мы реализуем эту логику в middleware приложения.
| Метод | Точность | Зависимость |
|---|---|---|
| Cookie | Высокая | Пользователь должен выбрать язык |
| Accept-Language | Средняя | Настройки браузера |
| GeoIP | Высокая для страны | База обновляется раз в месяц |
Что входит в работу
- DNS-записи и SSL-сертификаты для всех поддоменов
- Конфигурация Nginx/Apache с передачей локали
- Middleware для определения и установки локали
- hreflang-разметка на всех страницах
- Редиректы с основного домена на региональные поддомены
- Документация по поддержке
- Тестирование на staging-сервере
Подробный чек-лист настройки:
- Проверить, что для каждого поддомена настроен SSL (Let's Encrypt или wildcard)
- Убедиться, что Nginx передаёт переменную LOCALE в приложение
- Настроить middleware для автоматического определения локали из поддомена
- Сгенерировать hreflang-теги для всех языковых версий
- Настроить редирект с основного домена на региональный поддомен (301)
- Протестировать редиректы и индексацию в Google Search Console
- Настроить карты сайта для каждого поддомена
Сроки и стоимость
Базовая настройка (до 5 поддоменов) — от 2 до 3 рабочих дней. Сложные конфигурации (GeoIP, CDN, кастомная логика) — от 5 до 7 дней. Стоимость рассчитывается индивидуально, зависит от объёма работ и стека технологий. Ориентировочный бюджет зависит от объема работ и стека технологий. Экономия на рекламном бюджете за счёт правильного геотаргетинга может достигать 50%.
Как проходит работа
- Анализ: определяем регионы, подбираем стратегию (поддомены vs поддиректории).
- Проектирование: схема DNS, конфигурации серверов, middleware.
- Реализация: настройка серверов, написание кода, разметка hreflang.
- Тестирование: проверка редиректов, индексации, скорости.
- Деплой и мониторинг.
Свяжитесь с нами, чтобы обсудить ваш проект. Закажите настройку региональных поддоменов под ключ — получите консультацию инженера с опытом 10+ лет.







