Ситуация типовая: карта сайта в WordPress есть, но в ней оказываются служебные записи, тестовые CPT, архивы таксономий без контента или страницы, которые вы сознательно закрываете от индексации. В итоге sitemap становится шумным, а в Search Console появляются URL, которые не должны были туда попадать.
Если задача не в том, чтобы «вообще отключить sitemap», а в том, чтобы оставить только полезные URL, лучше действовать точечно: убрать лишние типы записей из генерации, проверить, не дублируются ли они в других источниках, и затем перепроверить карту сайта и индексацию.
Когда это действительно нужно
Отключать отдельные элементы sitemap имеет смысл, если:
- в сайтмапе есть
attachment,revision,nav_menu_itemили другой служебный контент; - кастомный тип записей используется только для внутренней логики и не должен индексироваться;
- в карту сайта попадают архивы таксономий с пустыми или почти пустыми страницами;
- вы уже закрыли раздел от индексации, но он продолжает светиться в sitemap;
- нужно уменьшить шум в отчётах Search Console и упростить контроль индексации.
Важно не путать sitemap и robots.txt. Если URL уже попал в карту сайта, но вы просто запретили его в robots.txt, это не решает проблему полностью: поисковик всё равно видит, что URL существует и что вы сами его перечисляете.
Диагностика: что именно попало в карту сайта
Сначала проверьте, какой генератор sitemap у вас работает. В WordPress 5.5+ есть встроенный XML sitemap, но многие сайты используют SEO-плагины, и логика там отличается.
Что смотреть в первую очередь
- откройте
/wp-sitemap.xmlили sitemap от SEO-плагина; - посмотрите, какие разделы там есть: записи, страницы, CPT, таксономии, авторы, архивы;
- сверьте содержимое с тем, что реально должно индексироваться;
- проверьте, не дублируется ли один и тот же URL в нескольких sitemap-файлах;
- посмотрите, не генерируются ли пустые архивы таксономий.
Если sitemap создаёт плагин, сначала ищите его настройки. Если используется встроенный генератор WordPress, удобнее управлять фильтрами через код.
Пошаговое решение через код
Ниже — рабочий способ для встроенного XML Sitemap WordPress. Он позволяет убрать из карты сайта отдельные типы записей и таксономии без вмешательства в шаблоны и без отключения sitemap целиком.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебные и внутренние типы записей.
unset( $post_types['revision'] );
unset( $post_types['nav_menu_item'] );
unset( $post_types['attachment'] );
// Если есть кастомный тип, который не должен индексироваться:
unset( $post_types['internal_note'] );
return $post_types;
} );
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
// Пример: скрываем таксономии, которые не несут SEO-ценности.
unset( $taxonomies['post_tag'] );
unset( $taxonomies['internal_topic'] );
return $taxonomies;
} );
Код можно добавить в functions.php дочерней темы или в небольшой mu-plugin, если это изменение должно переживать обновления темы.
Если нужно убрать только один тип записей
Иногда проблема не в служебных объектах, а в конкретном CPT. Тогда не трогайте всё подряд. Уберите только нужный тип, чтобы не сломать карту сайта для остального контента.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
if ( isset( $post_types['portfolio'] ) ) {
unset( $post_types['portfolio'] );
}
return $post_types;
} );
Если у вас SEO-плагин, аналогичный результат обычно настраивается в его интерфейсе. Но если плагин не даёт нужной гранулярности, код надёжнее: вы точно контролируете, что попадёт в sitemap.
Сравнение подходов
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| Настройки SEO-плагина | Если плагин уже управляет sitemap | Без кода, быстро | Не всегда есть точечное управление |
| Фильтры WordPress | Встроенный sitemap или нужен полный контроль | Точно и предсказуемо | Нужно править код |
| Отключить sitemap целиком | Редкий случай, когда карта не нужна | Просто | Потеря полезного сигнала для поисковиков |
Проверка результата после внедрения
После правки не ограничивайтесь открытием главной sitemap. Проверьте именно те разделы, которые вы отключали.
- Откройте
/wp-sitemap.xmlи убедитесь, что лишний раздел исчез. - Проверьте вложенные sitemap-файлы, если они есть.
- Сравните список URL до и после изменения.
- Если используете Search Console, отправьте sitemap на повторную обработку.
- Посмотрите, не остались ли эти URL в других источниках: внутренних ссылках, хлебных крошках, XML-фидах.
Если URL всё ещё виден в индексе, это не всегда значит, что sitemap не сработал. Поисковик мог сохранить старую версию страницы или найти её по внутренним ссылкам. Тогда нужно отдельно проверить каноникал, noindex и структуру ссылок.
Частые ошибки и как их исправить
Удалили не тот тип записи
Ошибка возникает, когда в unset() попадает полезный тип, например post или page. В результате из sitemap исчезает основной контент. Исправление простое: верните тип обратно и проверьте список зарегистрированных post type в коде темы или плагина.
Ожидали, что robots.txt решит проблему
Если URL уже есть в sitemap, robots.txt не убирает его из карты сайта. Поисковик всё равно видит сигнал, что URL существует. Для чистки sitemap нужно править именно генератор карты сайта.
Правили не тот sitemap
На сайте может одновременно работать встроенный sitemap WordPress и sitemap от SEO-плагина. Тогда вы меняете один источник, а второй продолжает отдавать старые URL. Сначала определите, какой файл реально сканируется и отправляется в Search Console.
Скрыли архив, но оставили внутренние ссылки
Если раздел закрыт, но на него ведут меню, хлебные крошки или блоки «похожие материалы», поисковик продолжит находить URL. Уберите внутренние ссылки, если страница не должна индексироваться.
Чек-лист перед публикацией изменений
- Поняли, какой sitemap используется: встроенный или плагин.
- Составили список типов записей и таксономий, которые нужно убрать.
- Внесли изменения в дочернюю тему или mu-plugin.
- Проверили, что полезные URL остались в sitemap.
- Убедились, что лишние URL исчезли из всех sitemap-файлов.
- Отправили sitemap на повторную проверку в Search Console.
- Проверили внутренние ссылки на удалённые разделы.
Безопасность и производительность
С точки зрения производительности фильтры sitemap почти не нагружают сайт, если вы не добавляете тяжёлые запросы в callback. Но есть два практических правила.
- Не делайте дополнительные запросы к базе внутри фильтра, если можно обойтись простым
unset(). - Не храните правку в родительской теме, если она может быть затёрта обновлением.
Если на сайте много технических правок, удобнее вынести их в маленький mu-plugin. Так код не потеряется при смене темы и не зависит от редакционных обновлений.
Если нужен более широкий контроль над SEO-спамом, дублями и технической чисткой сайта, можно посмотреть в сторону инструментов уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpcoder.ru&utm_medium=article&utm_campaign=kak-otklyuchit-xml-sitemap-dlya-otdelnyh-tipov-zapisej-v-wordpress. Но даже с плагином полезно понимать, что именно он меняет в sitemap и индексации.
Если после правки sitemap стал короче, это ещё не финальный критерий успеха. Рабочий результат — когда в карте сайта остались только те URL, которые вы действительно хотите показывать поисковикам, а Search Console перестала получать мусорные сигналы по лишним разделам.