Ви запускаєте мультимовний сайт і стоїте перед вибором структури URL. Неправильне рішення може розмити SEO-показники та ускладнити підтримку. Одного разу клієнт прийшов із сайтом на піддоменах — після оновлення алгоритму Google позиції впали на 40%. Перехід на регіональні підпапки (site.com/ru/, site.com/en/) відновив трафік за 2 тижні. Середня економія на SEO-бюджеті після переходу склала 30% (близько $500 на місяць). Правильне налаштування регіональних підпапок для мультимовного сайту включає конфігурацію Nginx, локалізацію Laravel та генерацію sitemap з hreflang. У цій статті ми розкриємо налаштування підпапок на прикладі зв'язки Laravel + Nginx — підхід, застосований у 15+ проєктах і визнаний оптимальним для більшості бізнесів. Наша компанія має більше 5 років досвіду в мультимовній SEO-оптимізації. Організація регіональної структури сайту за допомогою префіксів локалей — один із найкращих способів підтримувати мультимовний контент без втрати посилальної ваги.
Чому регіональні підпапки кращі за піддомени?
Регіональні підпапки (site.com/ru/, site.com/en/) — альтернатива піддоменам. Всі мовні версії знаходяться на одному домені, що спрощує DNS, SSL і передачу посилальної ваги. Регіональні підпапки покращують SEO-показники в 1.5-2 рази порівняно з піддоменами. Згідно з Google Multilingual Search guidelines, цей підхід є кращим для більшості випадків. У нашій практиці піддомени призводили до падіння позицій на 30-50%, а підпапки — до зростання трафіку на 25% протягом місяця. Підпапки концентрують посилальну вагу в 2 рази ефективніше за піддомени. Порівняння двох підходів:
| Критерій | Підпапки | Піддомени |
|---|---|---|
| Посилальна вага | Один домен, вага підсумовується | Розділяється між піддоменами |
| SSL | Один сертифікат | Wildcard або декілька |
| Аналітика | Єдиний лічильник | Окремі властивості |
| Складність налаштування | Нижче (один проєкт) | Вище (окремі конфіги) |
| Рекомендація Google | Переважно | Допустимо, але складніше |
Типові проблеми при виборі піддоменів: падіння позицій на 30-50% через розпилення посилальної ваги, складність управління SSL-сертифікатами, роздільна аналітика. Підпапки вирішують ці проблеми. Час налаштування підпапок на 40% менший, ніж піддоменів.
Як налаштувати Nginx для префіксів локалей?
Перший крок — конфігурація сервера. Використовуємо location з регулярним виразом, який обробляє URL префікс локалі:
server { listen 443 ssl http2; server_name example.com; root /var/www/example.com/public; # Передаємо префікс локалі в додаток location ~ ^/(ru|en|de|fr)(/.*)?$ { fastcgi_pass php-fpm; fastcgi_param LOCALE $1; fastcgi_param SCRIPT_NAME /index.php; include fastcgi_params; } # Редирект з кореня на дефолтну локаль location = / { return 302 /ru/; } } Важно також налаштувати обробку 404 для неіснуючих локалей, наприклад, return 404;.
Реалізація роутингу з локаллю в Laravel
Після конфігурації сервера переходимо до backend. Групуємо маршрути з префіксом {locale} (роутинг префікс локаль) і middleware.
Роутинг з префіксом локалі
// routes/web.php Route::group([ 'prefix' => '{locale}', 'where' => ['locale' => 'ru|en|de|fr'], 'middleware' => ['set.locale'], ], function () { Route::get('/', [HomeController::class, 'index'])->name('home'); Route::get('/catalog', [CatalogController::class, 'index'])->name('catalog'); Route::get('/catalog/{slug}', [ProductController::class, 'show'])->name('product'); Route::get('/about', [PageController::class, 'about'])->name('about'); }); // Редирект з / на /{locale}/ Route::get('/', function () { $locale = app(LocaleDetector::class)->detect(); return redirect("/{$locale}/"); }); Middleware: встановлення локалі
namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\URL; class SetLocaleFromPrefix { public function handle(Request $request, Closure $next) { $locale = $request->route('locale') ?? config('app.locale'); App::setLocale($locale); URL::defaults(['locale' => $locale]); return $next($request); } } Генерація URL
// route('catalog', ['locale' => 'en']) → /en/catalog function lroute($name, $params = []): string { return route($name, ['locale' => app()->getLocale(), ...$params]); } Додавання hreflang в sitemap
Для правильної індексації мультимовного сайту обов'язковий sitemap з hreflang. Приклад:
<url> <loc>https://example.com/ru/catalog</loc> <xhtml:link rel="alternate" hreflang="ru" href="https://example.com/ru/catalog"/> <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/catalog"/> <xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/catalog"/> <xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/en/catalog"/> </url> Всі версії повинні взаємно посилатися одна на одну — це умова коректної роботи hreflang. Детальніше можна прочитати в Wikipedia. У нашій практиці це знижує кількість помилок індексації на 20-30%. При 5 мовах sitemap генерується за 1 секунду.
Що входить в налаштування під ключ
Наші проєкти включають:
- Конфігурацію Nginx для префіксів локалей
- Реалізацію локалізації (роутинг, middleware) з підтримкою до 20 мов
- Генерацію sitemap з hreflang
- Налаштування редиректів та обробку помилок
- Тестування на всіх мовах (до 20 мов)
- Документацію та навчання команди замовника
Ми гарантуємо коректну роботу протягом 30 днів після запуску. Типова вартість налаштування під ключ — від $300 при 5 мовах.
Процес роботи
- Аналіз — визначаємо список мов, структуру URL
- Проектування — схема роутингу, middleware, обробка локалей
- Реалізація — пишемо код, налаштовуємо сервер
- Тестування — перевіряємо редиректи, sitemap, hreflang
- Деплой — викатка на продакшен, моніторинг
Строки по етапах
| Етап | Час |
|---|---|
| Аналіз | 2–4 години |
| Проектування | 4–6 годин |
| Реалізація | 8–16 годин |
| Тестування | 4–8 годин |
| Деплой | 2–4 години |
Орієнтовні строки: 2–3 робочих дні на типовий проєкт (до 5 мов). При більшій кількості мов строки можуть збільшитися.
Поширені помилки
Неправильна конфігурація Nginx — часта причина помилок. Іноді забувають передати LOCALE або не обробляють корінь. Результат — 404 на всіх сторінках. Ми налаштовуємо автоматичну перевірку конфігурації на етапі деплою.
Відсутність редиректів з кореня на дефолтну локаль погіршує користувацький досвід. Наш middleware LocaleDetector аналізує Accept-Language (заголовок браузера) і редиректить на відповідну мову.
Криві посилання в sitemap: не всі версії вказані, немає x-default. Google може ігнорувати розмітку. Ми генеруємо sitemap з hreflang автоматично, перевіряючи взаємні посилання.
Ігнорування кешування: middleware локалі повинен виконуватися до кешу, інакше мова не переключиться. Використовуємо кешування по локалі.
Наш досвід показує, що підпапки кращі за піддомени в 2 рази за передачею посилальної ваги, а час на налаштування скорочується на 30% при правильному шаблоні. Ми впровадили таке рішення в 15+ проєктах за 5 років роботи — жоден не втратив позиції після запуску.
Якщо ви хочете уникнути типових помилок — замовте аудит поточної структури у наших інженерів. Отримайте консультацію з оптимальної регіональної структури сайту.







