Как убрать дубли страниц из-за trailing slash и разных регистров URL в WordPress

Дубли в WordPress не всегда связаны с параметрами или фильтрами. На живых проектах часто всплывает более тихая проблема: одна и та же страница открывается по разным адресам из-за слеша в конце URL, варианта www и без него, а иногда — из-за разного регистра в пути. Для пользователя это незаметно, а для поисковика это уже несколько URL с одинаковым содержимым.

Если не привести адреса к одному виду, в индексе могут остаться лишние версии страниц, а ссылки и поведенческие сигналы будут размазываться. Ниже — как диагностировать именно этот сценарий и что править в WordPress без лишней магии.

Как понять, что проблема именно в URL-каноникализации

Сначала проверьте, действительно ли сайт отдает разные версии одной страницы. Не путайте это с дублями от пагинации, архивов или параметров запроса — здесь речь о нормализации самого адреса.

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

  • открывается ли страница и с / в конце, и без него;
  • есть ли разница между https://site.ru/page и https://www.site.ru/page;
  • не отдает ли сервер 200 OK на обе версии вместо редиректа;
  • совпадает ли rel=canonical с основным адресом;
  • не индексируются ли старые варианты в Google Search Console.

Быстрая проверка через консоль:

curl -I https://example.com/page
curl -I https://example.com/page/
curl -I https://www.example.com/page

Если в ответе везде 200 OK, а не 301 Moved Permanently, значит нормализация не настроена. Для SEO это почти всегда лишний риск.

Что именно нужно привести к одному виду

В WordPress есть несколько уровней, где можно зафиксировать основной вариант адреса. Лучше не ограничиваться только canonical: редирект должен работать на уровне сервера или WordPress, а canonical — подтверждать выбор для поисковика.

ПодходЧто делаетКогда подходит
Настройки WordPressЗадает базовый URL сайтаЕсли проблема в www, протоколе или домене
Редирект на сервереЖестко сводит все варианты к одному адресуЕсли нужно убрать дубли быстро и надежно
Код в теме/плагинеДополняет canonical и нестандартные правилаЕсли часть URL генерируется темой или кастомным кодом

Пошаговое решение

1. Зафиксируйте основной домен в WordPress

Проверьте значения WordPress Address (URL) и Site Address (URL) в Настройки → Общие. Они должны быть одинаковыми и содержать только один выбранный вариант: либо с www, либо без него.

Если доступ в админку ограничен, можно поправить это в wp-config.php:

define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');

Это не решает все дубли само по себе, но убирает расхождения на уровне генерации ссылок внутри WordPress.

2. Настройте 301-редирект на канонический вариант

Если сервер Apache, самый прямой способ — через .htaccess. Ниже пример, который убирает www и приводит URL без слеша в конце для не-иерархических адресов WordPress. Перед внедрением проверьте, что у вас нет отдельной логики для мультиязычности или нестандартных маршрутов.

<IfModule mod_rewrite.c>
RewriteEngine On

# Убираем www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]

# WordPress rules
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Для Nginx логика обычно выносится в конфиг сервера. Если у вас нет доступа к нему, редирект можно сделать через WordPress, но это запасной вариант, а не лучший.

3. Добавьте канонический URL, если тема его ломает

Большинство тем и сам WordPress уже выводят canonical. Проблема возникает, когда тема переопределяет шаблон wp_head, подключает лишние SEO-скрипты или генерирует адреса вручную. Тогда можно принудительно поправить canonical через фильтр rel_canonical.

add_filter('rel_canonical', function ($canonical) {
    if (is_singular()) {
        $canonical = get_permalink();
    }

    return $canonical;
});

Этот код не нужен на каждом сайте. Используйте его только если вы реально видите некорректный canonical в исходном коде страницы.

4. Проверьте, не создают ли дубли плагины и тема

Иногда дубли появляются не из-за сервера, а из-за шаблонов: меню, хлебные крошки, блоки похожих записей и кастомные ссылки могут собирать URL вручную. Если в коде встречается конкатенация вроде home_url('/Page/') или жестко прописанные адреса, это источник проблем.

Правильнее использовать функции WordPress, которые возвращают уже нормализованный URL:

$url = get_permalink($post_id);
$link = home_url('/contact/');
$term_link = get_term_link($term);

Если в проекте есть SEO-плагин, проверьте, не дублирует ли он canonical и meta robots. На некоторых сборках это приводит к конфликтам, когда один плагин ставит одну версию адреса, а тема — другую.

Как проверить, что решение сработало

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

  • запросы curl -I на альтернативные URL возвращают 301 на основной адрес;
  • в исходном коде страницы canonical совпадает с финальным URL;
  • в браузере нет цепочки редиректов из нескольких шагов;
  • в Search Console старые варианты постепенно выпадают из отчета по страницам;
  • в логах сервера нет массовых обращений к неканоническим URL.

Полезно проверить и заголовки:

curl -I -L https://www.example.com/page/

Если команда показывает цепочку из двух и более редиректов, ее стоит сократить. Один редирект лучше, чем несколько подряд.

Частые ошибки и как их исправить

Редирект сделан, но canonical остался старым

Так бывает, если редирект настроен на сервере, а тема или плагин продолжают выводить старый адрес в rel=canonical. Исправление: проверьте шаблон wp_head, SEO-плагин и фильтр rel_canonical.

Сайт начинает зацикливать редиректы

Обычно причина в конфликте между настройками WordPress и правилами сервера. Например, WordPress считает основным адресом https://www.example.com, а Nginx уже принудительно отправляет на https://example.com. В итоге запросы гоняются по кругу. Нужно оставить только один источник истины.

Сломались вложенные страницы и рубрики

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

Меню и внутренние ссылки ведут на разные версии

Причина обычно в ручной верстке или старых ссылках в контенте. После нормализации адресов имеет смысл прогнать поиск по базе на старые варианты домена и заменить их на канонический URL. Делайте это аккуратно, с резервной копией.

Что делать для безопасности и производительности

Редиректы и canonical сами по себе не тяжелые, но плохая реализация может создать лишнюю нагрузку. Не размножайте правила в нескольких местах: .htaccess, functions.php, SEO-плагин и настройки CDN не должны спорить между собой.

Если правите кодом, выносите его в небольшой mu-plugin или в отдельный плагин проекта, а не в активную тему. Так правило не потеряется после обновления темы. И не забывайте проверять, что редирект не ломает кеширование: после внедрения очистите серверный кеш, кеш плагина и CDN, если он есть.

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

После внедрения сохраните короткий чек-лист для поддержки проекта:

  • основной домен зафиксирован в WordPress;
  • альтернативные варианты URL отдают 301;
  • canonical совпадает с финальным адресом;
  • внутренние ссылки генерируются через функции WordPress;
  • после обновлений темы редирект не исчезает.

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

Как добавить произвольные поля в WordPress без плагинов
01.10.2026
Как запретить индексацию страниц с параметрами в WordPress
27.08.2026
Как создать собственный шорткод в WordPress
08.09.2026
Как очистить медиатеку WordPress от неиспользуемых изображений
07.10.2026
Как использовать хуки для оптимизации WordPress
21.09.2026