Если в XML sitemap попадают страницы поиска, архивы с тонким контентом, служебные URL или дубли пагинации, поисковик получает лишние сигналы. На небольшом сайте это быстро превращается в шум: в отчётах Search Console видны URL, которые не должны индексироваться, а карта сайта перестаёт помогать, потому что в ней смешаны полезные и мусорные адреса.
Задача здесь не в том, чтобы «почистить sitemap вообще», а в том, чтобы оставить в нём только те URL, которые вы реально хотите продвигать и обновлять через поисковые системы.
Когда проблема уже есть и как её распознать
Обычно всё видно по трём признакам:
- в XML sitemap есть URL с параметрами, архивы автора, теги без контента или страницы внутреннего поиска;
- в Search Console появляются URL с пометками «не найдено», «альтернативная страница с правильным каноническим тегом» или «исключено по тегу noindex»;
- после публикации новых материалов карта сайта разрастается, но полезных страниц в ней не становится больше.
Проверка начинается с самой карты сайта. Откройте её в браузере и посмотрите, какие типы URL туда попадают. Если у вас установлен SEO-плагин, проверьте его настройки: часто именно там включены архивы, теги, авторы, медиа-страницы и другие разделы, которые не должны попадать в sitemap по умолчанию.
Что именно нужно исключать
Набор зависит от структуры сайта, но чаще всего из sitemap убирают:
- страницы внутреннего поиска;
- архивы автора на сайтах с одним автором;
- пустые или почти пустые рубрики и метки;
- страницы пагинации, если они не несут самостоятельной ценности;
- медиа-attachment страницы;
- служебные страницы: политика, корзина, оформление заказа, личный кабинет — если они не должны ранжироваться.
Как исключить URL из sitemap: три рабочих подхода
Есть три нормальных варианта: через SEO-плагин, через фильтры WordPress или через комбинацию обоих способов. Выбор зависит от того, насколько у вас сложная логика и есть ли доступ к коду темы или мини-плагина.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Нужно быстро убрать типовые архивы и таксономии | Без кода, проще поддерживать | Не всегда хватает гибкости |
| Фильтры WordPress | Нужны точечные исключения по условиям | Точный контроль, можно привязать к логике сайта | Нужно аккуратно тестировать |
| Комбинация | Часть URL убирается настройками, часть — кодом | Гибко и прозрачно | Важно не задублировать правила |
Способ 1. Убрать лишние типы URL в настройках SEO-плагина
Если у вас уже стоит плагин для SEO, сначала проверьте его разделы, связанные с индексированием и XML sitemap. В большинстве случаев можно отключить:
- архивы авторов;
- архивы дат;
- метки;
- медиа-страницы;
- отдельные типы записей и таксономии.
Это самый безопасный путь для типовых сайтов. Но если проблема точечная, например нужно убрать только страницы с определённым шаблоном или конкретной рубрикой, настройками плагина вы можете не обойтись.
Способ 2. Исключить записи и страницы через фильтр wp_sitemaps_posts_query_args
Если нужно убрать из sitemap отдельные записи или страницы по признаку, используйте фильтр wp_sitemaps_posts_query_args. Он позволяет изменить аргументы запроса, который WordPress использует для генерации карты сайта.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['post__not_in'] = array( 123, 456 );
}
if ( 'page' === $post_type ) {
$args['post__not_in'] = array( 789 );
}
return $args;
}, 10, 2 );Такой код удобно держать в мини-плагине или в functions.php дочерней темы. Но если сайт живой и тема может меняться, мини-плагин надёжнее.
Способ 3. Исключить таксономии через wp_sitemaps_taxonomies
Если в sitemap попадают рубрики или метки, которые не должны индексироваться, можно отключить их на уровне генерации карты сайта.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
if ( isset( $taxonomies['category'] ) ) {
// Оставляем рубрики только если они реально нужны в поиске.
// Иначе можно убрать и их.
// unset( $taxonomies['category'] );
}
return $taxonomies;
} );Этот вариант полезен, когда проблема не в отдельных страницах, а в структуре архива. Например, у вас десятки меток с одним постом в каждой, и они только засоряют sitemap.
Пошаговое решение для типового сайта
Если нужен практический порядок действий, я бы делал так:
- Открыть XML sitemap и выписать лишние URL по типам: страницы, записи, таксономии, медиа.
- Проверить, не отключается ли этот тип URL в SEO-плагине без кода.
- Если настройки не хватает — добавить фильтр для конкретного типа записей или таксономии.
- Очистить кэш сайта и кэш CDN, если он есть.
- Переотправить sitemap в Search Console и дождаться повторной обработки.
Если у вас несколько sitemap-файлов, проверьте не только основной индекс, но и вложенные карты. Частая ошибка — убрать URL из одной карты, но оставить их в другой через отдельный тип записи или таксономию.
Как проверить, что исключение сработало
Проверка должна быть не «на глаз», а по шагам.
- Откройте sitemap в браузере и убедитесь, что нужный URL больше не присутствует в XML.
- Проверьте исходный код страницы, если sitemap генерируется плагином и кэшируется.
- В Search Console отправьте sitemap на повторное сканирование.
- Если URL был в индексе, проверьте его статус через проверку URL: он может ещё какое-то время отображаться в старом состоянии, это нормально.
- Очистите серверный кэш, объектный кэш и кэш CDN, если они используются.
Если URL всё ещё виден в карте сайта после правок, почти всегда причина одна из трёх: вы изменили не тот фильтр, карта сайта отдаётся из кэша или SEO-плагин генерирует собственный sitemap поверх стандартного WordPress.
Частые ошибки и как их исправить
Отключили noindex, но URL остался в sitemap
noindex и исключение из sitemap — это разные вещи. Страница может быть закрыта от индексации, но всё равно попадать в карту сайта. Если задача именно убрать URL из sitemap, нужно менять генерацию карты сайта, а не только мета-тег robots.
Удалили URL из sitemap, но он продолжает индексироваться
Это нормально для уже известных поисковику страниц. Исключение из sitemap не удаляет страницу из индекса мгновенно. Если URL больше не нужен, проверьте также noindex, canonical и внутренние ссылки на него.
Сломали sitemap после обновления плагина
Такое бывает, если правки были внесены прямо в файлы плагина. После обновления они исчезнут. Правильный вариант — мини-плагин или дочерняя тема, а не редактирование исходников.
Убрали слишком много страниц
Иногда в sitemap по ошибке отключают целый тип записей, который реально нужен для поиска. Перед выкладкой проверьте, какие URL должны остаться: статьи, важные страницы, нужные рубрики, посадочные страницы.
Безопасность и производительность: что учесть
Если sitemap у вас генерируется на лету и сайт большой, лишние фильтры и сложные условия могут добавить нагрузку. Не стоит строить логику на тяжёлых запросах к базе при каждом открытии карты сайта. Лучше исключать URL по заранее понятным признакам: ID, тип записи, таксономия, статус.
Для сайта с частыми изменениями полезно держать правила исключения в одном месте. Это снижает риск, что один плагин будет скрывать URL от индексации, а другой — снова добавлять их в sitemap.
Если вам нужно не только убрать дубли из sitemap, но и навести порядок в служебных страницах, архивных URL и настройках индексации, удобно смотреть на комплексные инструменты вроде Clearfy Pro: он закрывает часть типовых задач по SEO и чистке сайта. Ссылка на продукт: https://wpshop.ru/plugins/clearfy.
Мини-чек-лист перед публикацией изменений
- Проверил, какой именно sitemap используется: WordPress core или SEO-плагин.
- Убедился, что исключение сделано в коде или настройках, а не в файлах плагина.
- Очистил кэш сайта и CDN.
- Проверил sitemap в браузере после очистки кэша.
- Отправил карту сайта на повторную обработку в Search Console.
- Проверил, не остались ли внутренние ссылки на исключённые URL.
Если после этого лишние страницы всё ещё появляются в карте сайта, значит, у вас либо дублирующая генерация sitemap, либо конфликт между SEO-плагином и кастомным кодом. В таком случае проще сначала отключить один источник генерации, а потом уже добавлять точечные исключения.