Горизонт — SEO-платформа нового поколения

Единая платформа для SEO-продвижения: аудит сайтов, отслеживание позиций, ключевые слова, ссылочный профиль, AI Visibility (GEO Score), контент-оптимизация, мониторинг, отчёты.

Для работы с платформой необходим JavaScript.

Локализация Next.js: как внедрить i18n без SEO-ловушек и дублей — Горизонт
09.09.2026

Локализация Next.js: как внедрить i18n без SEO-ловушек и дублей

По материалам: i18n в Next.js без SEO-дублей, locale в маршрутах, metadata и hreflang

# Локализация Next.js: как внедрить i18n без SEO-ловушек и дублей Международная экспансия сайта требует не просто перевода интерфейса, но грамотной технической реализации. В экосистеме Next.js разработчики часто сталкиваются с дилеммой: использовать динамическую смену языка на клиенте или создавать полноценные локализованные URL-адреса. Выбор неправильного пути ведет к катастрофическим последствиям для поисковой видимости — страницы перестают индексироваться в целевых регионах, а бюджеты сканирования тратятся впустую. ## Суть проблемы: почему client-side перевод убивает видимость Представьте ситуацию: ваш сайт доступен по адресу `/search/music`. Пользователь из России видит русский текст благодаря сохраненным cookie-файлам или настройкам браузера (`Accept-Language`). Пользователь из Германии открывает ту же ссылку и получает немецкий интерфейс. Для человека это удобно, но для поискового робота страница существует только в одном экземпляре. Поисковые системы, такие как Googlebot, при первом посещении могут увидеть одну языковую версию. При повторном заходе (или если робот игнорирует куки) он может проиндексировать другую. Это создает хаос в выдаче: * **Каннибализация:** Поисковик не понимает, какую страницу ранжировать по запросу "buy music". * **Потеря трафика:** Немецкие пользователи никогда не увидят вашу немецкую версию в поиске `.de`, потому что физически такой уникальной страницы нет. * **Размытие ссылочного веса:** Все обратные ссылки ведут на один адрес, независимо от того, какой язык предпочитает ссылающийся ресурс. Чтобы избежать этих проблем, необходимо выносить локаль непосредственно в путь URL. Структура должна быть иерархической: `site.com/ru/search/music` и `site.com/en/search/music`. ## Архитектура маршрутов: locale как часть пути В Next.js наиболее надежным подходом является использование встроенного роутинга с поддержкой интернационализации (i18n) или ручное управление через файл `next.config.js`. ### Настройка конфигурации Для начала необходимо явно указать поддерживаемые языки и дефолтную локаль. Это позволяет фреймворку автоматически генерировать правильные префиксы путей. ```javascript // next.config.js module.exports = { i18n: { locales: ['en', 'ru', 'de'], defaultLocale: 'en', localeDetection: true // Важно: разрешить автоопределение } } ``` При такой настройке запрос к корню сайта перенаправит пользователя на его предпочтительный язык (например, `/ru`), сохраняя чистоту структуры папок. ### Динамические сегменты Если ваше приложение использует динамические маршруты (например, `[slug]`), важно убедиться, что генерация статических параметров (`getStaticPaths`) учитывает все локали. Вы должны возвращать массив путей, где каждый параметр продублирован для каждого языка. Это гарантирует, что во время сборки будут созданы физические HTML-файлы для каждой языковой версии товара или статьи. ## Метаданные и тег Canonical: защита от дублирования Даже имея разные URL, можно совершить ошибку в управлении метаинформацией. Каждая языковая версия обязана иметь уникальные теги `