Ситуация типовая: на сайте есть служебные или малополезные типы записей — например, внутренние заметки, технические страницы, черновые каталоги, отдельные CPT для интеграций. В индексе они не нужны, но в XML sitemap продолжают попадать. В итоге поисковик получает лишние URL, а вы тратите краулинговый бюджет на мусорные страницы.
Ниже — рабочие способы убрать отдельные типы записей из sitemap в WordPress, проверить, что всё сработало, и не сломать остальную индексацию.
Когда это реально нужно
Не стоит отключать sitemap для типа записей только потому, что он «не нравится». Сначала проверьте, зачем этот тип вообще существует и должен ли он индексироваться. Обычно проблема возникает в таких сценариях:
- служебный CPT используется только для внутренней логики темы или плагина;
- в sitemap попадают страницы с дублирующимся или пустым контентом;
- есть архивы, которые не должны конкурировать с основными посадочными страницами;
- контент создаётся автоматически, но не несёт самостоятельной ценности для поиска;
- нужно оставить тип записей на сайте, но исключить его из карты сайта и, иногда, из индекса.
Диагностика: что именно попадает в sitemap
В WordPress с ядром и современными SEO-плагинами карта сайта может формироваться по-разному. Поэтому сначала нужно понять источник:
- Откройте
/wp-sitemap.xml, если используете встроенный sitemap WordPress. - Если стоит SEO-плагин, проверьте его sitemap-индекс: у Yoast это обычно
/sitemap_index.xml, у Rank Math — тоже свой индекс. - Найдите нужный тип записей в списке sitemap-частей: posts, pages, categories, custom post types.
- Проверьте, не дублируется ли тип в нескольких местах: например, в sitemap и в HTML-архиве.
Если тип записей уже закрыт от индексации, но всё равно присутствует в sitemap, это не всегда ошибка. Некоторые SEO-плагины продолжают показывать URL в карте сайта, пока тип доступен для обхода. Но если задача — именно убрать его из sitemap, нужен точечный фильтр или настройка плагина.
Способ 1: отключить тип записей из встроенного sitemap WordPress
Если сайт использует стандартный XML sitemap WordPress, можно исключить конкретный post type через фильтр wp_sitemaps_post_types. Это надёжнее, чем пытаться править XML вручную.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный тип записей из sitemap.
unset( $post_types['internal_note'] );
return $post_types;
} );Где разместить код:
- в
functions.phpдочерней темы; - в небольшом mu-plugin, если не хотите зависеть от темы;
- в собственном мини-плагине, если это часть инфраструктуры проекта.
Если нужно убрать не весь тип, а только отдельные записи, используйте фильтр wp_sitemaps_posts_query_args и исключайте записи по метке, статусу или ID. Но это уже более тонкая настройка, и её стоит применять только когда есть чёткий критерий отбора.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'internal_note' === $post_type ) {
$args['post__not_in'] = array( 123, 456 );
}
return $args;
}, 10, 2 );Способ 2: убрать тип записей из sitemap в Yoast SEO
Если sitemap отдаёт Yoast SEO, правильнее использовать его настройки, а не лезть в генерацию XML. У Yoast есть фильтр wpseo_sitemap_exclude_post_type, который позволяет исключить конкретный post type.
<?php
add_filter( 'wpseo_sitemap_exclude_post_type', function( $exclude, $post_type ) {
if ( 'internal_note' === $post_type ) {
return true;
}
return $exclude;
}, 10, 2 );Это полезно, если вы хотите оставить тип записей доступным в админке и на фронтенде, но не показывать его в карте сайта. Важно: если в настройках Yoast этот тип уже отключён от индексации, проверьте, не конфликтует ли фильтр с общими настройками типа записей.
Способ 3: исключить тип записей в Rank Math
В Rank Math логика похожая: сначала смотрите настройки самого post type, а если нужно — используйте фильтры плагина. Для исключения из sitemap уместно работать через фильтрацию списка объектов, которые попадают в карту сайта. Названия фильтров в Rank Math зависят от версии и модуля, поэтому перед внедрением лучше свериться с документацией конкретной сборки и не копировать код вслепую.
Если задача решается настройкой в интерфейсе плагина, это предпочтительнее кода: меньше риска сломать обновления. Но когда нужен точечный контроль для одного типа записей, код обычно надёжнее и прозрачнее.
Сравнение подходов
| Подход | Когда использовать | Плюсы | Минусы |
|---|---|---|---|
| Настройка в SEO-плагине | Если тип записей уже управляется Yoast/Rank Math | Без кода, проще поддерживать | Не всегда хватает точности |
| Фильтр WordPress sitemap | Если используется встроенный XML sitemap | Работает на уровне ядра | Нужно аккуратно встраивать код |
| Исключение отдельных записей по ID | Если нужно убрать не весь тип, а часть контента | Точный контроль | Требует поддержки списка исключений |
Пошаговое решение без лишних рисков
- Определите, какой sitemap используется: ядро WordPress или SEO-плагин.
- Проверьте, какой именно post type нужно убрать.
- Сделайте бэкап файла с кодом или работайте в дочерней теме / mu-plugin.
- Добавьте фильтр для исключения типа записей.
- Очистите кэш сайта, если он есть.
- Переоткройте sitemap и убедитесь, что нужный тип исчез из списка.
- Проверьте, не остались ли ссылки на этот тип в других sitemap-частях.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. После внесения изменений сделайте три вещи:
- Откройте sitemap в браузере и убедитесь, что нужный post type больше не выводится.
- Проверьте исходный XML: там не должно быть ссылок на исключённый тип записей.
- Если сайт уже в Google Search Console, отправьте sitemap на повторную обработку и посмотрите, не растёт ли число URL этого типа в отчёте по индексированию.
Если URL всё ещё появляются в отчётах, это не всегда значит, что sitemap не обновился. Поисковик может хранить старые данные некоторое время. Но если в самом XML карта сайта уже чистая, значит, техническая часть выполнена правильно.
Частые ошибки и как их исправить
Тип записей убрали из sitemap, но он всё ещё индексируется
Это нормально, если на него есть внутренние ссылки или он уже был найден поисковиком раньше. Чтобы ускорить переобход, проверьте, не ведут ли на него меню, блоки, хлебные крошки, связанные записи и архивы. Иногда нужно дополнительно закрыть тип от индексации на уровне настроек post type или SEO-плагина.
Код добавили в тему, а после обновления он исчез
Значит, правка была внесена не в дочернюю тему и не в отдельный плагин. Для технических фильтров лучше использовать mu-plugin или собственный мини-плагин, если сайт живёт долго и обновляется регулярно.
После исключения типа сломался sitemap-индекс
Обычно это результат ошибки в массиве фильтра: удалили не тот ключ или вернули не тот тип данных. В коде выше важно сохранять исходный массив и убирать только конкретный элемент через unset().
В sitemap исчезли не только служебные записи, но и нужные страницы
Проверьте, не совпадает ли slug post type с другим типом контента. На больших проектах это случается чаще, чем кажется. Также убедитесь, что фильтр не срабатывает для всех типов записей без условия.
Практические советы по безопасности и поддержке
Если вы вносите такие изменения на клиентском сайте, не редактируйте ядро и не правьте XML вручную. Любое обновление всё перетрёт. Для поддержки лучше:
- хранить фильтр в отдельном mu-plugin;
- документировать, какой post type и зачем исключён;
- после обновления SEO-плагина перепроверять sitemap;
- не отключать тип записей от индексации без анализа входящих ссылок и поискового трафика.
Если на сайте много технических дублей, служебных архивов и лишних URL, имеет смысл смотреть не только на sitemap, но и на общую чистку индексации. В таких задачах иногда удобнее использовать набор точечных настроек и фильтров, чем пытаться решить всё одним плагином.
Для проектов, где нужна системная чистка SEO-шума, можно посмотреть в сторону Clearfy Pro, если вам важны именно настройки по дублям, служебным страницам и технической оптимизации. Но даже там полезно понимать, что именно вы отключаете и как это влияет на sitemap и индексацию.