Как исключить определённые страницы из sitemap WordPress

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

Когда sitemap нужно чистить вручную

Чаще всего проблема всплывает после запуска сайта или миграции на новый SEO-плагин. В sitemap внезапно оказываются страницы благодарности, результаты поиска, внутренние фильтры, черновые разделы, архивы автора на однопользовательском сайте. Иногда это не видно в интерфейсе, но хорошо заметно в /sitemap.xml или в индексной карте плагина.

Типичные сценарии

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

Диагностика: что именно попадает в sitemap

Сначала проверьте, кто вообще генерирует карту сайта. В WordPress это может быть встроенный sitemap ядра, Yoast SEO, Rank Math, All in One SEO или другой плагин. От этого зависит способ исключения.

  1. Откройте /sitemap.xml и посмотрите структуру.
  2. Проверьте, есть ли отдельные карты для записей, страниц, таксономий, авторов.
  3. Сравните URL из sitemap с тем, что реально нужно индексировать.
  4. Если используется SEO-плагин, проверьте его настройки sitemap и robots.

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

Способ 1: исключить страницы из sitemap через код

Этот вариант подходит, если нужно убрать несколько конкретных страниц без лишних зависимостей. Для встроенного sitemap WordPress есть фильтр wp_sitemaps_posts_query_args. Он позволяет изменить запрос, из которого собирается карта для записей и страниц.

<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'page' !== $post_type ) {
        return $args;
    }

    $exclude_ids = array( 42, 84 ); // ID страниц, которые не должны попадать в sitemap

    if ( empty( $args['post__not_in'] ) ) {
        $args['post__not_in'] = array();
    }

    $args['post__not_in'] = array_unique( array_merge( $args['post__not_in'], $exclude_ids ) );

    return $args;
}, 10, 2 );

Код можно добавить в мини-плагин или в functions.php дочерней темы. Для продакшена мини-плагин надёжнее: он не исчезнет при смене темы.

Если нужно исключить записи по условию

Иногда ID заранее неизвестны, а исключать нужно по метке, категории или произвольному полю. Тогда лучше отфильтровать список постов до генерации sitemap.

<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'post' !== $post_type ) {
        return $args;
    }

    $args['tax_query'] = array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => array( 'internal', 'drafts' ),
            'operator' => 'NOT IN',
        ),
    );

    return $args;
}, 10, 2 );

Этот подход работает только если вам удобно исключать целые группы контента. Для точечных URL проще использовать ID.

Способ 2: убрать страницы через SEO-плагин

Если sitemap генерирует Yoast SEO или Rank Math, логичнее использовать их штатные настройки. Это проще поддерживать, чем держать кастомный код, особенно если контентом занимается не разработчик.

ПодходКогда подходитМинус
КодНужно убрать 1–10 URL или фильтровать по условиюТребует поддержки и проверки после обновлений
SEO-плагинКонтентом управляет редактор, нужны понятные настройкиНе все плагины дают точечное исключение
КомбинированныйЧасть URL скрывается в настройках, часть — кодомНужно следить, чтобы правила не конфликтовали

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

Способ 3: исключить из sitemap только один тип страниц

Иногда задача не в отдельных URL, а в целой группе: авторы, вложения, теги, архивы. Для встроенного sitemap WordPress можно отключить нужный тип через фильтры, но делать это стоит аккуратно — не всё лишнее на одном сайте лишнее на другом.

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

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

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

Пошаговое решение без лишнего риска

  1. Определите источник sitemap: ядро WordPress или SEO-плагин.
  2. Составьте список URL, которые нужно убрать.
  3. Проверьте, можно ли решить задачу штатной настройкой плагина.
  4. Если нет — добавьте фильтр в мини-плагин или functions.php дочерней темы.
  5. Очистите кэш сайта и CDN, если он есть.
  6. Переоткройте sitemap и убедитесь, что URL исчезли.

Как проверить, что решение сработало

Проверка должна быть не формальной, а по факту. Откройте карту сайта в браузере и найдите исключённый URL. Если он исчез из XML, это уже хороший знак. Затем проверьте:

  • нет ли этого URL в индексной карте sitemap;
  • не возвращает ли его отдельная карта для постов, страниц или таксономий;
  • не кэшируется ли старая версия sitemap на стороне плагина или сервера;
  • не создаёт ли другой плагин собственную карту сайта.

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

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

URL убрали из sitemap, но он всё ещё индексируется

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

Код добавили, а sitemap не изменился

Чаще всего причина в кэше или в том, что фильтр повесили не на тот источник sitemap. Для встроенной карты WordPress фильтр один, но для SEO-плагинов логика своя. Сначала убедитесь, что именно этот плагин генерирует XML.

После обновления плагина исключения слетели

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

Случайно скрыли слишком много страниц

Перед массовым исключением проверьте, не попадают ли в условие важные записи. Особенно осторожно работайте с tax_query и массовым исключением по типам контента.

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

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

Для сайтов с большим количеством контента лучше избегать ручного редактирования XML-файлов sitemap. Это нестабильно: генератор может перезаписать файл при следующем обновлении или очистке кэша. Надёжнее работать через фильтры или настройки SEO-плагина.

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

Как добавить собственный тип записи (custom post type) в WordPress
29.11.2025
Как использовать кастомные статусы заказов в WooCommerce
04.05.2026
Как автоматизировать управление ролями пользователей WordPress по условию
13.04.2026
WooCommerce: как создать и обновлять собственные поля в форме оформления заказа
01.08.2026
WooCommerce: как исправить проблему с обновлением цены при изменении атрибутов товара
21.05.2026