Если в XML sitemap попадают страницы, которые не должны участвовать в индексации, поисковик тратит краулинговый бюджет на мусорные URL. На практике это часто служебные страницы, внутренние архивы, результаты поиска по сайту, страницы пагинации, которые не нужны в выдаче, или отдельные типы записей, созданные плагином и не предназначенные для SEO.
Задача здесь не в том, чтобы «выключить sitemap целиком», а в том, чтобы оставить в карте сайта только те URL, которые реально должны индексироваться. Ниже — рабочие варианты для WordPress: через код, через настройки плагинов и через проверку результата.
Когда sitemap нужно чистить, а не отключать
Полностью отключать XML sitemap имеет смысл редко. Обычно проблема в том, что карта сайта автоматически включает:
- служебные страницы плагинов;
- архивы авторов на небольшом сайте без редакционной структуры;
- таксономии без контента;
- страницы поиска и фильтров, если они вообще попали в sitemap через сторонний плагин;
- черновые или технические типы записей, которые не должны индексироваться.
Если у вас уже настроены canonical и noindex для дублей, но sitemap всё равно раздувается, это отдельная проблема. Поисковик видит URL в карте сайта как потенциально важные, и лучше не подсовывать ему лишнее.
Диагностика: что именно попало в XML sitemap
Сначала нужно понять источник. В WordPress sitemap может генерировать ядро, SEO-плагин или отдельный плагин для кастомных типов записей. Это важно: править нужно не «всё подряд», а конкретный генератор.
Проверьте, кто отдаёт sitemap
Откройте в браузере /wp-sitemap.xml — это стандартный sitemap WordPress. Если URL другой, например /sitemap_index.xml, скорее всего карту сайта генерирует SEO-плагин. Дальше посмотрите, какие разделы внутри sitemap вызывают вопросы: posts, pages, categories, tags, authors, custom post types.
Если проблема в конкретном типе записей, проверьте его регистрацию в коде темы или плагина. Часто там уже есть параметры, которые можно использовать для исключения из sitemap и из поиска.
Что искать в админке и в коде
Для диагностики полезно проверить:
- какие post type зарегистрированы с
publicиpublicly_queryable; - есть ли у типа записей флаг
exclude_from_search; - не создаёт ли плагин отдельный sitemap для своих сущностей;
- не включены ли в карту сайта архивы таксономий, которые пустые или технические.
Если у вас есть доступ к файлам, проще всего найти регистрацию типа записей через register_post_type() и посмотреть аргументы.
Пошаговое решение через код
Если sitemap генерирует ядро WordPress, можно исключить конкретные типы записей и таксономии фильтрами. Это самый предсказуемый способ, потому что логика остаётся в коде и не зависит от интерфейса плагина.
1. Уберите ненужный post type из sitemap
Ниже пример, который исключает технический тип записей internal_note из XML sitemap ядра WordPress:
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['internal_note'] );
return $post_types;
} );Такой код можно добавить в functions.php дочерней темы или в собственный мини-плагин. Если тип записей создаёт плагин, лучше держать правку рядом с ним, а не в теме.
2. Исключите таксономию из sitemap
Для ненужной таксономии используйте фильтр wp_sitemaps_taxonomies:
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
return $taxonomies;
} );Это полезно, если теги на сайте пустые, дублируют рубрики или не дают поиску ничего нового. Но перед удалением проверьте, не используются ли они как навигационный слой для пользователей.
3. Спрячьте отдельные записи из sitemap точечно
Если нужно убрать не весь тип, а только отдельные записи, используйте фильтр wp_sitemaps_posts_query_args. Например, исключить записи с определённым мета-полем:
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' !== $post_type ) {
return $args;
}
$args['meta_query'] = array(
array(
'key' => '_exclude_from_sitemap',
'value' => '1',
'compare' => '!='
)
);
return $args;
}, 10, 2 );Этот вариант удобен, если редактор или плагин помечает записи как технические. Но не перегружайте sitemap сложными условиями: чем проще логика, тем меньше сюрпризов при обновлениях.
Если sitemap делает SEO-плагин
У Yoast SEO, Rank Math и похожих плагинов логика исключения обычно настраивается в интерфейсе. Это нормально, если вам нужно убрать целый тип записей, таксономию или архив. Но если нужен точечный контроль, код всё равно надёжнее.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки плагина | Нужно быстро убрать целый раздел | Меньше гибкости для точечных исключений |
| Фильтры WordPress | Нужен контроль на уровне кода | Требует поддержки в теме или плагине |
| Отключить sitemap целиком | Редкий случай, когда карта сайта не нужна | Можно ухудшить индексацию важных URL |
Если у вас уже стоит SEO-плагин, не дублируйте одну и ту же логику в нескольких местах. Сначала проверьте, не исключает ли плагин нужный раздел сам, а потом уже добавляйте фильтры.
Чек-лист перед публикацией изменений
- Проверьте, какой именно sitemap используется: ядро WordPress или SEO-плагин.
- Составьте список URL, которые нужно убрать.
- Убедитесь, что эти URL не нужны для внутренней навигации и поиска.
- Добавьте исключение через фильтр или настройку плагина.
- Очистите кеш сайта и CDN, если они есть.
- Переотправьте sitemap в Google Search Console и Яндекс Вебмастер.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. Откройте sitemap в браузере и убедитесь, что исключённые URL исчезли из списка. Затем проверьте исходный код страницы sitemap: там не должно быть нужного вам URL.
Дальше зайдите в Search Console и посмотрите, обновился ли список обнаруженных страниц. Если URL уже был в индексе, его удаление из sitemap не удалит его мгновенно из поиска, но поисковик перестанет получать его как рекомендованный для обхода.
Если вы исключали записи по мета-полю или условию, проверьте несколько объектов вручную: одна запись должна попасть в sitemap, другая — нет. Иначе легко промахнуться с логикой фильтра.
Частые ошибки и как их исправить
Отключили не тот sitemap
Иногда правят /wp-sitemap.xml, а на сайте фактически работает /sitemap_index.xml от SEO-плагина. В этом случае изменения в ядре не дадут эффекта. Решение простое: сначала определить источник генерации, потом вносить правки.
Скрыли URL из sitemap, но не закрыли его от индексации
Если страница всё ещё доступна по прямой ссылке и не помечена как noindex, она может продолжать индексироваться. Sitemap — это подсказка, а не запрет. Для технических страниц обычно нужен и sitemap cleanup, и корректная мета-логика.
Сломали важные архивы
Частая ошибка — убрать из sitemap таксономию, которая реально даёт трафик. Перед удалением проверьте статистику и структуру сайта. Если архив полезен пользователям и поиску, его лучше оставить.
Добавили код в тему без учёта обновлений
Если правка нужна надолго, лучше вынести её в мини-плагин или mu-plugin. Тогда она не исчезнет после смены темы и не потеряется при обновлении.
Практические советы по безопасности и производительности
Не делайте sitemap слишком умным. Чем больше условий и внешних зависимостей, тем выше шанс, что при обновлении плагина или смене структуры сайта карта начнёт отдавать не то, что нужно. Для производительности это тоже важно: простые фильтры работают предсказуемее.
Если на сайте много технических сущностей, имеет смысл отдельно проверить, не создают ли они лишнюю нагрузку на генерацию sitemap. Иногда проще отключить ненужный post type на уровне регистрации через exclude_from_search и publicly_queryable, чем потом вычищать его из нескольких мест.
Для сайтов, где много редакторов и контента, удобно держать правила в одном месте: либо в SEO-плагине, либо в собственном небольшом плагине. Так проще объяснить команде, почему одни URL попадают в sitemap, а другие нет.
Если нужен более широкий контроль над дублями, индексируемостью и чисткой технических URL, посмотрите на Clearfy Pro: у него есть инструменты для удаления лишнего и настройки SEO-логики без ручного разбрасывания по теме.