Как найти и удалить дубли страниц в WordPress в robots.txt и sitemap

Дубли в WordPress часто появляются не из-за «плохого SEO», а из-за обычной конфигурации: одна и та же страница доступна по разным адресам, в sitemap попадают лишние URL, а robots.txt блокирует не то, что нужно. В результате поисковик видит несколько версий одного контента и тратит краулинговый бюджет впустую.

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

Когда проблема действительно в дублях, а не в «плохой индексации»

Сначала стоит отделить дубли от других причин просадки. Если страница не индексируется, это не всегда дубль. Иногда причина в noindex, ошибке каноникала, запрете в robots.txt или в том, что URL вообще не попадает в sitemap.

Типичные признаки дублей

  • в поиске находятся URL с параметрами, хотя это не отдельные страницы;
  • одна и та же запись открывается с разными адресами: со слэшем и без, с /page/2/, с архивом автора, через теги;
  • в sitemap есть URL, которые должны быть закрыты от индексации;
  • в отчётах Search Console появляются страницы с одинаковым title и похожим содержимым;
  • robots.txt блокирует служебные разделы, но не мешает индексировать лишние URL, потому что они уже известны поисковику.

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

  1. Откройте несколько подозрительных URL и сравните конечный адрес после редиректов.
  2. Посмотрите исходный код страницы и найдите <link rel="canonical">.
  3. Проверьте XML sitemap: нет ли там архивов, тегов, авторов, вложений и служебных страниц.
  4. Сравните, как WordPress отдаёт главную версию URL в теме и плагинах SEO.

Откуда в WordPress берутся дубли

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

1. Архивы и таксономии

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

2. Параметры URL

Фильтры, сортировки, UTM-метки и служебные параметры могут создавать множество адресов одной страницы. Поисковик не всегда сам угадывает, что это одна и та же сущность.

3. Вложения и медиа-страницы

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

4. Неправильный sitemap

Если в карту сайта попадают страницы, которые закрыты от индексации, это не всегда критично, но создаёт лишний шум. Поисковик получает противоречивые сигналы: в sitemap URL есть, а в robots или canonical он «нежелательный».

Пошаговое решение: как убрать дубли без потери важных страниц

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

Шаг 1. Приведите канонический URL к одной версии

Если сайт отдаёт и http, и https, или с www и без него, сначала нужно настроить один основной вариант на уровне сервера и WordPress. Иначе любые SEO-правки будут временными.

Для WordPress проверьте адреса в Настройки → Общие и убедитесь, что они совпадают с основной версией сайта. На сервере должен быть один редирект на канонический домен.

Шаг 2. Уберите лишние архивы из индексации

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

Ниже пример, как отключить архивы автора и даты в теме или мини-плагине:

<?php
add_action('template_redirect', function () {
    if (is_author() || is_date()) {
        wp_redirect(home_url('/'), 301);
        exit;
    }
});

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

Шаг 3. Отключите страницы вложений

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

<?php
add_action('template_redirect', function () {
    if (is_attachment()) {
        $parent = wp_get_post_parent_id(get_queried_object_id());
        if ($parent) {
            wp_redirect(get_permalink($parent), 301);
        } else {
            wp_redirect(home_url('/'), 301);
        }
        exit;
    }
});

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

Шаг 4. Исключите служебные URL из sitemap

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

<?php
add_filter('wp_sitemaps_post_types', function ($post_types) {
    unset($post_types['attachment']);
    return $post_types;
});

add_filter('wp_sitemaps_taxonomies', function ($taxonomies) {
    unset($taxonomies['post_tag']);
    return $taxonomies;
});

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

Шаг 5. Проверьте robots.txt, но не переоценивайте его

robots.txt полезен для ограничения обхода, но он не удаляет URL из индекса сам по себе. Если страница уже известна поисковику, одного запрета в robots недостаточно. Для удаления дублей важнее canonical, редирект и исключение из sitemap.

Пример аккуратного robots.txt для служебных разделов:

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Disallow: /?s=
Disallow: /trackback/
Disallow: /feed/

Не закрывайте в robots то, что должно участвовать в индексации. Частая ошибка — запретить CSS и JS, а потом удивляться, что поисковик видит страницу как «сломанный шаблон».

Сравнение подходов: плагин, код или ручная настройка

ПодходКогда подходитМинусы
SEO-плагинЕсли нужно быстро управлять canonical, noindex и sitemap без правки темыЛегко включить лишние опции и получить конфликт настроек
Код в теме или мини-плагинеЕсли нужен точечный контроль над архивами, вложениями и редиректамиТребует аккуратного тестирования после обновлений
Ручная правка robots.txtЕсли нужно ограничить обход служебных URLНе решает проблему индексации дублей сама по себе

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

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

После правок не ограничивайтесь «страница открывается». Нужно проверить именно сигналы для поисковика.

Чек-лист проверки

  • основной URL отдаёт один 200-ответ и не дублируется через альтернативные версии;
  • дублирующие архивы либо редиректят, либо закрыты от индексации;
  • в sitemap нет лишних типов страниц;
  • rel="canonical" указывает на правильный адрес;
  • страницы вложений не создают отдельные точки входа;
  • в Search Console уменьшается число URL с одинаковым содержимым или «Просканировано, но не проиндексировано» по техническим причинам.

Проверить canonical можно прямо из браузера или через curl:

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

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

Если используете WP-CLI, удобно быстро посмотреть, какие записи и страницы вообще существуют в базе и не создают ли лишние архивы:

wp post list --post_type=page --fields=ID,post_title,post_status,post_name

Это не ищет дубли автоматически, но помогает понять, не плодятся ли одинаковые slug и черновики, которые потом случайно попадают в карту сайта или внутренние ссылки.

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

Закрыли URL в robots.txt и ждёте удаления из индекса

Это самая частая ошибка. Robots ограничивает обход, но не гарантирует удаление. Если URL уже в индексе, нужен canonical, редирект или noindex.

Редиректите всё на главную

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

Одновременно включили sitemap в теме и в SEO-плагине

Два генератора sitemap — частый источник дублей и несостыковок. Оставьте один источник правды.

Скрыли архивы, но оставили на них внутренние ссылки

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

Удалили страницу, но не настроили 301

Если у URL были внешние ссылки или он уже индексировался, удаление без редиректа создаёт 404 и теряет накопленный вес. Для дублей и устаревших адресов почти всегда нужен 301 на релевантный аналог.

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

Любые правки, связанные с редиректами и sitemap, лучше вносить не в functions.php активной темы, а в мини-плагин или mu-plugin. Тогда изменения не исчезнут при смене темы и их проще откатить.

Перед массовыми правками:

  • сделайте резервную копию файлов и базы;
  • проверьте, нет ли кэш-плагина, который отдаёт старые canonical и sitemap;
  • очистите серверный и браузерный кэш после изменений;
  • не правьте robots.txt «на глаз» без проверки текущих URL в индексе.

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

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

Как избежать проблем при установке PHP 8 в WordPress
02.01.2026
Как создать собственный шорткод в WordPress
03.11.2025
Как использовать WP-CLI для массового изменения метаданных постов в WordPress
03.05.2026
WooCommerce: как установить лимит на количество товаров в корзине через код
26.07.2026
WooCommerce: как установить лимит на количество товаров в корзине
09.07.2026