Ситуация типовая: сайт уже живёт, карта сайта генерируется автоматически, а в индекс регулярно уезжают URL, которые там не нужны. Чаще всего это служебные записи, внутренние материалы, черновые типы контента, архивы с пустой ценностью или кастомные post type, которые должны существовать на сайте, но не должны попадать в XML Sitemap.
Если просто выключить sitemap целиком — вы потеряете полезные URL и усложните переобход. Если править robots.txt наугад — можно оставить в карте сайта мусор, который поисковик всё равно будет видеть как сигнал к обходу. Ниже — рабочие способы убрать из XML Sitemap только нужные типы записей и проверить, что WordPress и SEO-плагин ведут себя ожидаемо.
Когда это действительно нужно
Отключать sitemap для отдельного типа записей имеет смысл, если этот контент не должен участвовать в поисковом обходе как отдельные страницы. Например:
- служебный post type для внутренней логики темы или плагина;
- материалы, которые доступны только после авторизации;
- дублирующие сущности, которые уже закрыты от индексации другим способом;
- архивы и карточки, которые создаются автоматически, но не несут самостоятельной ценности.
Важно не путать sitemap и индексацию. Страница может быть исключена из карты сайта, но всё ещё открываться по прямой ссылке. И наоборот: если URL есть в sitemap, это не гарантирует индексацию, но повышает шанс, что поисковик его обойдёт.
Диагностика: где именно формируется карта сайта
В WordPress карта сайта может генерироваться ядром или SEO-плагином. Это принципиально, потому что способ отключения зависит от источника. Сначала проверьте, какой URL у sitemap открыт на сайте:
/wp-sitemap.xml— стандартный sitemap WordPress;/sitemap_index.xml— часто Yoast SEO, Rank Math и другие SEO-плагины;- другой адрес — смотрите настройки конкретного плагина.
Если вы не уверены, откройте исходный код страницы карты сайта или посмотрите HTTP-ответ. Для ядра WordPress и SEO-плагинов логика отключения будет разной.
Что проверить до изменений
- какой post type нужно убрать из sitemap;
- нужен ли он вообще в публичном интерфейсе;
- не используется ли он в хлебных крошках, внутренних ссылках или блоках;
- не завязан ли на него импорт, API или внешний сервис.
Способ 1: отключить тип записей из sitemap через код
Если sitemap генерирует ядро WordPress, можно убрать конкретный тип записей через фильтр wp_sitemaps_post_types. Это самый прямой и предсказуемый вариант, если вам нужен точечный контроль без лишних зависимостей.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['service_note'] );
unset( $post_types['internal_doc'] );
return $post_types;
} );Код можно добавить в дочернюю тему, mu-plugin или собственный мини-плагин. Важно использовать реальные имена post type, а не ярлыки из админки. Если тип записей называется service_note, именно этот ключ и нужно убирать.
Если нужно отключить только отдельные записи, а не весь тип, используйте фильтр wp_sitemaps_posts_query_args и исключайте конкретные ID или статус. Но это уже более тонкая настройка, и её стоит применять только когда есть чёткое понимание, какие URL должны остаться.
Пример исключения отдельных записей
<?php
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 );Этот вариант полезен, если у вас есть несколько служебных материалов внутри обычных записей. Но не злоупотребляйте им: если исключений становится много, лучше пересмотреть саму структуру контента.
Способ 2: отключить тип записей в SEO-плагине
Если sitemap отдаёт SEO-плагин, правильнее управлять им через его настройки. У большинства плагинов есть отдельный переключатель для post type в разделе XML Sitemap. Это проще для редакторов и безопаснее для сопровождения.
Сравнение подходов:
| Подход | Когда подходит | Минус |
|---|---|---|
| Код через фильтр WordPress | Нужен точный контроль, без зависимости от интерфейса | Требует поддержки в коде |
| Настройка в SEO-плагине | Контентом управляет редакция, нужен понятный интерфейс | Зависит от конкретного плагина |
| robots.txt | Нужно скрыть обход, но не менять генерацию sitemap | Не убирает URL из самой карты сайта |
Если у вас уже стоит плагин для технической чистки сайта, например Clearfy Pro, проверьте, нет ли там отдельного управления sitemap и типами записей. Это удобнее, чем держать разрозненные правки в нескольких местах. Ссылка на продукт: Clearfy Pro.
Пошаговое решение без лишнего риска
- Определите источник sitemap: ядро WordPress или SEO-плагин.
- Составьте список post type, которые не должны попадать в карту сайта.
- Сделайте правку в коде или в настройках плагина.
- Очистите кеш сайта и, если есть, кеш CDN.
- Проверьте XML Sitemap вручную и через инструменты для вебмастеров.
Если правите кодом, лучше вынести его в отдельный мини-плагин. Так вы не потеряете настройку при смене темы и не забудете, где именно была сделана правка.
<?php
/**
* Plugin Name: Disable selected post types in sitemap
*/
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
$exclude = array( 'service_note', 'internal_doc' );
foreach ( $exclude as $post_type ) {
if ( isset( $post_types[ $post_type ] ) ) {
unset( $post_types[ $post_type ] );
}
}
return $post_types;
} );Такой вариант проще сопровождать: код лежит отдельно, его легко отключить и он не зависит от шаблона темы.
Как проверить, что всё сработало
Проверка должна быть не формальной, а по факту. Откройте sitemap в браузере и найдите, исчез ли нужный раздел. Затем проверьте, что:
- URL карты сайта открывается без ошибок;
- исключённый post type больше не перечисляется в sitemap;
- остальные важные типы записей остались на месте;
- в Search Console или другом инструменте вебмастера не появилось новых ошибок обхода.
Если у вас WordPress 5.5+ и используется стандартный sitemap, можно дополнительно проверить ответ через curl:
curl -I https://example.com/wp-sitemap.xmlНужен код ответа 200 OK. Затем откройте сам XML и убедитесь, что нужный post type отсутствует. Если изменения не видны, почти всегда виноват кеш — серверный, плагинный или CDN.
Частые ошибки и как их исправить
Путают исключение из sitemap и noindex
Это разные задачи. Если URL не должен индексироваться, одного удаления из sitemap мало. Нужен либо noindex, либо закрытие через SEO-плагин, либо другая стратегия. Иначе страница всё ещё может попасть в индекс по внешней ссылке.
Используют неправильный ключ post type
В коде нужно указывать системное имя типа записей, а не его название в админке. Если тип называется internal_doc, а вы пишете Internal Docs, фильтр просто не сработает.
Правят robots.txt вместо sitemap
Это частая ошибка. Disallow в robots.txt не убирает URL из XML Sitemap. Поисковик всё равно увидит их в карте сайта и может попытаться обойти. Если цель — убрать URL из sitemap, правьте именно генератор sitemap.
Не очищают кеш после изменений
Если сайт использует кеширование страниц или CDN, старая версия sitemap может отдаваться ещё какое-то время. После правки обязательно сбросьте кеш и проверьте ответ заново.
Безопасность и производительность
Технические правки для sitemap лучше делать минимальными и локальными. Не вносите изменения в ядро темы и не редактируйте файлы плагина напрямую: обновление всё перетрёт. Для production-проектов безопаснее использовать mu-plugin или отдельный мини-плагин.
Если на сайте много кастомных типов записей, не строите логику через тяжёлые запросы на каждом хите. Для sitemap достаточно фильтра на список post type или на параметры запроса. Это проще и дешевле по ресурсам, чем динамически вычислять исключения через дополнительные запросы к базе.
Когда задача шире, чем одно исключение из sitemap, имеет смысл посмотреть на комплексную чистку технических дублей и служебных URL. В таких сценариях удобнее работать через набор настроек, а не разрозненные сниппеты.
Когда лучше не отключать тип записей из sitemap
Если post type содержит полезные страницы, которые должны быстро попадать в индекс, не убирайте его только потому, что он «не нравится» в отчётах. Иногда проблема не в sitemap, а в плохой структуре контента, слабой внутренней перелинковке или дублирующихся шаблонах. В таком случае сначала исправляют саму модель контента, а уже потом — карту сайта.
Если нужно, можно пойти по более мягкому пути: оставить тип записей в sitemap, но закрыть отдельные страницы от индексации, убрать их из навигации и не создавать на них лишние внутренние ссылки. Это часто лучше, чем полностью вырезать тип из карты сайта без анализа последствий.