wphierarchy.ru wordpress Структура шаблонов WordPress

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

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

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

Как выглядит проблема на практике

Чаще всего дубли проявляются так:

  • одна и та же статья открывается по нескольким адресам: с /page/2/, с параметрами сортировки, с UTM-метками;
  • архивы категорий и тегов дублируют друг друга по заголовкам и описаниям;
  • страницы вложений изображений индексируются отдельно, хотя содержат почти пустой шаблон;
  • сайт доступен и по http, и по https, либо с www и без него;
  • плагин кэша или SEO-плагин добавляет canonical не туда, куда нужно.

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

Диагностика: где искать дубли

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

1. Проверка в поиске и в индексе

Ищите в Google или Яндексе не только заголовок статьи, но и фрагменты URL. Если в выдаче всплывают версии с параметрами, пагинацией или вложениями, это сигнал, что поисковик видит несколько вариантов одной страницы.

2. Проверка canonical в HTML

Откройте исходный код страницы и найдите тег <link rel="canonical" ...>. У канонического адреса должен быть один вариант: без лишних параметров, без лишнего слеша в конце, если ваш сайт так не работает, и без редирект-цепочек.

<link rel="canonical" href="https://example.com/kak-najti-i-ubrat-dubli-stranic-v-wordpress/" />

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

3. Проверка редиректов

Для быстрой диагностики удобно использовать curl:

curl -I https://example.com/page/?utm_source=test

Смотрите, есть ли 301 Moved Permanently на чистый URL. Если вместо редиректа страница отдает 200 OK и просто надеется на canonical, дубли могут продолжать жить в индексе дольше, чем нужно.

Что исправлять в первую очередь

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

СценарийЧто делатьКогда подходит
Одна страница доступна по нескольким URL301 редирект на основной адресHTTP/HTTPS, www/non-www, старые адреса, лишние слеши
Страница должна существовать, но не быть основнойcanonical на главный URLПараметры сортировки, фильтры, пагинация, UTM
Страница не нужна в индексе вообщеnoindex + при необходимости запрет в robots.txtВнутренний поиск, служебные страницы, вложения

Если есть возможность сделать 301-редирект без потери смысла, это обычно лучше, чем просто прятать дубль canonical-ом. Canonical — это подсказка, редирект — это принудительное перенаправление.

Пошаговое решение для WordPress

Шаг 1. Приведите сайт к одному базовому адресу

В Настройки → Общие проверьте адрес WordPress и адрес сайта. Они должны совпадать по протоколу и домену. Если сайт должен работать на https://example.com, не оставляйте там http или www.

На уровне сервера настройте один канонический вариант домена. Для 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 логика та же, но конфиг будет другим. Смысл один: все варианты должны приводить к одному адресу.

Шаг 2. Уберите дубли вложений изображений

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

add_action('template_redirect', function () {
    if (is_attachment()) {
        $parent_id = wp_get_post_parent_id(get_queried_object_id());

        if ($parent_id) {
            wp_redirect(get_permalink($parent_id), 301);
            exit;
        }

        $file_url = wp_get_attachment_url(get_queried_object_id());
        if ($file_url) {
            wp_redirect($file_url, 301);
            exit;
        }
    }
});

Это не универсальное правило для всех сайтов, но для большинства контентных проектов оно сокращает мусорные URL без потери полезного трафика.

Шаг 3. Настройте canonical для архивов и параметров

Если у вас есть фильтры, сортировка или UTM-метки, canonical должен указывать на чистую версию страницы. В большинстве случаев SEO-плагин делает это сам, но если шаблон кастомный или есть конфликт, проверьте результат вручную.

Для страниц с параметрами можно принудительно убрать query string из canonical через фильтр wpseo_canonical, если используется Yoast SEO:

add_filter('wpseo_canonical', function ($canonical) {
    if (is_singular()) {
        return get_permalink();
    }

    return $canonical;
});

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

Шаг 4. Закройте внутренний поиск и служебные страницы

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

Минимальная логика для запрета индексации внутреннего поиска может выглядеть так:

add_filter('wp_robots', function ($robots) {
    if (is_search()) {
        $robots['noindex'] = true;
        $robots['nofollow'] = true;
    }

    return $robots;
});

Если используете SEO-плагин, проверьте, не дублируете ли вы его настройки собственным кодом. Два разных источника robots-мета часто дают непредсказуемый результат.

Когда лучше использовать плагин, а когда код

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

Практически это выглядит так:

  • плагин — когда нужно быстро закрыть стандартные архивы, настроить canonical и sitemap;
  • код — когда нужно точечно обработать вложения, параметры, редиректы и нестандартные шаблоны;
  • комбинация — когда SEO-плагин отвечает за мета-теги, а сервер и тема — за редиректы и URL-логику.

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

Проверка результата после внедрения

После правок не ограничивайтесь визуальной проверкой в браузере. Нужны три контроля:

  1. Откройте основной URL и убедитесь, что он отдает 200 OK.
  2. Проверьте старые и параметризованные адреса через curl -I — они должны редиректить на канонический вариант.
  3. Посмотрите исходный код страницы и убедитесь, что canonical совпадает с основным URL.

Дополнительно проверьте, что:

  • в sitemap нет служебных страниц и вложений;
  • внутренний поиск не индексируется;
  • страницы пагинации не подменяют canonical на главную категорию без причины;
  • в Search Console или аналогичном инструменте количество дублей и альтернативных URL не растет после переобхода.

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

Canonical указывает на URL с параметрами

Обычно это происходит, когда шаблон берет текущий адрес без очистки query string. Исправление простое: canonical должен строиться от get_permalink() или от базового URL архива, а не от $_SERVER['REQUEST_URI'].

Редирект сделан через 302 вместо 301

Временный редирект не передает сигнал о постоянном переезде страницы. Если адрес уже окончательный, используйте 301. Иначе поисковик может продолжать держать в индексе старую версию.

Сайт редиректит по кругу

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

Вложение закрыли, но оно все еще в индексе

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

Плагин SEO и тема конфликтуют

Некоторые темы выводят собственный canonical или robots-мета. В таком случае в исходнике будет два одинаковых или противоречивых тега. Ищите в теме вызовы wp_head() и кастомные функции, которые печатают мета-теги вручную.

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

Массовые редиректы и фильтры canonical не должны превращать functions.php в свалку. Лучше вынести логику в небольшой mu-plugin или отдельный мини-плагин, чтобы она не зависела от темы. Это особенно важно, если вы часто меняете шаблон.

Еще два практических правила:

  • не редиректите все URL с параметрами без разбора — часть параметров может быть нужна для авторизации, пагинации или API;
  • не закрывайте в robots.txt то, что уже должно быть удалено через 301 — robots не убирает URL из индекса так надежно, как редирект или canonical.

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

×

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

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

пишет статьи

готовит SEO

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

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