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

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

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

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

Не каждый тип записи должен быть в sitemap. На практике исключают:

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

Важно не путать sitemap с robots.txt. Запрет в robots не удаляет URL из карты сайта и не решает проблему индексации сам по себе.

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

Сначала проверьте, какой механизм генерирует карту сайта. В WordPress 5.5+ базовый XML sitemap делает ядро, но плагины SEO могут подменять его своим вариантом. Если у вас установлен SEO-плагин, сначала смотрите его настройки, а не код темы.

Как быстро понять источник sitemap

Откройте:

  • /wp-sitemap.xml — карта сайта ядра WordPress;
  • /sitemap_index.xml — часто карта SEO-плагина;
  • исходный код страницы и заголовки ответа, если нужно понять, какой URL реально отдается поисковикам.

Если в sitemap есть лишние записи, проверьте, к какому post type они относятся. Это можно сделать через админку или напрямую в базе, если нужно быстро найти источник проблемы.

Способы решения: плагин, код или компромисс

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

ПодходКогда подходитМинус
Настройки SEO-плагинаЕсли sitemap уже генерирует Yoast, Rank Math или аналогЗависит от интерфейса плагина
Код через фильтры WordPressЕсли нужен точный контроль без лишних зависимостейНужно аккуратно тестировать после обновлений
Отключить sitemap целикомРедкий случай, когда карта вообще не нужнаПотеря удобного источника для обхода поисковиками

Пошаговое решение через код

Если используется встроенный sitemap WordPress, можно исключить конкретный тип записей через фильтр wp_sitemaps_post_types. Это рабочий способ, если вы хотите убрать, например, portfolio или docs из карты сайта.

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['portfolio'] );
    unset( $post_types['docs'] );

    return $post_types;
} );

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

Если нужно убрать только отдельные записи

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

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

    $args['post__not_in'] = array( 123, 456 );

    return $args;
}, 10, 2 );

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

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

У SEO-плагинов логика отличается. У Yoast и Rank Math есть собственные настройки для типов записей, таксономий и отдельных URL. В этом случае сначала отключайте нужный post type в интерфейсе плагина. Если плагин не дает нужной гибкости, уже тогда имеет смысл смотреть в документацию по его фильтрам.

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

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

После изменения кода или настроек проверьте не только страницу sitemap, но и фактический список URL.

  1. Откройте /wp-sitemap.xml или /sitemap_index.xml.
  2. Проверьте, исчез ли нужный post type из индекса карты.
  3. Перейдите в конкретный sitemap-файл и убедитесь, что лишние URL больше не выводятся.
  4. Если используется кэш, очистите его на уровне плагина, сервера и CDN.
  5. Проверьте HTTP-ответ страницы sitemap: должен быть 200 OK, без редиректов и ошибок.

Дополнительно можно отправить URL sitemap в Google Search Console и посмотреть, не осталось ли старых ссылок в отчетах. Но обновление там не мгновенное, поэтому ориентируйтесь прежде всего на сам XML-файл.

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

Отключили post type, но URL все равно видны

Чаще всего причина в том, что sitemap генерирует не ядро WordPress, а SEO-плагин. Тогда фильтр wp_sitemaps_post_types не сработает. Проверьте источник карты и отключайте тип записи в настройках плагина или его фильтрах.

Сайт отдает старую версию sitemap

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

Сломали sitemap целиком

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

Пытаются закрыть URL только через robots.txt

Это не убирает записи из sitemap. Если URL не должен попадать в карту, его нужно исключать на уровне генерации sitemap, а не только запрещать обход.

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

Если вы вносите правки кодом, храните их в отдельном мини-плагине или mu-plugin. Это проще сопровождать и безопаснее для обновлений темы. Для сайтов с большим количеством CPT не стоит строить логику на ручной правке XML: при каждом обновлении контента карта должна пересобираться автоматически.

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

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

  • понятно, какой именно sitemap генерируется на сайте;
  • исключаемый post type или URL определены точно;
  • код добавлен не в тему, а в отдельный слой, который не потеряется при обновлении;
  • кэш очищен на всех уровнях;
  • в sitemap больше нет лишних URL;
  • страница sitemap отвечает 200 OK;
  • в Search Console отправлен актуальный sitemap.

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