wp-lessons.ru wordpress WP-Lessons

Как найти и убрать дубли страниц в WordPress с помощью canonical и 301 редиректов

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

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

Как понять, что у вас именно дубли, а не просто похожие страницы

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

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

  • один и тот же контент доступен по разным адресам: /post/, /post, ?amp, ?utm_*;
  • страница открывается и по HTTP, и по HTTPS;
  • есть версии с www и без него;
  • архивы категорий, тегов и автора повторяют друг друга почти дословно;
  • страницы пагинации индексируются как отдельные сущности без необходимости;
  • фильтры и сортировки создают десятки URL с одинаковым текстом.

Быстрая диагностика без лишних инструментов

Для начала проверьте заголовки и HTML нескольких подозрительных URL. Если на разных адресах возвращается один и тот же контент без явного указания канонической версии, это уже повод для правки.

curl -I https://example.com/page/
curl -s https://example.com/page/ | grep -i canonical

Если canonical отсутствует, ведёт не туда или на каждой версии отличается без причины, поисковик получает противоречивый сигнал.

Какие дубли WordPress встречаются чаще всего

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

Источник дубляЧто делатьКомпромисс
HTTP/HTTPS, www/без www301 на единственный вариантНужно проверить сертификат и настройки сервера
Архивы тегов и категорийОставить только полезные архивы, остальные закрыть или объединитьМожет снизиться число входных страниц
Параметры сортировки и фильтровcanonical на базовую страницу или 301 для мусорных параметровНе все параметры можно смело редиректить
ПагинацияНе склеивать всё в одну страницу, а корректно настроить canonicalНужна аккуратность, чтобы не сломать навигацию

Пошаговое решение: от редиректов до canonical

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

Сначала выберите один канонический формат домена: HTTPS, с www или без него. Всё остальное должно уходить на него через 301 редирект. Это базовая гигиена, без которой дальше нет смысла разбирать дубли страниц.

Если у вас Apache, редирект можно сделать в .htaccess:

RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

Для Nginx логика та же, только на уровне конфигурации сервера. Если не уверены, лучше не дублировать правила в нескольких местах: один редирект на сервере, а не ещё один в WordPress.

2. Добавьте canonical там, где контент повторяется частично

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

В теме или дочерней теме можно добавить свой canonical через wp_head, если стандартного вывода недостаточно:

add_action('wp_head', function () {
    if (is_singular()) {
        echo '<link rel="canonical" href="' . esc_url(get_permalink()) . '" />' . "\n";
    }
}, 1);

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

3. Уберите лишние архивы и таксономии

Если у вас есть теги, которые дублируют категории, или архивы автора, которые не несут самостоятельной пользы, их лучше либо закрыть от индексации, либо вообще не выводить в структуре сайта. Здесь важно не путать «удалить из меню» и «убрать из индекса» — это разные задачи.

Для таксономий можно точечно управлять мета-robots через фильтр:

add_filter('wp_robots', function ($robots) {
    if (is_tag() || is_author()) {
        $robots['noindex'] = true;
        $robots['follow'] = true;
    }
    return $robots;
});

Это не заменяет canonical, но помогает, когда архивы реально не нужны в поиске. Если архив полезен пользователю и имеет уникальный текст, закрывать его только потому, что «так проще», не стоит.

4. Срежьте мусорные параметры и служебные URL

Частая причина дублей — URL с параметрами сортировки, фильтрации, UTM-метками и служебными переключателями. Не все параметры надо редиректить: UTM обычно не ломают индексацию сами по себе, но могут плодить копии в аналитике и логах. А вот параметры, которые меняют только вид страницы, часто лучше убирать из индекса.

Если параметр точно не нужен для отдельной страницы, можно перенаправлять его на чистый URL:

add_action('template_redirect', function () {
    if (empty($_GET['sort']) && empty($_GET['filter'])) {
        return;
    }

    $allowed = ['sort'];
    foreach (array_keys($_GET) as $key) {
        if (!in_array($key, $allowed, true)) {
            wp_safe_redirect(remove_query_arg(array_keys($_GET)), 301);
            exit;
        }
    }
});

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

Как проверить, что дубли действительно убраны

После правок не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что сервер отдаёт правильный код ответа, canonical указывает на нужный URL, а старые адреса не остаются доступными по 200 OK.

  • откройте старый URL и проверьте, что он отдаёт 301 на нужную страницу;
  • посмотрите исходный код и убедитесь, что canonical один и он корректный;
  • проверьте, что страницы с параметрами не индексируются как отдельные основные URL;
  • сравните заголовки ответа для HTTP и HTTPS;
  • проверьте карту сайта: в ней должны быть только канонические адреса.

Полезная быстрая проверка через командную строку:

curl -I https://example.com/old-page/
curl -I https://example.com/page/?sort=asc

Если старый адрес всё ещё отдаёт 200, редирект не сработал. Если canonical указывает на саму страницу с параметром, а не на чистую версию, поисковик может продолжить считать её отдельной.

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

Два canonical на одной странице

Обычно это происходит, когда canonical выводит и тема, и SEO-плагин, а разработчик добавляет ещё один вручную. В результате в HTML несколько одинаковых тегов, и поисковик получает конфликтующий сигнал. Решение простое: оставьте один источник.

Редирект на не ту версию URL

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

Закрыли архивы, но не убрали ссылки на них

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

Склеили всё canonical, но не исправили источник дубля

Canonical — это сигнал, а не панацея. Если у вас есть доступные по 200 копии одной страницы, лучше сначала убрать причину: редирект, настройку шаблона, лишний архив или параметр. Иначе проблема останется в обходе, логах и аналитике.

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

Когда вы чистите дубли, легко случайно создать лишнюю нагрузку: дополнительные проверки в template_redirect, сложные условия в wp_head, лишние запросы к базе. Поэтому любые правила лучше делать максимально короткими и без тяжёлых вычислений.

  • не проверяйте в каждом запросе сложные SQL-условия, если можно обойтись настройкой сервера;
  • не добавляйте редиректы в несколько плагинов сразу;
  • не закрывайте от индексации всё подряд, если страница полезна пользователю;
  • проверяйте, не ломают ли правила REST API, AJAX и служебные эндпоинты;
  • после изменений очистите кеш страницы и, если используется, объектный кеш.

Если нужен более системный подход к чистке дублей, служебных архивов и SEO-мусора, в экосистеме WPShop есть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какие именно URL вы убираете и почему.

Самый надёжный критерий успеха здесь простой: у каждой страницы должен быть один понятный канонический адрес, а все альтернативные версии должны либо редиректить на него, либо явно указывать на него через canonical. Если это выполнено, дубли перестают расползаться по индексу и по внутренней структуре сайта.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше