Ситуация типовая: сайт уже работает, но в XML sitemap попадают служебные или нерелевантные типы записей — например, attachment, внутренние документы, черновые CPT, страницы фильтров или контент, который не должен индексироваться. Если просто выключить sitemap целиком, поисковику станет хуже. Если ничего не делать, в карту сайта продолжат попадать URL, которые только шумят в обходе.
Ниже — рабочий способ убрать из sitemap только нужные типы записей, проверить, что WordPress действительно перестал их отдавать, и не сломать остальную индексацию.
Когда это нужно и как понять, что проблема именно в sitemap
Сначала проверьте, что проблема не в robots.txt и не в мета-тегах noindex. XML sitemap — это не запрет на индексацию, а подсказка для поисковика. Если в карте сайта есть мусор, поисковик всё равно может тратить на него ресурсы обхода.
Признаки, что sitemap пора чистить
- в Search Console в отчёте по sitemap видны URL, которые не должны индексироваться;
- в sitemap попадают вложения медиафайлов, архивы служебных CPT или тестовые записи;
- после публикации новых материалов поисковик долго не видит нужные страницы, а в карте сайта много лишнего;
- в индексе появляются страницы, которые вы не планировали продвигать, но они доступны и перечислены в sitemap.
Если у вас уже есть плагин, который управляет SEO-настройками, сначала проверьте его интерфейс. Многие задачи решаются без кода. Если же нужен точечный контроль, проще и надёжнее отключить конкретные типы записей через фильтр WordPress.
Диагностика: что именно отдаёт WordPress в XML sitemap
В WordPress core XML sitemap включён по умолчанию начиная с 5.5. Он строится на основе публичных типов записей и таксономий. Это значит, что если CPT зарегистрирован как public и show_in_rest здесь ни при чём, он может попасть в карту сайта автоматически.
Проверьте список типов записей на сайте:
wp post-type list --fields=name,public,show_in_rest,has_archiveЕсли WP-CLI недоступен, откройте исходный код sitemap и посмотрите, какие разделы там есть. Обычно это что-то вроде /wp-sitemap-posts-post-1.xml, /wp-sitemap-posts-page-1.xml и отдельные карты для CPT.
Полезно также проверить, не создаёт ли sitemap плагин SEO. Если активен Yoast, Rank Math или похожее решение, core sitemap может быть отключён или заменён. Тогда править нужно именно настройки плагина, а не фильтры WordPress core.
Пошаговое решение через фильтр wp_sitemaps_post_types
Самый чистый вариант — исключить ненужные типы записей через фильтр wp_sitemaps_post_types. Он позволяет изменить список пост-типов, которые WordPress включает в sitemap.
Добавьте код в functions.php дочерней темы или в небольшой mu-plugin. Для продакшена mu-plugin обычно надёжнее: он не зависит от темы и не исчезнет после обновления.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
$exclude = array( 'attachment', 'event', 'landing' );
foreach ( $exclude as $post_type ) {
if ( isset( $post_types[ $post_type ] ) ) {
unset( $post_types[ $post_type ] );
}
}
return $post_types;
} );В этом примере из sitemap убираются вложения и два пользовательских типа записей: event и landing. Названия замените на свои реальные slug.
Если нужно отключить только один тип, а не весь раздел
Иногда удобнее не собирать список исключений вручную, а оставить в sitemap только то, что действительно нужно. Тогда логика будет обратной: вы явно задаёте разрешённые типы.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
$allowed = array( 'post', 'page' );
return array_intersect_key( $post_types, array_flip( $allowed ) );
} );Такой подход полезен на сайтах, где много CPT, но индексироваться должны только статьи и страницы. Минус очевидный: если позже добавите новый важный тип записей, его придётся включать вручную.
Сравнение подходов: код, плагин или настройка SEO-плагина
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Фильтр WordPress | Нужен точечный контроль над core sitemap | Без лишних зависимостей, прозрачно, быстро | Нужно понимать, какие CPT реально используются |
| SEO-плагин | Sitemap уже управляется плагином | Удобно для редактора, часто есть интерфейс | Логика зависит от конкретного плагина и его настроек |
| robots.txt | Нужно закрыть обход, но не менять sitemap | Просто добавить директиву | Не убирает URL из карты сайта и не решает шум в sitemap |
Если у вас уже стоит плагин уровня Clearfy Pro, иногда проще использовать его SEO-настройки для чистки sitemap и дублей. Но если задача точечная и нужна предсказуемость, код через фильтр обычно надёжнее. Подход зависит от того, кто потом будет сопровождать сайт.
Проверка результата после внедрения
После добавления кода не ограничивайтесь визуальной проверкой главной страницы sitemap. Нужно убедиться, что WordPress перестал генерировать разделы для исключённых типов.
- Откройте
/wp-sitemap.xmlи проверьте список ссылок на карты. - Перейдите в конкретную карту, например
/wp-sitemap-posts-post-1.xml. - Убедитесь, что исключённый тип записей больше не присутствует в списке.
- Если используете Search Console, отправьте sitemap на повторную обработку.
- Проверьте, не остались ли старые URL в индексе отдельно — это уже вопрос переобхода и удаления, а не генерации sitemap.
Для быстрой проверки можно использовать curl:
curl -s https://example.com/wp-sitemap.xml | grep -E 'attachment|event|landing'Если команда ничего не возвращает, это хороший знак. Но помните: отсутствие URL в sitemap не означает мгновенное исчезновение из индекса. Поисковику всё равно нужно время на переобход.
Частые ошибки и как их исправить
Ошибка 1. Отключили sitemap целиком вместо одного типа
Такое часто случается, когда пытаются решить проблему через плагин и находят только общий переключатель. В результате поисковик теряет полезные URL. Исправление простое: верните sitemap и уберите только лишний тип через фильтр или точечную настройку SEO-плагина.
Ошибка 2. Скрыли URL в robots.txt, но оставили их в sitemap
Это не одно и то же. robots.txt может ограничить обход, но URL всё равно останется в карте сайта. Если цель — убрать шум из sitemap, править нужно генератор карты сайта.
Ошибка 3. Не учли плагин SEO
Если sitemap отдаёт Yoast, Rank Math или другой SEO-плагин, core-фильтр WordPress может вообще не сработать. В этом случае сначала проверьте, кто именно генерирует карту сайта, и меняйте настройки там.
Ошибка 4. Использовали неправильный slug CPT
В коде нужно указывать реальный ключ типа записи, а не его название в админке. Если сомневаетесь, посмотрите регистрацию CPT в коде темы или плагина, либо выведите список через WP-CLI.
Что ещё стоит проверить, чтобы не получить лишние URL
Если вы чистите sitemap, имеет смысл заодно проверить соседние источники дублей и мусора. Часто проблема не в одном типе записей, а в связке: вложения, архивы, параметры фильтров, служебные страницы, тестовые CPT.
- уберите из индексации вложения, если они не нужны как отдельные страницы;
- проверьте, не создаёт ли тема или плагин отдельные архивы для служебных сущностей;
- сверьте sitemap с реальной структурой сайта, а не только с тем, что видно в админке;
- после правок очистите кеш страниц и кеш объекта, если он есть;
- если используется CDN, дождитесь обновления кеша и проверьте ответ сервера без него.
Для сайтов с большим количеством контента лучше вносить такие изменения через отдельный mu-plugin и хранить список исключений в одном месте. Это проще сопровождать и легче откатить, если структура сайта изменится.
Практический минимум по безопасности и производительности
Сам фильтр лёгкий и почти не влияет на производительность. Но проблемы обычно возникают не в нём, а в способе внедрения. Не правьте код напрямую в родительской теме, если сайт живой и тема обновляется. Используйте дочернюю тему или mu-plugin.
Если на сайте несколько администраторов, зафиксируйте, кто отвечает за sitemap: разработчик, SEO-специалист или редактор. Иначе через пару недель кто-то включит новый CPT, а карта сайта снова начнёт шуметь. Для таких задач полезно держать короткий чек-лист:
- проверить, какой плагин генерирует sitemap;
- сверить список публичных CPT;
- убедиться, что исключённые типы не нужны для поиска;
- проверить sitemap после очистки кеша;
- отправить обновлённую карту сайта в Search Console.
Если нужен более широкий контроль над дублями, индексируемыми страницами и чисткой технических URL, можно посмотреть в сторону инструментов вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какой именно механизм меняет sitemap и где это проверить вручную.