Дубли возникают, когда одна языковая версия доступна по нескольким адресам: /ru/page, /page?lang=ru, cookie-вариант и URL с лишним слешем. Поисковая система получает противоречивые canonical, hreflang и редиректы и не понимает, какую страницу показывать.

Выберите одну стабильную схему URL для каждого языка и перенаправьте альтернативы. Каждая индексируемая локаль обычно ставит canonical на себя, а hreflang связывает эквивалентные страницы взаимно. Автоматический редирект по IP не должен блокировать выбор пользователя и обход робота.

Что проверить в первую очередь

Сначала зафиксируйте наблюдаемое поведение и не меняйте сразу несколько настроек. Важны точное время сбоя, адрес или сценарий, ожидаемый результат и последнее известное рабочее состояние. Так можно отличить причину от случайного совпадения и сохранить возможность быстрого отката.

  • Соберите все URL одной страницы для каждого языка, включая параметры, слеши, регистр и домены.
  • Сравните HTML lang, canonical, hreflang и HTTP-коды без cookies и с ними.
  • Проверьте sitemap и внутренние ссылки: они должны использовать только каноническую схему.
  • Убедитесь, что перевод действительно соответствует языку, а не дублирует исходный текст.

Почему возникает проблема

У подобных сбоев редко бывает одна универсальная причина. На итог одновременно влияют конфигурация приложения, окружение, данные, кеш, права и внешние сервисы. Проверка должна идти от внешнего симптома к конкретному уровню, на котором впервые появляется неверное состояние.

  • Язык хранится только в cookie, а URL остается одинаковым с разным содержимым.
  • Параметр lang и языковой префикс работают одновременно.
  • Canonical всех локалей указывает на основную, обнуляя смысл hreflang.
  • Hreflang не взаимный, содержит несуществующий код или ведет через редирект.
  • Middleware перенаправляет робота по IP/Accept-Language на одну версию.

Пошаговая диагностика

Диагностику проводите на копии или в контролируемое время. Перед изменениями сохраните конфигурацию, данные и журналы. Каждый шаг должен отвечать на один вопрос и оставлять измеримый результат: код ответа, запись в логе, состояние процесса, значение поля или воспроизводимый тест.

  • Сделайте crawl без cookies и выгрузите status, canonical, lang и hreflang для всех локалей.
  • Проверьте каждую пару alternate: обе страницы должны ссылаться друг на друга.
  • Сравните URL в меню, sitemap, pagination, карточках и Open Graph.
  • Проверьте 404/redirect для отсутствующего перевода и поведение x-default.
  • Найдите параметры и варианты регистра, которые отдают 200 с тем же содержимым.

Рабочая схема URL и hreflang

Подкаталоги, поддомены и отдельные домены могут работать. Критична последовательность: один URL на локаль и одинаковые правила для всех шаблонов.

  • Например, /ru/... и /en/... должны иметь стабильные соответствующие маршруты.
  • Каждая индексируемая локаль получает self-canonical, если это полноценная отдельная версия.
  • Hreflang использует корректные языковые/региональные коды и абсолютные конечные URL.
  • x-default ведет на нейтральный выбор языка или основную страницу по принятой стратегии.
  • Если перевода нет, не создавайте пустой дубль; выберите осознанный 404, отсутствие alternate или понятный fallback.

Как исправить проблему

Исправление лучше разбить на небольшие обратимые изменения. После каждого шага повторяйте исходный сценарий и проверяйте соседние функции. Если правка касается данных, сначала выполните ее на ограниченной выборке и сохраните журнал затронутых записей.

  • Закрепите одну схему и настройте 301 со старых параметров и дублей без цепочек.
  • Сформируйте canonical и hreflang из одной карты локализованных маршрутов.
  • Обновите меню, sitemap, хлебные крошки и внутренние ссылки.
  • Разрешите пользователю сменить язык и запомните выбор без постоянного принудительного редиректа.
  • Публикуйте локаль только при наличии качественного уникального перевода и метаданных.

Безопасный порядок внедрения

  • Сохраните резервную копию затрагиваемых файлов, базы и конфигурации, а также заранее опишите способ отката.
  • Воспроизведите сбой на тестовой записи, учетной записи или отдельном окружении без реальных платежей и рассылок.
  • Вносите по одному логическому изменению, фиксируя его в системе контроля версий или журнале работ.
  • Не отключайте права, проверку входных данных и защитные механизмы только ради исчезновения сообщения об ошибке.
  • После выкладки контролируйте логи, метрики и ключевой пользовательский сценарий, а не только открытие одной страницы.

Как проверить результат

Успешный разовый тест еще не доказывает исправление. Нужны повторный запуск, крайние случаи и проверка после очистки кеша, перезапуска процесса или новой сессии. Для критичных сценариев полезно сохранить автоматический тест или хотя бы короткий регрессионный чек-лист.

  • Каждый контент доступен по одному индексируемому URL на язык.
  • Canonical self, hreflang взаимны и ведут на страницы с HTTP 200.
  • Sitemap содержит только канонические URL и согласован с HTML-разметкой.
  • Бот без cookies может открыть любую локаль напрямую без принудительного цикла.

Типичные ошибки при исправлении

  • Ставить canonical всех языков на русскую страницу.
  • Использовать hreflang ru-RU для языка там, где нужен просто ru, без принятой региональной стратегии.
  • Редиректить каждый запрос по IP и не давать открыть выбранный язык.
  • Создавать тысячи машинных дублей с одинаковым title и непереведенным содержимым.

Как предотвратить повторение

Профилактика строится вокруг наблюдаемости и воспроизводимости: понятных конфигураций, контролируемых релизов, журналов без секретов и тестов на реальные сценарии. Важно не просто убрать текущий симптом, а сделать следующий похожий сбой заметным раньше пользователя.

  • Храните карту локализованных slug как структурированные данные.
  • Добавьте автоматическую проверку взаимности hreflang и статусов URL.
  • Проверяйте новый шаблон crawl-отчетом до публикации.
  • Следите за отчетами поисковых систем о дублях и альтернативных canonical.

Что подготовить для разбора

  • Краткое описание ожидаемого и фактического поведения без паролей, токенов и персональных данных.
  • Точное время и последовательность действий, после которых появляется проблема.
  • Версии приложения, окружения и зависимостей, а также перечень последних изменений.
  • Фрагменты журналов с контекстом до и после ошибки; секреты в них необходимо скрыть.
  • Описание уже выполненных проверок и способ безопасно повторить проблему.

Частые вопросы

Нужно ли canonical с английской страницы ставить на русскую?

Обычно нет, если английская версия самостоятельна и должна индексироваться. Она ставит canonical на себя и связывается с русской через hreflang.

Что делать, если перевод страницы отсутствует?

Не создавайте пустой индексируемый дубль. Уберите hreflang на несуществующую версию и используйте согласованный 404 или понятный fallback без подмены URL.

Когда нужна помощь специалиста

Если языковые версии конкурируют в поиске или создают дубли, я могу собрать карту URL, исправить canonical/hreflang/редиректы и sitemap и проверить весь набор локалей автоматическим обходом.