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

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

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

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

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

Типичные признаки

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

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

  • открывается ли страница с /attachment/ или медиа-URL;
  • есть ли у записей несколько путей доступа через категории, если тема или плагин генерируют альтернативные URL;
  • не создают ли фильтры, сортировки и UTM-параметры отдельные индексируемые адреса;
  • какой URL указан в <link rel="canonical">.

Сначала определите тип дубля: контентный, технический или URL-дубль

Это важнее, чем сразу ставить редиректы. Если у страниц одинаковый текст, но разные адреса, обычно достаточно canonical и 301. Если же контент реально отличается, но URL похожи, редирект может навредить.

СценарийЧто делатьКомпромисс
Один и тот же контент на нескольких URLОставить один адрес, остальные склеить 301Нужна аккуратная проверка ссылок и sitemap
Параметры сортировки, UTM, фильтрыЗакрыть от индексации и задать canonical на чистый URLНе все параметры стоит редиректить
Страницы вложенийРедиректить на файл или родительскую записьЗависит от того, нужен ли отдельный индексируемый медиа-URL

Пошаговое решение: что править в WordPress

1. Уберите индексируемые страницы вложений

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

Самый безопасный вариант — редиректить attachment-страницы на родительскую запись или сам файл. Для этого можно использовать код в functions.php темы или в небольшом mu-plugin:

<?php
add_action('template_redirect', function () {
    if (is_attachment()) {
        $parent = wp_get_post_parent_id(get_queried_object_id());

        if ($parent) {
            wp_safe_redirect(get_permalink($parent), 301);
            exit;
        }

        $file = wp_get_attachment_url(get_queried_object_id());
        if ($file) {
            wp_safe_redirect($file, 301);
            exit;
        }
    }
});

Если у вас уже есть SEO-плагин, проверьте, не делает ли он это сам. Дублировать логику в двух местах не стоит.

2. Приведите canonical к одному каноническому URL

Для параметров, пагинации и некоторых архивов canonical часто полезнее, чем редирект. Он не ломает пользовательский сценарий, но подсказывает поисковику, какой адрес считать основным.

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

Пример: для страницы с параметрами сортировки можно принудительно указывать чистый URL:

<?php
add_filter('get_canonical_url', function ($canonical, $post) {
    if (is_singular() && $post instanceof WP_Post) {
        return get_permalink($post);
    }
    return $canonical;
}, 10, 2);

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

3. Склейте дубли через 301-редирект

Редирект нужен там, где старый URL больше не должен существовать как отдельная точка входа. Это касается дублей с /index.php, старых адресов после смены структуры постоянных ссылок, а также страниц, которые вы сознательно заменили новой версией.

Пример редиректа старого URL на новый без плагина:

<?php
add_action('template_redirect', function () {
    if (is_page('old-page-slug')) {
        wp_safe_redirect(home_url('/new-page-slug/'), 301);
        exit;
    }
});

Для массовых правил лучше использовать серверный уровень или плагин редиректов, а не десятки условий в PHP. Код в теме удобен для точечных случаев, но плохо масштабируется.

4. Закройте от индексации служебные архивы, если они не нужны

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

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

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

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

  • откройте старый URL и убедитесь, что он отдаёт 301;
  • проверьте, что в HTML остался один canonical;
  • сравните итоговый адрес в curl -I или через DevTools;
  • посмотрите, не появились ли цепочки редиректов;
  • проверьте sitemap: там должен быть только канонический URL;
  • в Search Console отправьте на переобход ключевые страницы.

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

curl -I https://example.com/old-page-slug/
curl -I https://example.com/new-page-slug/

В ответе старый адрес должен вернуть 301 Moved Permanently, а новый — 200 OK. Если видите 302, редирект временный и для склейки дублей он подходит хуже.

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

Редирект на главную вместо релевантной страницы

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

Несколько canonical на одной странице

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

Редирект-цепочки

Если старый URL ведёт на промежуточный адрес, а потом ещё раз перенаправляется, это лишняя задержка и риск потери сигнала. Склеивайте сразу в конечный URL.

Закрыли от индексации, но не убрали из sitemap

Такое часто происходит при ручной настройке. Если страница noindex, но остаётся в карте сайта, вы отправляете поисковику противоречивые указания. Sitemap должен отражать только те URL, которые вы реально хотите видеть в индексе.

Что делать, если дубли создаёт тема или плагин

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

Если приходится править код, держите изменения в дочерней теме или mu-plugin. Так они не исчезнут после обновления. И обязательно документируйте, какой URL вы считаете каноническим и почему.

Практические советы по безопасности и производительности

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

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

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

Если после изменений страница всё ещё дублируется, проверьте не только WordPress, но и CDN, кеш-плагин и серверные правила. Иногда именно там остаётся старая версия ответа или лишний редирект.

Как удалить или изменить метаданные продуктов WooCommerce без плагинов
10.07.2026
Как удалить записи из категории в WordPress без удаления самих постов
05.03.2026
Как избежать проблем с пермалинками в WordPress: практическое руководство
02.03.2026
Как удалить неиспользуемые виджеты в WordPress для оптимизации сайта
11.02.2026
Как удалить или изменить метаданные продуктов WooCommerce без плагинов
21.05.2026