Ситуация типовая: сайт уже работает, карта сайта генерируется автоматически, но в ней оказываются служебные записи, черновые CPT, пустые таксономии или страницы, которые не должны попадать в поиск. Если просто отключить sitemap целиком, вы потеряете нормальный сигнал для поисковиков. Правильнее точечно убрать лишнее и оставить только то, что реально нужно индексировать.
Ниже разберём рабочие варианты для WordPress: через настройки SEO-плагина, через фильтры ядра и через код темы или мини-плагина. Сразу оговорка: если у вас уже есть отдельная статья про полное отключение XML Sitemap, здесь речь именно о частичном управлении составом карты сайта.
Когда проблема действительно в sitemap
Не каждый лишний URL в индексе появляется из-за карты сайта, но sitemap часто ускоряет попадание мусора в поиск. Это особенно заметно, если:
- в sitemap есть
attachment-страницы, которые не нужны в выдаче; - в карту попадают служебные CPT вроде
log,event_log,revisionили внутренние записи плагинов; - в XML видны таксономии без контента или с тонкими страницами;
- в sitemap остаются архивы, которые вы уже закрыли от индексации, но они продолжают генерироваться;
- поисковик регулярно показывает в отчётах URL, которых пользователь на сайте вообще не должен видеть.
Что проверить до правки
Сначала откройте сам sitemap в браузере и посмотрите, какие именно URL туда попадают. Обычно это /wp-sitemap.xml в ядре WordPress или отдельный sitemap от SEO-плагина. Дальше сопоставьте проблемные URL с типом записи, таксономией или архивом. Без этого легко убрать не то и потом искать причину просадки индексации.
- Проверьте, какой плагин генерирует sitemap.
- Сравните URL из sitemap с типом контента в админке.
- Убедитесь, что нужные страницы не исчезают из карты случайно.
- Посмотрите, не дублируется ли sitemap ядра и sitemap SEO-плагина.
Как убрать лишние типы записей из XML sitemap
Если вы используете стандартный sitemap WordPress, у ядра есть фильтры для исключения пост-типов и таксономий. Это самый чистый способ, потому что он не ломает генерацию карты полностью и не требует вмешательства в шаблоны.
Исключение post type из sitemap ядра
Ниже пример, который убирает из sitemap служебный тип записи event_log. Код лучше размещать в мини-плагине или в functions.php дочерней темы, если у вас нет отдельного места для кастомизации.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['event_log'] );
unset( $post_types['revision'] );
return $post_types;
} );Если нужно убрать несколько типов, делайте это явно. Не стоит вырезать всё подряд по шаблону, особенно если на сайте есть кастомные типы с полезным контентом.
Исключение таксономии из sitemap
Для таксономий работает похожий подход. Например, если у вас есть техническая таксономия internal_tag, её можно убрать из карты сайта так:
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['internal_tag'] );
return $taxonomies;
} );Это полезно, когда таксономия нужна для внутренней структуры фильтрации, но не должна индексироваться как отдельный набор страниц.
Если sitemap генерирует SEO-плагин
У Yoast SEO, Rank Math и похожих плагинов логика отличается от ядра WordPress. Там обычно проще отключить конкретный тип контента в настройках, чем писать фильтры. Это предпочтительный путь, если вы не хотите поддерживать кастомный код после обновлений.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки плагина | Если sitemap создаёт SEO-плагин | Зависите от интерфейса и логики конкретного плагина |
| Фильтры WordPress | Если используете sitemap ядра | Нужно аккуратно писать код |
| Кастомный код в теме | Если правка разовая и проект небольшой | Сломается при смене темы, если не вынести в мини-плагин |
Если плагин даёт отдельные переключатели для post type, таксономий или архивов, используйте их. Код имеет смысл только тогда, когда в интерфейсе нет нужной точности или вам нужно централизованно управлять sitemap на нескольких сайтах.
Пошаговое решение без лишнего риска
Ниже рабочая последовательность, которая помогает не сломать индексацию.
- Откройте текущий sitemap и выпишите все лишние URL.
- Определите источник: ядро WordPress или SEO-плагин.
- Сначала попробуйте убрать лишнее через настройки плагина.
- Если нужной опции нет, добавьте фильтр в мини-плагин или
functions.phpдочерней темы. - Очистите кэш сайта и CDN, если он есть.
- Проверьте итоговый XML в браузере и через Search Console.
Если вы работаете с проектом, где важна чистка технических дублей и лишних сущностей, иногда проще собрать это в одном наборе правил. Например, в Clearfy Pro есть инструменты для удаления дублей и технической чистки сайта, что удобно, когда проблема не ограничивается одним sitemap: https://wpshop.ru/plugins/clearfy.
Как проверить, что решение сработало
Проверка нужна не только на уровне браузера. Важно убедиться, что sitemap действительно изменился и поисковик видит актуальную версию.
Что смотреть после правки
- Откройте sitemap и убедитесь, что удалённые типы записей больше не присутствуют.
- Проверьте HTTP-ответ: sitemap должен отдавать
200 OK, а не редирект или ошибку. - Если используется кэш, обновите его и проверьте XML в режиме инкогнито.
- В Google Search Console отправьте sitemap повторно и посмотрите, нет ли ошибок чтения.
- Сравните количество URL до и после, но не делайте выводы по одному дню — поисковая консоль обновляется не мгновенно.
Если вы убирали только часть sitemap, а не весь файл, убедитесь, что остальные разделы остались на месте. Частая ошибка — случайно удалить весь post type, когда нужен был только один служебный объект.
Частые ошибки и как их исправить
Удалили не тот post type
Это случается, когда название типа записи в коде не совпадает с реальным post_type. Проверьте его в регистрации CPT или через плагины для просмотра структуры контента. Если тип называется news, а вы убрали post, ничего не изменится.
Сайт продолжает отдавать старый sitemap
Причина обычно в кэше страницы, серверном кэше или CDN. Очистите все уровни кэширования и проверьте XML напрямую. Если у вас включён объектный кэш, он тоже может удерживать старую структуру.
В индексе остались старые URL
Это нормально: удаление из sitemap не удаляет URL из индекса мгновенно. Если страница больше не нужна, дополнительно проверьте её статус, canonical, noindex и внутренние ссылки. Sitemap — это сигнал для обхода, а не кнопка удаления из поиска.
Код добавили в тему и забыли про обновление
Если правка критична для SEO, лучше вынести её в мини-плагин или MU-plugin. Тогда смена темы не сломает логику sitemap.
Практика по безопасности и производительности
Фильтры sitemap сами по себе лёгкие, но проблема обычно в том, что вместе с ними начинают править и другие SEO-настройки. Не смешивайте всё в один большой файл functions.php. Для точечных задач лучше отдельный мини-плагин: так проще откатить изменения и не потерять их при обновлении темы.
Если sitemap большой, а сайт работает на слабом хостинге, проверьте ещё и генерацию кэша. Иногда тяжёлый sitemap создаёт лишнюю нагрузку не на выдачу, а на саму админку и cron-задачи. В таком случае полезно убрать из карты всё, что не даёт поисковую ценность: черновики, служебные CPT, пустые архивы и внутренние таксономии.
Для сайтов с большим количеством технических страниц лучше держать правило простым: в sitemap остаётся только то, что вы готовы показывать в поиске и поддерживать как часть публичной структуры сайта. Всё остальное должно быть исключено осознанно, а не по принципу «пусть будет».