Как отключить XML sitemap для отдельных страниц в WordPress без потери контроля над индексацией

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

Когда это действительно нужно

Отключать отдельные страницы из XML sitemap имеет смысл, если URL:

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

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

Диагностика: где именно появляется лишний URL

Перед правкой кода нужно понять, кто генерирует sitemap. В WordPress это может быть встроенная карта сайта ядра, SEO-плагин или отдельный плагин для карт сайта. Ошибка здесь простая: разработчик отключает URL в одном месте, а он продолжает выводиться в другом.

Проверьте источник sitemap

Откройте карту сайта и посмотрите структуру URL. Если адрес выглядит как /wp-sitemap.xml, это встроенный генератор WordPress. Если карта сайта лежит в /sitemap_index.xml или похожем файле, её, скорее всего, отдаёт SEO-плагин. Дальше логика исключения будет разной.

Сверьте статус страницы

Убедитесь, что страница уже не должна индексироваться по другим признакам:

  • есть ли на ней noindex;
  • не стоит ли на неё редирект;
  • не является ли она дублем другой страницы;
  • не генерируется ли она автоматически из шаблона или фильтра.

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

Как отключить отдельную страницу из встроенного XML sitemap WordPress

Для встроенной карты сайта WordPress можно использовать фильтр wp_sitemaps_posts_query_args. Он позволяет изменить запрос, который выбирает записи для sitemap. Подход удобен, если нужно исключить конкретный ID записи или набор ID.

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

    $excluded_ids = array( 42, 87 );

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

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

    return $args;
}, 10, 2 );

Этот вариант исключает страницы с ID 42 и 87 из sitemap для типа page. Если нужно работать не по ID, а по конкретному URL, можно отфильтровать уже готовый список URL через wp_sitemaps_posts_entry, но для большинства задач проще и надёжнее исключать именно ID.

Исключение по метаполю

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

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

    $args['meta_query'] = isset( $args['meta_query'] ) ? (array) $args['meta_query'] : array();
    $args['meta_query'][] = array(
        'key'     => 'exclude_from_sitemap',
        'compare' => 'NOT EXISTS',
    );

    return $args;
}, 10, 2 );

Но здесь есть нюанс: если вам нужно исключать и страницы с exclude_from_sitemap = 1, и страницы без этого поля, логика запроса должна быть другой. В реальной практике проще использовать отдельный список ID или фильтр на уровне SEO-плагина, если он уже управляет картой сайта.

Если sitemap генерирует SEO-плагин

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

ПодходКогда подходитМинус
Настройка в интерфейсе плагина1–10 URL, без кодаСложно поддерживать на большом сайте
Фильтр WordPressВстроенный sitemap ядраНужно знать ID или логику отбора
Исключение на уровне шаблона/генерацииМассовые служебные страницыТребует аккуратной правки темы или плагина

Если вы используете Clearfy Pro, имеет смысл сначала проверить, не решается ли задача штатной настройкой удаления дублей и служебных страниц из индексации. Но даже в этом случае карту сайта лучше перепроверить отдельно: noindex и исключение из sitemap — не одно и то же.

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

  1. Определите, кто генерирует sitemap: ядро WordPress или SEO-плагин.
  2. Соберите список URL или ID, которые нужно убрать.
  3. Сделайте правку в дочерней теме, mu-plugin или собственном мини-плагине.
  4. Очистите кэш сайта и кэш CDN, если он есть.
  5. Проверьте итоговый XML sitemap вручную и через Search Console.
  6. Убедитесь, что исключённые URL не вернулись после обновления плагина.

Для production-сайта лучше не вносить такие изменения прямо в тему, если тема часто обновляется. Практичнее вынести код в отдельный mu-plugin: так исключение не потеряется при смене шаблона.

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

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

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

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

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

Отключили URL в sitemap, но он всё равно индексируется

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

Сломали весь sitemap после правки фильтра

Обычно причина в том, что фильтр возвращает не массив, а null или неверно модифицирует аргументы запроса. Проверьте, что функция всегда возвращает исходный $args, если условие не сработало.

Исключили страницу по ID, а потом ID изменился

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

Не очистили кэш

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

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

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

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

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

Как удалить /privat/ из URL в WordPress без плагинов: пошаговое руководство
19.06.2026
Как добавить круглые иконки социальных сетей в WordPress с помощью CSS и плагинов
15.04.2026
Как автоматизировать управление кэшом в WordPress: практическое руководство
10.04.2026
Как создать автоматический импорт продуктов в WooCommerce через CSV с примерами кода
01.01.2026
Как найти и удалить тонкие страницы в WordPress без потери трафика
20.08.2026
×
Сделай WordPress мощнее!

Скидка -20% на топовые премиум плагины

Выбрать плагин сейчас ⋙