Ситуация типовая: в sitemap начинают попадать служебные страницы, тестовые записи, архивы с мусорным трафиком или дубли, а потом это всплывает в Google Search Console как «Просканировано, но не проиндексировано» или как лишние URL в отчётах. Сам по себе sitemap не гарантирует индексацию, но он сильно влияет на то, что поисковик будет обходить в первую очередь. Поэтому задача не в том, чтобы «почистить карту сайта ради красоты», а в том, чтобы оставить в ней только те URL, которые реально должны участвовать в обходе и ранжировании.
Когда sitemap нужно чистить, а когда проблема в другом
Если в XML sitemap попали страницы, которые вы не хотите видеть в поиске, сначала проверьте, что именно не так. Иногда проблема не в карте сайта, а в шаблоне, который создаёт дубли: архивы автора, теги, пагинация, страницы вложений, результаты поиска по сайту, технические страницы плагинов. В других случаях URL уже закрыт от индексации, но продолжает оставаться в sitemap, и это создаёт противоречивые сигналы.
Признаки, что дело именно в sitemap
- URL есть в XML sitemap, но не должен участвовать в поиске.
- В Search Console появляются лишние служебные страницы среди обнаруженных URL.
- После удаления страницы из контента она всё ещё висит в карте сайта из-за кэша или настроек плагина.
- У вас несколько источников sitemap: ядро WordPress, SEO-плагин и отдельный плагин для карт сайта.
Что проверить до правки
- Кто генерирует sitemap: WordPress core, Yoast SEO, Rank Math, другой SEO-плагин или кастомный код.
- Не включён ли кэш на уровне плагина, сервера или CDN.
- Нет ли у страницы статуса
noindex, но при этом она всё ещё присутствует в sitemap. - Не дублируется ли sitemap по разным адресам, например через старый плагин и новый SEO-модуль.
Как исключить страницу из XML sitemap в WordPress
Самый надёжный путь зависит от того, чем именно у вас генерируется sitemap. Если используется SEO-плагин, лучше исключать URL через его интерфейс или штатные фильтры. Если карта сайта собирается кодом темы или кастомным плагином, правка делается на уровне массива URL перед выводом.
Вариант 1: через настройки SEO-плагина
У большинства SEO-плагинов есть настройка для исключения отдельных записей, страниц, рубрик или типов контента из sitemap. Это предпочтительный вариант, потому что он не ломается при обновлениях и не требует ручной фильтрации HTML/XML.
Проверяйте не только саму страницу, но и тип контента. Частая ошибка — убрать одну запись, но оставить весь тип page или post в карте сайта, из-за чего проблема возвращается при создании новых материалов.
Вариант 2: через фильтр WordPress sitemap
Если вы используете встроенный sitemap WordPress, можно исключить конкретные записи через фильтр wp_sitemaps_posts_query_args или убрать целый тип контента через wp_sitemaps_post_types. Ниже пример, как исключить несколько ID из sitemap для записей.
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' !== $post_type ) {
return $args;
}
$excluded_ids = array( 12, 34, 56 );
if ( empty( $args['post__not_in'] ) ) {
$args['post__not_in'] = array();
}
$args['post__not_in'] = array_merge( $args['post__not_in'], $excluded_ids );
return $args;
}, 10, 2 );
Этот способ подходит, если вам нужно убрать из sitemap конкретные страницы, но оставить тип контента целиком. Для массового исключения архивов или служебных страниц лучше работать на уровне типа контента или таксономии, а не собирать список ID вручную.
Вариант 3: исключить целый тип контента
Если у вас есть кастомный тип записей, который не должен попадать в sitemap, его можно убрать фильтром wp_sitemaps_post_types. Это удобно для внутренних сущностей: логов, технических карточек, временных материалов.
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['internal_note'] );
unset( $post_types['landing_draft'] );
return $post_types;
} );
Сравнение подходов: плагин, код, компромисс
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Если sitemap генерирует Yoast, Rank Math или аналог | Безопасно для обновлений, не требует правки кода | Не всегда удобно для точечных исключений |
| Фильтры WordPress | Если нужен контроль на уровне кода | Гибко, можно исключать ID, типы и архивы | Нужно тестировать после обновлений темы и плагинов |
| Отключение sitemap у лишнего плагина | Если карта сайта дублируется | Убирает конфликт источников | Можно случайно отключить нужный sitemap |
Пошаговое решение без лишних рисков
Если у вас уже есть лишние URL в sitemap, действуйте по порядку. Это уменьшает шанс, что вы исправите один симптом и тут же получите другой.
- Определите источник sitemap: откройте
/sitemap.xmlи проверьте, кто его генерирует. - Составьте список лишних URL: служебные страницы, дубли, тестовые записи, архивы.
- Исключите их в настройках SEO-плагина или через фильтр.
- Очистите кэш сайта, сервера и CDN, если он есть.
- Проверьте XML sitemap в браузере и убедитесь, что URL исчезли.
- Отправьте sitemap на повторную проверку в Search Console, если это нужно для контроля.
Если нужно убрать страницы вложений
Страницы вложений — частый источник мусора. Они могут существовать как отдельные URL без полезного контента. Если у вас нет осознанной стратегии по медиа-страницам, обычно их либо редиректят на файл/родительскую запись, либо исключают из sitemap и закрывают от индексации. Но не смешивайте эти задачи: исключение из sitemap не удаляет URL из индекса автоматически.
Как проверить, что решение сработало
Проверка должна быть не на глаз, а по факту. Откройте XML sitemap и убедитесь, что нужного URL там нет. Затем проверьте исходный код страницы и заголовки ответа, если вы меняли не только sitemap, но и индексацию.
- Откройте
/sitemap.xmlили конкретный дочерний sitemap и найдите URL поиском по странице. - Если URL был в кэше, обновите страницу в режиме инкогнито или через
curl. - Проверьте, не остался ли URL в другом sitemap, если у вас несколько генераторов карт сайта.
- В Search Console посмотрите, исчез ли URL из отчёта по обнаруженным страницам после переобхода.
curl -I https://example.com/sitemap.xml
Если вы меняли код, полезно проверить и сам XML на наличие нужных элементов. Для этого достаточно открыть адрес sitemap в браузере или выгрузить его через curl и убедиться, что URL больше не возвращается в ответе.
Частые ошибки и как их исправить
URL убрали из sitemap, но он всё ещё индексируется
Это нормально: исключение из sitemap не равно удалению из индекса. Если страница не должна ранжироваться, дополнительно проверьте noindex, canonical и внутренние ссылки на неё. Иногда URL продолжает жить только потому, что на него ведут ссылки из меню, хлебных крошек или старых материалов.
После правки URL не исчезает из карты сайта
Чаще всего виноват кэш. Это может быть кэш плагина, объектный кэш, серверный кэш или CDN. Ещё один частый случай — вы правите один sitemap, а в выдаче смотрите другой, сгенерированный отдельным плагином.
Исключили не тот тип контента
Если убрать тип записи целиком, можно случайно вычистить из sitemap все полезные материалы. Перед изменением проверьте, какие шаблоны и сущности используют этот post type. Для кастомных типов лучше сначала протестировать на staging-копии.
Сломали sitemap из-за неправильного кода
Ошибка в фильтре может привести к пустому sitemap или PHP notice. Поэтому не вставляйте код в functions.php без понимания, как он будет жить после обновления темы. Надёжнее использовать дочернюю тему или небольшой mu-plugin, если у вас есть такой процесс.
Практика безопасности и производительности
Чистый sitemap помогает не только SEO, но и техподдержке: меньше шума в отчётах, проще анализировать обход. Но не стоит превращать карту сайта в ручной список исключений, который никто не сопровождает. Если у вас много служебных страниц, лучше системно решить вопрос на уровне генерации контента и шаблонов.
Для больших сайтов полезно держать единый источник правды: либо SEO-плагин, либо встроенный sitemap WordPress, либо собственный генератор. Когда несколько решений одновременно создают XML, вы получаете дубли, конфликтующие каноникалы и лишнюю нагрузку на обход.
Если нужен более широкий набор инструментов для чистки дублей, служебных URL и технической SEO-оптимизации, можно посмотреть Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином важно понимать, какие URL вы исключаете и почему.
Мини-чек-лист перед публикацией изменений
- Проверен источник sitemap.
- Список исключаемых URL зафиксирован.
- Код или настройки применены в одном месте, без дублирования.
- Кэш очищен.
- URL действительно исчез из XML sitemap.
- В Search Console нет нового потока ошибок после переобхода.
Если после всех правок sitemap остаётся нестабильным, ищите не в XML, а в архитектуре сайта: лишние шаблоны, дубли архивов, конфликт SEO-плагинов или неправильную генерацию служебных страниц. Именно там обычно и начинается проблема.