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

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

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

Когда проблема действительно в дублях sitemap

Сначала стоит убедиться, что речь именно о дублирующихся URL, а не о нормальных служебных страницах. Типичный признак — в XML-карте сайта есть:

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

Как быстро диагностировать источник

Проверьте карту сайта в браузере и посмотрите, какой плагин её отдаёт. У Yoast SEO и Rank Math это обычно видно по структуре URL. Затем откройте исходный XML и найдите повторяющиеся группы: один и тот же тип контента может попадать в карту сайта через настройки плагина и через кастомный код темы.

Если у вас включён кэш, не забудьте очистить его перед проверкой. Иначе вы будете смотреть на старую версию sitemap и сделаете неверный вывод.

<?php
// Проверка, какой sitemap отдаётся на сайте.
// Выполняйте в временном шаблоне или через mu-plugin.
add_action('init', function () {
    if (is_admin()) {
        return;
    }

    if (isset($_GET['debug_sitemap'])) {
        header('Content-Type: text/plain; charset=utf-8');
        echo 'Yoast: ' . (function_exists('wpseo_init') ? 'yes' : 'no') . PHP_EOL;
        echo 'Rank Math: ' . (defined('RANK_MATH_VERSION') ? 'yes' : 'no') . PHP_EOL;
        exit;
    }
});

Этот фрагмент не решает проблему сам по себе, но помогает понять, какой SEO-плагин активен и кто, вероятнее всего, формирует карту сайта.

Что отключать в первую очередь

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

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

Пошаговое решение через настройки

Если карта сайта генерируется SEO-плагином, начните с интерфейса плагина:

  1. Отключите из sitemap архивы, которые не нужны в поиске.
  2. Проверьте, не включены ли страницы вложений.
  3. Уберите из карты сайта пустые или технические таксономии.
  4. Сохраните настройки и очистите кэш сайта и CDN.

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

Как убрать лишние URL кодом

Когда настройками не обойтись, проще всего использовать фильтры SEO-плагина. Ниже пример для Yoast SEO: он исключает из sitemap страницы вложений и отдельный тип записи. Код лучше положить в mu-plugins, чтобы он не зависел от темы.

<?php
/**
 * Plugin Name: Sitemap cleanup
 */

add_filter('wpseo_sitemap_exclude_post_type', function ($exclude, $post_type) {
    if ($post_type === 'attachment') {
        return true;
    }

    if ($post_type === 'review') {
        return true;
    }

    return $exclude;
}, 10, 2);

add_filter('wpseo_sitemap_exclude_taxonomy', function ($exclude, $taxonomy) {
    if ($taxonomy === 'post_tag') {
        return true;
    }

    return $exclude;
}, 10, 2);

Для Rank Math логика похожая, но фильтры другие. Если у вас этот плагин, не переносите код из Yoast без проверки документации: названия хуков отличаются, и «почти правильный» код просто не сработает.

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

<?php
add_filter('wpseo_exclude_from_sitemap_by_post_ids', function ($excluded_ids) {
    $excluded_ids[] = 123;
    $excluded_ids[] = 456;

    return array_unique($excluded_ids);
});

Что писать в robots.txt, а что не писать

robots.txt нужен для управления обходом, а не для «удаления из индекса». Поэтому не стоит закрывать там всё подряд. Если вы запретите важные CSS, JS или публичные разделы, поисковик может хуже отрендерить страницу и неверно оценить её содержимое.

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

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /cgi-bin/
Allow: /wp-admin/admin-ajax.php

Sitemap: https://example.com/sitemap_index.xml

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

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

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

  • открыть sitemap и убедиться, что лишние URL исчезли;
  • проверить, что robots.txt отдаёт только нужные директивы;
  • посмотреть отчёт в Google Search Console, если сайт уже там подключён.

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

Мини-чек-лист перед публикацией изменений

  • Кэш сайта очищен.
  • CDN обновлён или сброшен.
  • XML sitemap открывается без ошибок.
  • Лишние типы записей и таксономии исключены.
  • robots.txt не блокирует публичные CSS и JS.
  • В Search Console нет новых ошибок сканирования.

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

Ошибка 1: закрыли URL в robots.txt, но оставили его в sitemap. Это частый сценарий. Исправление простое: сначала уберите URL из sitemap, потом решайте вопрос с обходом.

Ошибка 2: удалили страницу из sitemap, но не поставили canonical или noindex там, где это нужно. Если страница должна существовать, но не индексироваться, одного исключения из карты сайта мало. Нужна отдельная стратегия для индексации.

Ошибка 3: правят robots.txt вручную, а SEO-плагин перезаписывает файл. В таком случае изменения «исчезают» после сохранения настроек плагина. Проверьте, кто именно управляет robots.txt на сайте.

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

Ошибка 5: не учли кэш. Sitemap и robots.txt могут кэшироваться на уровне плагина, сервера или CDN. Если изменения не видны, очищайте все уровни, а не только админку WordPress.

Безопасность и производительность

Чистка sitemap и robots.txt сама по себе не ускоряет сайт напрямую, но помогает поисковику не тратить обход на мусорные URL. Это особенно полезно, если на сайте много архивов, служебных страниц или контента, который создаётся автоматически.

Для безопасной работы лучше:

  • вносить код через mu-plugins, а не в тему;
  • не редактировать SEO-плагин напрямую;
  • сохранять резервную копию текущих настроек перед изменениями;
  • проверять результат на staging, если сайт большой или уже хорошо индексируется.

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

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

Оптимизация кэширования и удаление старых кэшей в WordPress
02.01.2026
Как удалить автоматически пустые категории в WordPress
24.03.2026
Как использовать REST API WooCommerce для автоматизации обработки заказов
25.04.2026
Как сделать автоматический откат обновлений WordPress при ошибках
12.01.2026
Как автоматически удалять пустые категории в WordPress
06.06.2026