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

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

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

Что именно нужно отключать и где это настраивается

В WordPress XML sitemap может формироваться ядром, SEO-плагином или отдельным плагином для карт сайта. Поэтому сначала проверьте, откуда берётся файл. Если у вас открыт адрес /wp-sitemap.xml, это встроенная карта сайта WordPress. Если sitemap лежит по другому адресу, например /sitemap_index.xml, его обычно генерирует SEO-плагин.

Дальше задача делится на три сценария:

  • убрать из sitemap отдельный тип записей, например product, event или служебный CPT;
  • исключить конкретную таксономию или архив;
  • полностью отключить карту сайта для части контента, который не должен попадать в поиск.

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

Диагностика: почему лишние URL вообще попали в sitemap

Перед правкой кода проверьте, что именно индексируется и откуда это взялось. Это экономит время и помогает не отключить лишнее.

  1. Откройте XML sitemap в браузере и найдите проблемный URL или раздел.
  2. Посмотрите, это запись, таксономия, авторский архив или медиа-вложение.
  3. Проверьте, не создаёт ли URL отдельный плагин: SEO, мультиязычность, каталог, события, медиа-галерея.
  4. Сравните sitemap с настройками noindex: иногда страница уже закрыта от индексации, но всё ещё присутствует в карте сайта.

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

Когда лучше не трогать sitemap

Не стоит вырезать из sitemap всё подряд только потому, что страница вам кажется второстепенной. Если это полезный архив, который реально должен ранжироваться, лучше оставить его в карте сайта и управлять индексацией через мета-теги и внутреннюю перелинковку. Sitemap — это не список «всего подряд», а список того, что вы хотите показать поисковику как значимое.

Решение через код: исключаем типы записей из встроенного sitemap WordPress

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

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['landing'] );
    unset( $post_types['event'] );
    unset( $post_types['review'] );

    return $post_types;
} );

Здесь важно не гадать с именем типа записи. Используйте реальный post_type, который зарегистрирован в теме или плагине. Если сомневаетесь, проверьте его в коде регистрации или через get_post_types().

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

add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'post' === $post_type ) {
        $args['post__not_in'] = array( 123, 456 );
    }

    return $args;
}, 10, 2 );

Этот способ полезен, если в sitemap попали конкретные тестовые записи или дубли, которые вы пока не хотите удалять из базы, но уже не хотите показывать поисковикам.

Если sitemap генерирует SEO-плагин: что делать в настройках

У популярных SEO-плагинов есть собственные переключатели для типов записей, таксономий и архивов. Логика обычно одна: вы открываете настройки sitemap, находите раздел для post types и отключаете лишнее. Это проще и безопаснее, чем писать код, если задача стандартная.

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

ПодходКогда подходитМинус
Настройки SEO-плагинаНужно быстро убрать типы записей без разработкиЗависит от конкретного плагина
Фильтры WordPressНужен точечный контроль и предсказуемостьНужно править код
Отключение sitemap целикомКарта сайта не нужна или генерируется другим инструментомМожно потерять удобный канал для обхода страниц

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

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

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

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

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

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

Дальше смотрите на три вещи:

  • страница sitemap открывается без ошибок 200;
  • исключённые URL больше не присутствуют в XML;
  • в Search Console нет новых сообщений о проблемных URL в карте сайта.

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

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

Отключили не тот тип записей

Часто путают post_type и ярлык в админке. В коде нужен именно системный идентификатор, а не человекочитаемое название. Если сомневаетесь, посмотрите регистрацию CPT.

Спрятали URL в robots.txt вместо sitemap

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

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

После правки sitemap старый XML может ещё отдаваться из кеша страницы, объекта или CDN. Если изменения не видны, сначала сбросьте кеш, потом проверяйте снова.

Отключили полезный архив вместе с мусором

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

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

Не храните такие правки в случайных сниппетах без контроля версий. Для сайта с живым трафиком лучше иметь понятный слой изменений: мини-плагин, mu-plugin или отдельный файл в репозитории. Тогда вы быстро поймёте, что именно влияет на sitemap, и не потеряете настройку после обновления темы.

Если sitemap большой, не пытайтесь «лечить» его только отключением кеша. Сначала уберите из него лишние сущности, потом уже смотрите на производительность генерации. Меньше мусора в карте сайта — меньше лишней работы при обходе и меньше путаницы в индексации.

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

⭐⭐⭐⭐⭐