Если в sitemap попадают служебные записи, тестовые материалы, дубли архивов или контент, который не должен ускоренно индексироваться, это лучше исправить на уровне генерации карты сайта, а не через ручные костыли в robots.txt. В WordPress с core sitemap можно точечно исключать типы записей, а в SEO-плагинах — отключать отдельные сущности через настройки или фильтры. Ниже разберём, как понять, где именно источник проблемы, и как убрать лишнее без побочных эффектов.
Когда проблема действительно в sitemap
Сначала стоит убедиться, что поисковик видит именно лишние URL из карты сайта, а не просто нашёл их по внутренним ссылкам. Это разные сценарии, и лечатся они по-разному. Если URL есть в sitemap, но при этом не должен индексироваться, поисковик получает от вас прямой сигнал, что страница важна. Если же URL попал в индекс через ссылки, а в sitemap его нет, причина уже в структуре сайта или в старых внешних ссылках.
Что проверить в первую очередь
- Откройте
/wp-sitemap.xmlили sitemap, который отдаёт SEO-плагин. - Проверьте, какие именно типы записей и таксономии туда включены.
- Сравните список URL в sitemap с тем, что реально должно индексироваться.
- Посмотрите, нет ли в карте сайта черновиков, тестовых CPT, вложений, тегов без контента или служебных архивов.
Если у вас установлен SEO-плагин, сначала ищите настройку там. Если sitemap генерирует ядро WordPress, тогда проще и надёжнее использовать фильтры core, чем пытаться закрывать всё через robots.txt.
Как отключить тип записи из XML sitemap через код
В WordPress 5.5+ есть встроенный генератор sitemap. Для него можно отключить конкретный post type через фильтр wp_sitemaps_post_types. Это полезно, если у вас есть, например, CPT для внутреннего каталога, логов, тестовых страниц или любого контента, который не должен попадать в карту сайта.
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['internal_note'] );
unset( $post_types['test_page'] );
return $post_types;
} );Здесь важно не удалять тип записи вслепую. Если этот post type уже индексируется и приносит трафик, сначала проверьте аналитику и Search Console. Иначе можно случайно убрать из карты сайта рабочие страницы и замедлить их переобход.
Если нужно убрать только часть записей внутри типа
Когда тип записи нужен в sitemap, но из него надо исключить отдельные элементы, используйте фильтр wp_sitemaps_posts_query_args. Это уже точечная настройка на уровне запроса, а не грубое отключение всего типа.
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['post__not_in'] = array( 123, 456 );
}
return $args;
}, 10, 2 );Такой подход удобен для исключения конкретных записей: тестовых публикаций, дубликатов, страниц с устаревшими данными или материалов, которые уже закрыты от индексации по стратегии сайта.
Как отключить таксономии и архивы, которые не нужны в sitemap
Частая ошибка — оставлять в sitemap теги, пустые рубрики или технические таксономии. Они создают шум, раздувают карту сайта и могут тянуть за собой лишние обходы. Для core sitemap таксономии отключаются через фильтр wp_sitemaps_taxonomies.
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['internal_topic'] );
return $taxonomies;
} );Если у вас SEO-плагин, логика может отличаться, но принцип тот же: не пытайтесь закрывать таксономию только через noindex, если она вообще не должна участвовать в sitemap. Для поисковика это разные сигналы, и карта сайта здесь лишней быть не должна.
Сравнение подходов: плагин, код или компромисс
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Если sitemap генерирует Yoast, Rank Math или аналог | Быстро, без кода, удобно для редактора | Не всегда хватает точности для сложных CPT |
| Фильтры WordPress core | Если используется встроенный sitemap | Точечное управление, без лишних зависимостей | Нужен код и контроль после обновлений |
| Отключение через robots.txt | Только как вспомогательная мера | Просто добавить правило | Не убирает URL из sitemap и не решает причину |
Если задача техническая и повторяемая, код обычно надёжнее. Если сайт ведёт редактор без доступа к теме, проще использовать настройки плагина. Но смешивать оба подхода без понимания источника sitemap не стоит: потом сложно понять, где именно возник конфликт.
Диагностика после изменений
После правки нужно проверить не только сам XML, но и то, как сайт отдаёт карту поисковикам. Откройте sitemap в браузере и убедитесь, что лишние URL исчезли. Затем посмотрите заголовки ответа и убедитесь, что файл отдаётся с кодом 200 OK, а не с ошибкой или редиректом.
Дальше проверьте Search Console: карта сайта должна обновиться после повторной отправки или автоматического обхода. Если URL всё ещё отображаются в отчётах, это не всегда значит, что настройка не сработала. Иногда поисковик просто ещё не переобошёл карту сайта.
Чек-лист проверки
- Открывается правильный sitemap, а не старая версия из кэша.
- Из XML исчезли отключённые post type или таксономии.
- В sitemap нет URL, которые должны быть закрыты от индексации.
- Нет ошибок PHP в логах после добавления фильтров.
- Search Console видит актуальную карту сайта после переобхода.
Частые ошибки и как их исправить
Ошибка 1. Убрали URL из sitemap, но не закрыли страницу от индексации
Если страница уже доступна по внутренним ссылкам или внешним упоминаниям, одного удаления из sitemap может быть недостаточно. В этом случае нужен отдельный контроль индексации: noindex, корректные canonical или удаление страницы, если она больше не нужна.
Ошибка 2. Отключили целый post type, который приносит трафик
Иногда CPT кажется служебным только внутри админки, но на деле его страницы уже ранжируются. Перед удалением из sitemap проверьте статистику переходов и запросы в Search Console. Если страницы важны, лучше оставить тип в карте сайта и точечно исключить только лишние записи.
Ошибка 3. Правили не тот sitemap
На сайте с SEO-плагином может быть отключён core sitemap, а карта сайта генерируется плагином. В таком случае фильтры WordPress core не дадут эффекта. Сначала определите, какой URL реально отдаёт sitemap, и уже потом вносите изменения.
Ошибка 4. Сломали кэш и видят старую карту сайта
Если sitemap кэшируется на уровне плагина, сервера или CDN, изменения могут не отображаться сразу. После правки очистите кэш страницы, объектный кэш и CDN, если он есть. Иначе проверка будет ложноположительной.
Что делать, если sitemap генерирует SEO-плагин
У плагинов логика управления картой сайта обычно своя. В Yoast, Rank Math и похожих решениях проще всего сначала искать переключатели для типов записей, таксономий и архивов в интерфейсе. Если нужен более тонкий контроль, смотрите документацию конкретного плагина и используйте его фильтры, а не фильтры core WordPress.
Если на сайте уже есть лишние дубли, служебные страницы и мусорные архивы, имеет смысл навести порядок комплексно: убрать ненужные сущности из sitemap, отключить лишние архивы, проверить canonical и только потом смотреть на индексацию. Для такой задачи часто полезны плагины вроде Clearfy Pro, если нужен именно набор технических настроек без ручного разрастания кода, но применять их стоит только там, где они реально закрывают вашу задачу.
Как понять, что решение сработало
Рабочий результат выглядит просто: в sitemap больше нет лишних URL, поисковик получает актуальную карту сайта, а в Search Console не растёт число страниц, которые вы сознательно исключили из индексации. Если через несколько дней после обновления карта сайта всё ещё содержит старые записи, значит, правка не попала в тот слой, где реально генерируется XML, либо её перебивает кэш.
Для быстрой самопроверки удобно держать под рукой три точки контроля: сам XML, логи ошибок PHP и отчёты Search Console. Если все три совпадают, значит, отключение выполнено корректно и без побочных эффектов.