Ситуация типовая: сайт уже давно в работе, а в XML Sitemap внезапно попадают служебные записи, архивы, скрытые CPT или контент, который вы не хотите отдавать в индексацию. Вручную править карту сайта нельзя — она генерируется автоматически, и любое временное решение быстро ломается после обновления темы или плагина.
Ниже разберём, как убрать из XML Sitemap отдельные типы записей, не затрагивая остальной сайт. Покажу два рабочих подхода: через код и через настройки SEO-плагина, а также как проверить, что поисковик действительно больше не видит лишние URL в карте сайта.
Когда это вообще нужно
Отключать отдельные типы записей из sitemap имеет смысл не «на всякий случай», а когда есть конкретная причина. Например:
- в CPT лежат служебные записи для внутренней логики, а не для поиска;
- в карту сайта попадают дубли страниц, которые уже закрыты canonical или noindex;
- в sitemap есть архивы, которые не должны конкурировать с основными посадочными страницами;
- плагин создаёт лишние типы контента, и они засоряют карту сайта после миграции или тестов;
- нужно убрать из индексации часть контента, но оставить её доступной по прямой ссылке.
Важно не путать sitemap и индексацию. Удаление URL из карты сайта не запрещает их обход ботом, если на них есть ссылки. Но для технической чистки это часто правильный первый шаг: вы перестаёте подсказывать поисковику, что эти страницы нужно регулярно переобходить.
Диагностика: что именно попадает в карту сайта
Сначала проверьте, какой именно генератор sitemap используется. В WordPress это может быть встроенная карта сайта ядра, Yoast SEO, Rank Math, All in One SEO или другой плагин. От этого зависит способ отключения.
Как быстро понять источник
- Откройте
/wp-sitemap.xml— это встроенный sitemap WordPress. - Если адрес другой, например
/sitemap_index.xml, скорее всего, карту отдаёт SEO-плагин. - Посмотрите, какие разделы есть внутри: записи, страницы, рубрики, пользовательские типы записей, авторы, теги.
Дальше найдите конкретный тип записи, который нужно убрать. Важно смотреть не только на название, но и на post_type. Например, визуально это может быть «Новости», а фактически тип — news.
Вариант 1. Убрать тип записи из встроенного XML Sitemap WordPress через код
Если сайт использует встроенный sitemap WordPress, можно исключить нужный тип записи через фильтр wp_sitemaps_post_types. Это самый прозрачный способ: вы не ломаете генерацию карты целиком, а только убираете конкретный тип из списка.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный CPT из sitemap.
unset( $post_types['news'] );
// Можно исключить и несколько типов сразу.
unset( $post_types['internal_doc'] );
return $post_types;
} );Код лучше добавлять в мини-плагин или в 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 конкретные страницы, но оставить тип записи целиком. Например, для временных лендингов, технических материалов или страниц, которые уже закрыты от индексации другим способом.
Вариант 2. Отключить тип записи в SEO-плагине
Если sitemap генерирует SEO-плагин, правильнее использовать его настройки. У большинства популярных решений есть отдельные переключатели для типов записей и таксономий. Это удобнее, чем писать код, если задача решается штатно.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки плагина | Нужно быстро убрать тип записи без разработки | Зависит от интерфейса и версии плагина |
| Код через фильтр | Нужен точный контроль и предсказуемое поведение | Нужно поддерживать код при изменениях ядра или плагина |
| Комбинированный вариант | Часть правил задаётся в плагине, часть — в коде | Легко запутаться, если нет документации |
Если у вас на сайте уже используется плагин для технической чистки и SEO-оптимизации, например Clearfy Pro, проверьте, не дублирует ли он часть настроек sitemap и индексации. Это не обязательное решение, но в реальных проектах такие плагины часто помогают централизовать исключения и не держать логику в теме. Ссылка на продукт: https://wpshop.ru/plugins/clearfy.
Пошаговое решение без лишних рисков
Шаг 1. Сделайте резервную копию
Перед изменениями сохраните бэкап базы и файлов. Это не формальность: если вы ошибётесь в фильтре или случайно уберёте нужный тип записи, откат займёт минуты, а ручной поиск проблемы — гораздо дольше.
Шаг 2. Определите тип записи
В админке или в коде найдите точный post_type. Если есть сомнения, посмотрите регистрацию типа записи в теме или плагине. Название в меню и системный slug часто отличаются.
Шаг 3. Добавьте исключение
Для встроенного sitemap используйте фильтр wp_sitemaps_post_types. Для SEO-плагина — его настройки или документированный фильтр, если он предусмотрен. Не смешивайте оба подхода без необходимости.
Шаг 4. Очистите кеш
После изменения очистите:
- кеш страницы, если он есть;
- объектный кеш, если используется Redis/Memcached;
- кеш CDN, если sitemap отдаётся через него;
- кеш SEO-плагина, если он генерирует карту заранее.
Шаг 5. Проверьте URL sitemap вручную
Откройте карту сайта в браузере и убедитесь, что нужного раздела больше нет. Если sitemap индексируется через несколько вложенных файлов, проверьте и индексную карту, и дочерние XML-файлы.
Как проверить, что решение сработало
Проверка должна быть не «на глаз», а по факту. Минимальный набор:
- Откройте
/wp-sitemap.xmlили/sitemap_index.xml. - Найдите раздел с исключённым типом записи.
- Проверьте, что в XML больше нет ссылок на нужные URL.
- Если сайт уже в Google Search Console, отправьте sitemap на повторную обработку и посмотрите, исчез ли раздел из отчёта по карте сайта.
Дополнительно можно проверить ответ сервера через curl:
curl -I https://example.com/wp-sitemap.xmlЕсли карта сайта отдаётся с кодом 200, но внутри всё ещё есть лишние URL, значит исключение не сработало или его перезаписывает другой плагин. Если вместо XML вы видите редирект или ошибку, сначала чините доступность sitemap, а уже потом исключения.
Частые ошибки и как их исправить
Удалили не тот тип записи
Частая ошибка — ориентироваться на название в админке, а не на системный slug. В результате из sitemap исчезают нужные страницы. Исправление простое: верните тип обратно и проверьте регистрацию post_type в коде.
Код добавили в тему, а потом потеряли после обновления
Если правило критичное, не храните его в родительской теме. Используйте дочернюю тему или мини-плагин. Для технических исключений это надёжнее и проще в сопровождении.
Сайт использует не встроенный sitemap, а карту SEO-плагина
Фильтры WordPress не повлияют на карту, которую генерирует сторонний плагин. В этом случае нужно работать через его настройки или документированные хуки. Сначала определите источник sitemap, потом вносите изменения.
Не очистили кеш
После правки карта сайта может продолжать отдавать старую версию из кеша. Особенно это заметно на сайтах с CDN и серверным кешированием. Если изменения не видны, очищайте кеш на всех уровнях, а не только в админке WordPress.
Скрыли URL из sitemap, но оставили внутренние ссылки
Это не ошибка, если вы осознанно хотите оставить страницу доступной. Но если задача — убрать её из обхода, проверьте внутренние ссылки, меню, блоки и архивы. Иначе поисковик всё равно найдёт URL через сайт.
Что делать, если нужен более жёсткий контроль
Если задача не ограничивается sitemap, а нужно ещё и убрать дубли, служебные страницы и лишние архивы из технической индексации, лучше смотреть на решение комплексно: sitemap, robots.txt, canonical, noindex и внутренние ссылки должны работать согласованно. Иначе вы просто переносите проблему из одного места в другое.
Для сайтов с большим количеством служебных типов записей удобнее держать правила в одном месте и документировать их рядом с кодом. Это экономит время при поддержке: через полгода вы не будете вспоминать, почему именно этот post_type исключён из карты сайта.
Короткий чек-лист перед публикацией
- Проверен источник sitemap: ядро WordPress или SEO-плагин.
- Точный
post_typeопределён без догадок. - Исключение добавлено через фильтр или настройку плагина.
- Кеш на сайте и CDN очищен.
- XML Sitemap открывается без ошибок.
- Лишний тип записи исчез из дочерних sitemap-файлов.
- Внутренние ссылки на исключённые URL проверены отдельно.
Если нужна не точечная правка, а системная чистка сайта от дублей, служебных архивов и лишней индексации, проще один раз выстроить правила технической оптимизации, чем потом вручную вылавливать последствия в Search Console и логах обхода.