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

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

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

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

Сначала стоит убедиться, что дело именно в карте сайта, а не в robots.txt, noindex или дублирующихся архивах. Если URL всё ещё индексируется, но уже убран из sitemap, это не ошибка: поисковик мог знать его раньше, либо нашёл ссылку внутри сайта. Поэтому отключение из sitemap — это только один из шагов, а не универсальная кнопка «убрать из поиска».

Что проверить в первую очередь

  • тип записей реально присутствует в XML sitemap;
  • у него есть публичные URL и они открываются без 404;
  • страницы не закрыты отдельно через noindex или robots;
  • внутренние ссылки на этот тип записей не создают лишний обход;
  • SEO-плагин не генерирует карту сайта поверх настроек WordPress.

Если у вас уже есть плагин для SEO, сначала ищите настройку включения/исключения типа записей в sitemap. Это безопаснее, чем сразу лезть в код: плагин сам знает, как именно он строит карту сайта.

Диагностика: где именно формируется sitemap

В WordPress карта сайта может собираться ядром или SEO-плагином. Важно понять источник, иначе можно править не тот слой. Откройте /wp-sitemap.xml и посмотрите, кто отдаёт файл. Если используется Yoast, Rank Math, All in One SEO или другой SEO-плагин, обычно именно он управляет составом sitemap. Если плагина нет, работает встроенная карта сайта WordPress.

Практический тест простой: временно отключите SEO-плагин на staging-копии и проверьте, меняется ли карта сайта. Если меняется — править нужно настройки плагина или его фильтры. Если нет — смотрим в сторону ядра WordPress и регистрации типа записей.

Способ 1. Убрать тип записей из sitemap через настройки

Если тип записей создаётся плагином или темой и у него есть собственные SEO-настройки, это самый чистый вариант. Обычно нужно найти раздел, где задаётся участие post type в XML sitemap, и отключить его там. Важно не путать это с отключением архива или страницы типа записей: архив и sitemap — разные сущности.

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

Когда интерфейса достаточно

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

Способ 2. Исключить post type кодом

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

Пример для functions.php дочерней темы или небольшого mu-plugin:

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['service'] );
    return $post_types;
} );

Здесь service — пример slug типа записей. Подставьте свой. После этого WordPress перестанет включать этот тип в sitemap, но сами записи останутся доступными по прямым ссылкам, если они публичные.

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

У SEO-плагинов свои фильтры. Например, у Yoast и Rank Math логика исключения отличается, и универсального фильтра на все случаи нет. Поэтому сначала смотрите документацию конкретного плагина, а не пытайтесь применить фильтр ядра к чужой генерации sitemap. Это частая ошибка: код написан правильно, но не влияет на нужный источник.

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

Способ 3. Не публиковать тип записей в sitemap ещё на этапе регистрации

Если вы сами регистрируете post type, можно сразу задать параметры так, чтобы он не попадал в карту сайта. Для этого при register_post_type() используйте 'show_in_rest' по необходимости, а для sitemap — параметр 'show_in_sitemap' => false, если он поддерживается в вашей версии WordPress и сценарии регистрации.

Пример регистрации служебного типа записей:

<?php
register_post_type( 'service', array(
    'label'        => 'Service pages',
    'public'       => true,
    'show_ui'      => true,
    'show_in_rest' => true,
    'has_archive'  => false,
    'rewrite'      => array( 'slug' => 'service' ),
    'supports'     => array( 'title', 'editor' ),
    'show_in_sitemap' => false,
) );

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

Сравнение подходов

СпособКогда подходитПлюсыМинусы
Настройки SEO-плагинаЕсть нужная опция в интерфейсеБез кода, безопасно для обновленийНе всегда есть точечное исключение
Фильтр wp_sitemaps_post_typesИспользуется встроенный sitemap WordPressТочно убирает post type из карты сайтаНе влияет на sitemap сторонних плагинов
Параметр регистрации post typeВы контролируете код типа записейРешение на уровне архитектурыНельзя бездумно менять чужой post type

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

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

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

Проверка должна быть не только визуальной. Откройте XML sitemap в браузере и найдите нужный тип записей или конкретный URL. Если карта сайта разбита на несколько файлов, проверьте и индекс sitemap, и дочерние файлы.

Дальше сделайте техническую проверку:

curl -s https://example.com/wp-sitemap.xml | grep -i service

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

Что считать нормальным результатом

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

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

Удалили URL из sitemap, но он всё ещё в индексе

Это не баг. Поисковик мог найти страницу по внутренним ссылкам, внешним ссылкам или старым данным. Если URL действительно не должен индексироваться, добавьте noindex и проверьте, не ведут ли на него ссылки из меню, хлебных крошек, похожих записей или XML-карт сайта других типов.

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

Обычно это происходит, когда фильтр возвращает не массив, а null или перезаписывает список типов записей неправильно. В фильтрах WordPress важно сохранять исходную структуру данных и удалять только нужный элемент через unset().

Правили не тот sitemap

Если на сайте стоит SEO-плагин, встроенный фильтр WordPress может вообще не участвовать в генерации карты сайта. В таком случае код в functions.php выглядит корректно, но не даёт эффекта. Решение — найти именно тот механизм, который реально отдаёт XML.

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

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

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

Если правите код, лучше не вносить изменения прямо в родительскую тему. Для точечных фильтров удобнее небольшой mu-plugin: он не зависит от темы и не исчезнет после обновления. Это особенно полезно, если исключение из sitemap — часть постоянной технической политики сайта.

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

Если вы работаете с кастомным типом записей в плагине или теме, держите рядом минимальный чек-лист перед выкладкой:

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

Такой подход занимает меньше времени, чем последующая ручная чистка последствий после неудачного изменения карты сайта.

Как закрыть XML sitemap WordPress от индексации и не сломать сканирование
19.08.2026
Как отключить xmlrpc.php в WordPress без поломки синхронизации и внешних сервисов
22.08.2026
Как отключить XML sitemap для отдельного типа записей WordPress без поломки индексации
25.08.2026
Как закрыть дубли архивов WordPress от индексации без поломки SEO
15.08.2026