Если в XML sitemap попадают служебные записи, архивы, тестовые CPT или страницы, которые не должны индексироваться, поисковик получает лишний шум. На небольшом сайте это обычно не критично, но на проекте с кастомными типами записей и плагинами карта сайта быстро превращается в свалку URL. В итоге в индексе оказываются страницы, которые вы не планировали продвигать, а в отчётах Search Console появляются лишние обходы.
Ниже — практический сценарий: как найти источник лишних URL, отключить их в sitemap и проверить, что WordPress больше не отдаёт их поисковым системам.
Когда проблема действительно в sitemap
Сначала стоит убедиться, что речь именно о карте сайта, а не о дублях из архивов, фильтров или пагинации. Типичная картина такая: в /sitemap_index.xml видны разделы, которые вы не хотите индексировать, а в самом XML есть записи из служебного CPT, вложений, черновых страниц или таксономий без ценности для поиска.
Что проверить в первую очередь
- Откройте
/sitemap_index.xmlи посмотрите, какие карты вообще подключены. - Проверьте отдельную карту, например
/post-sitemap.xmlили/page-sitemap.xml. - Сравните список URL с тем, что реально должно индексироваться.
- Посмотрите, не создаёт ли SEO-плагин собственный sitemap поверх стандартного WordPress.
Если лишние URL появляются только в XML, а на сайте они закрыты от индексации, это всё равно не лучший вариант. Поисковик тратит обход на мусорные страницы, а вы теряете контроль над приоритетами индексации.
Диагностика: откуда WordPress берёт URL для sitemap
В WordPress XML sitemap встроен начиная с 5.5, но на практике его часто заменяет или дополняет SEO-плагин. Поэтому источник нужно определить до правок. Если у вас активен Yoast, Rank Math, AIOSEO или другой SEO-плагин, сначала проверьте его настройки. Если sitemap отдаёт сам WordPress, тогда уже имеет смысл править фильтры ядра.
У встроенного sitemap WordPress есть фильтры, через которые можно убрать отдельные типы записей, таксономии и пользователей. Для этого не нужно лезть в базу или переписывать шаблоны темы.
Быстрая проверка через код
Если вы работаете в теме или мини-плагине, сначала посмотрите, какие post type вообще зарегистрированы и какие из них публичные:
add_action('init', function () {
$post_types = get_post_types([], 'objects');
foreach ($post_types as $post_type) {
if (!empty($post_type->public)) {
error_log($post_type->name . ' | show_in_rest=' . (int) $post_type->show_in_rest);
}
}
});Это не готовое решение, а способ быстро понять, какие типы записей потенциально попадают в sitemap. Если видите служебный CPT с public или show_ui, но без реальной ценности для поиска, его стоит исключить.
Пошаговое решение для встроенного XML sitemap WordPress
Если sitemap генерирует ядро WordPress, самый надёжный путь — отключить ненужные типы через фильтры. Так вы не ломаете остальную логику и не трогаете публикацию контента.
1. Уберите ненужные типы записей из sitemap
Пример ниже исключает служебный CPT portfolio и вложения attachment. Названия замените на свои реальные post type.
add_filter('wp_sitemaps_post_types', function ($post_types) {
unset($post_types['portfolio']);
unset($post_types['attachment']);
return $post_types;
});Если нужно убрать сразу несколько типов, делайте это явно. Не полагайтесь на то, что тип «и так не должен попасть» — в sitemap он может появиться из-за настроек плагина или темы.
2. Исключите отдельные таксономии
Иногда проблема не в записях, а в рубриках, тегах или кастомных таксономиях без полезного контента. Для этого есть фильтр wp_sitemaps_taxonomies:
add_filter('wp_sitemaps_taxonomies', function ($taxonomies) {
unset($taxonomies['post_tag']);
unset($taxonomies['product_cat']);
return $taxonomies;
});Это особенно полезно, если теги на сайте создаются автоматически и не несут SEO-смысла. Но если таксономия нужна для навигации и даёт трафик, лучше не отключать её без анализа.
3. Спрячьте отдельные записи по ID
Если нужно убрать не весь тип, а только конкретные страницы, используйте фильтр wp_sitemaps_posts_query_args. Он позволяет исключить записи по ID.
add_filter('wp_sitemaps_posts_query_args', function ($args, $post_type) {
if ($post_type === 'page') {
$args['post__not_in'] = array(12, 34, 56);
}
return $args;
}, 10, 2);Этот вариант удобен для страниц «Спасибо», технических лендингов, внутренних инструкций или тестовых материалов, которые не должны попадать в карту сайта.
Если sitemap отдаёт SEO-плагин, а не ядро
Когда XML генерирует SEO-плагин, фильтры WordPress могут не сработать. Тогда сначала ищите настройки в самом плагине: обычно там можно отключить типы записей, таксономии, авторские архивы и медиа-страницы. Если интерфейс не даёт нужной точности, можно использовать встроенные фильтры конкретного плагина, но только после проверки документации именно вашей версии.
Практически это выглядит так: вы отключаете лишний post type в настройках SEO-плагина, а затем проверяете, исчез ли он из sitemap. Если нет — значит, карта генерируется не тем компонентом, который вы правите.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Нужно быстро убрать типы записей без кода | Не всегда есть точечный контроль |
| Фильтры WordPress | Используется встроенный sitemap ядра | Нужно править код |
| Мини-плагин | Нужна переносимость между темами | Чуть сложнее поддержка |
Как сделать правку безопасно
Не вносите такой код прямо в functions.php активной темы, если сайт уже в работе и тема может меняться. Лучше оформить это как маленький mu-plugin или отдельный плагин для технических правок. Тогда настройка не исчезнет после обновления темы.
Минимальный вариант mu-plugin:
<?php
/**
* Plugin Name: Sitemap Cleanup
*/
add_filter('wp_sitemaps_post_types', function ($post_types) {
unset($post_types['portfolio']);
unset($post_types['attachment']);
return $post_types;
});
add_filter('wp_sitemaps_taxonomies', function ($taxonomies) {
unset($taxonomies['post_tag']);
return $taxonomies;
});Файл положите в wp-content/mu-plugins/. Если папки нет, создайте её вручную. Такой подход удобен тем, что правка включается автоматически и не зависит от темы.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что URL действительно исчезли из XML и не отдаются поисковику как доступные для обхода.
- Откройте
/sitemap_index.xmlи проверьте список карт. - Проверьте конкретные URL из исключённых типов записей.
- Убедитесь, что в XML больше нет нужных вам записей.
- Если используется кэш, очистите его на уровне плагина и сервера.
- Переотправьте sitemap в Google Search Console, если это уместно для вашего процесса.
Полезно также проверить заголовки ответа и код страницы. Если запись должна быть скрыта полностью, одного удаления из sitemap недостаточно — она может оставаться доступной по прямой ссылке.
Что считать нормальным результатом
Нормально, если:
- в sitemap остались только нужные типы записей;
- служебные страницы исчезли из XML;
- карта сайта открывается без ошибок;
- поисковик больше не получает лишние URL через sitemap.
Если после правки карта сайта стала пустой или отдает 404, значит, фильтр применён слишком агрессивно или конфликтует с SEO-плагином.
Частые ошибки и как их исправить
Отключили не тот post type
Часто путают имя типа записи и его ярлык в админке. В фильтрах нужен именно системный ключ, например portfolio, а не название «Портфолио». Если сомневаетесь, посмотрите результат get_post_types() или документацию регистратора CPT.
Правка не сработала из-за SEO-плагина
Если sitemap генерирует не ядро WordPress, фильтры wp_sitemaps_post_types и wp_sitemaps_taxonomies могут не влиять на итоговый XML. В этом случае ищите настройки конкретного плагина или его фильтры.
Скрыли страницу из sitemap, но не закрыли от индексации
Это две разные задачи. Страница может не попадать в карту сайта, но оставаться доступной через внутренние ссылки или внешние переходы. Если URL не должен индексироваться вообще, проверьте noindex, каноникал и внутренние ссылки.
Забыли про кэш
После изменения sitemap старый XML может продолжать отдаваться из кэша. Очистите кэш плагина, серверный кэш и, если используется CDN, его слой тоже. Иначе вы будете проверять уже неактуальную версию.
Когда лучше не править кодом
Если на сайте часто меняются типы записей, а sitemap управляется SEO-плагином с понятным интерфейсом, проще использовать настройки. Код нужен там, где требуется точечный контроль, переносимость и предсказуемость. Для массовой SEO-чистки иногда удобнее отдельный технический плагин вроде Clearfy Pro, если вам нужен не только sitemap, но и отключение дублей, чистка служебных элементов и контроль индексации в одном месте. Ссылку имеет смысл смотреть только если этот набор задач действительно закрывает ваш сценарий: Clearfy Pro.
Но даже в этом случае не отключайте всё подряд. Сначала определите, какие URL реально вредят индексации, а какие просто кажутся лишними. В sitemap лучше держать только то, что вы готовы объяснить поисковику и пользователю.