Ситуация типовая: в XML sitemap попадают служебные страницы, архивы, результаты поиска, черновые таксономии или дубли, а потом это мешает поисковикам быстрее находить нужные URL. Сам sitemap сам по себе не гарантирует индексацию, но он влияет на приоритет обхода, поэтому мусор в карте сайта лучше убрать сразу.
Ниже разберём, как понять, что именно лишнее, чем отличается исключение из sitemap от запрета индексации и как сделать это без побочных эффектов для SEO и обновлений сайта.
Когда проблема действительно в sitemap
Не каждый URL, который вы видите в карте сайта, нужно удалять. Иногда это нормальные архивы записей, страницы рубрик или отдельные материалы, которые должны быть доступны для обхода. Проблема начинается, когда в sitemap попадают URL, которые не несут ценности для поиска или создают технический шум.
Что обычно стоит убрать
- служебные страницы поиска вида
?s=; - страницы авторов на сайтах с одним автором, если они дублируют блог;
- архивы дат, если они не используются как посадочные;
- внутренние страницы фильтров и параметров;
- черновые таксономии и пустые рубрики;
- медиа-вложения, если они индексируются отдельно и не нужны в выдаче.
Если вы уже закрывали дубли от индексации, но они всё равно присутствуют в sitemap, это не ошибка в логике запрета. Просто карта сайта продолжает отдавать URL, которые поисковик всё ещё может обходить. Для чистки sitemap это нужно решать отдельно.
Диагностика: что именно попало в карту сайта
Сначала откройте сам sitemap и проверьте, какие типы URL там есть. В WordPress это обычно /wp-sitemap.xml, если используется встроенная генерация. Если стоит SEO-плагин, адрес может быть другим, но логика проверки та же: смотрим список URL, а не только главную карту.
Полезно проверить три вещи:
- какие типы записей вообще включены в sitemap;
- какие таксономии отдаются в карту сайта;
- нет ли там URL, которые уже закрыты от индексации, но всё ещё доступны для обхода.
Если сайт большой, удобнее сначала выгрузить sitemap и найти лишние URL по шаблону. Например, через curl можно быстро посмотреть содержимое:
curl -s https://example.com/wp-sitemap.xml | lessДля проверки отдельных URL полезно смотреть заголовки ответа и мета-теги на странице. Если страница должна быть исключена из sitemap, но остаётся доступной для обхода, это нормально только в тех случаях, когда она нужна пользователю и поисковику, но не должна быть в карте сайта.
Как исключить страницы из XML sitemap: рабочие варианты
Есть три практических подхода: через плагин, через настройки SEO-плагина или кодом. Выбор зависит от того, насколько точечно нужно управлять картой сайта.
| Способ | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Нужно убрать целые типы записей или таксономий | Не всегда хватает точности |
| Код в теме или мини-плагине | Нужно исключить конкретные страницы по ID или типу | Требует поддержки кода |
| Плагин для техочистки | Нужно быстро убрать служебные URL без разработки | Меньше контроля над логикой |
Вариант 1. Исключить тип записи или таксономию через настройки
Если в sitemap попадает целый тип контента, например attachment или служебный custom post type, проще отключить его в настройках SEO-плагина или генератора sitemap. Это безопаснее, чем править код, если правило одинаковое для всех объектов типа.
Проверьте, нет ли в настройках раздела для XML sitemap, где можно отключить отдельные post types и taxonomy archives. После сохранения обновите sitemap и убедитесь, что нужный раздел исчез.
Вариант 2. Исключить конкретные страницы кодом
Если нужно убрать только несколько URL, удобнее использовать фильтр wp_sitemaps_posts_query_args для записей и wp_sitemaps_taxonomies_query_args для таксономий. Это работает с встроенным sitemap WordPress.
Пример: исключаем конкретные страницы по ID из sitemap записей:
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'page' !== $post_type ) {
return $args;
}
$args['post__not_in'] = array( 12, 34, 56 );
return $args;
}, 10, 2 );Если нужно убрать, например, только вложения, можно отключить их тип в sitemap целиком:
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
return $post_types;
} );Такой код лучше держать не в functions.php активной темы, а в небольшом mu-plugin или отдельном плагине сайта. Тогда он не пропадёт при смене темы.
Вариант 3. Убрать URL из sitemap через SEO-плагин
Если на сайте уже стоит SEO-плагин, проверьте его собственные настройки sitemap. У большинства решений можно отключить:
- отдельные типы записей;
- архивы авторов;
- таксономии;
- медиа-страницы;
- пустые или служебные разделы.
Это хороший путь, когда нужно управлять картой сайта без кастомного кода. Но если вы хотите убрать только несколько страниц, а не весь тип контента, код обычно точнее.
Пошаговое решение без лишнего риска
- Составьте список URL, которые не должны быть в sitemap.
- Определите, это отдельные страницы, целый post type или таксономия.
- Проверьте, не нужны ли эти URL для пользователей и внутренней навигации.
- Выберите способ: настройка плагина или код.
- Обновите sitemap и очистите кеш, если он есть.
- Проверьте, что URL исчезли из карты сайта, но нужные страницы остались доступными.
Если сайт использует кеширование страницы sitemap, после изменений обязательно сбросьте кеш на уровне плагина, сервера или CDN. Иначе вы можете смотреть на старую версию карты сайта и делать ложные выводы.
Как проверить, что исключение сработало
Проверка должна быть не визуальной, а технической. Откройте sitemap и убедитесь, что URL больше не присутствуют в XML. Затем проверьте ответ сервера и, если нужно, статус индексации в панели вебмастера.
- URL исчез из
/wp-sitemap.xmlили из sitemap SEO-плагина; - вложенные sitemap-файлы больше не содержат лишние ссылки;
- страница по-прежнему открывается, если она нужна пользователю;
- в Search Console или аналогичном инструменте нет новых ошибок обхода по этому URL.
Если URL остался в индексе, но вы убрали его из sitemap, это не противоречие. Sitemap не удаляет страницу из индекса мгновенно. Он только перестаёт подсказывать поисковику, что этот URL важен для регулярного обхода.
Частые ошибки и как их исправить
Удалили URL из sitemap, но забыли про индексацию
Если страница не должна индексироваться вообще, одного исключения из sitemap мало. Нужно также проверить noindex, canonical и внутренние ссылки. Иначе поисковик продолжит находить страницу через меню, хлебные крошки или другие материалы.
Скрыли слишком много
Частая ошибка — отключить целый тип записей, потому что в нём есть несколько плохих URL. В итоге из sitemap пропадают и полезные страницы. Если проблема точечная, исключайте по ID или по условию, а не по всему типу.
Правили тему, а потом всё сломалось после обновления
Код в functions.php рабочий, но не лучший вариант для долгой поддержки. После обновления темы или смены шаблона изменения исчезают. Для таких задач лучше мини-плагин или mu-plugin.
Не сбросили кеш
Если sitemap отдаётся через кеш, старые URL могут висеть ещё какое-то время. После правок очищайте кеш плагина, сервера и CDN, если он используется.
Практические советы по безопасности и производительности
Не пытайтесь чистить sitemap через прямое редактирование ядра WordPress или файлов SEO-плагина. Это не переживёт обновление и создаст лишнюю точку отказа. Для точечных исключений лучше использовать фильтры WordPress или штатные настройки плагина.
Если на сайте много служебных URL, полезно сначала навести порядок в структуре контента: убрать пустые рубрики, отключить лишние архивы, проверить вложения и параметры фильтрации. Чем меньше мусора в источнике, тем меньше ручной работы с sitemap.
Для сайтов, где важна техническая чистота, удобно держать такие правки в отдельном плагине или в наборе настроек техочистки. Например, в Clearfy Pro есть инструменты для удаления дублей и чистки сайта, если вам нужен не только sitemap, но и более широкий контроль над техническими URL: https://wpshop.ru/plugins/clearfy.
Мини-чек-лист перед публикацией изменений
- Проверил, какие именно URL лишние.
- Определил, это один URL, тип записей или таксономия.
- Выбрал способ исключения без правки ядра.
- Сбросил кеш сайта и CDN.
- Открыл sitemap и убедился, что лишние URL исчезли.
- Проверил, что нужные страницы остались в карте сайта.
- Посмотрел, нет ли новых ошибок обхода в панели вебмастера.
Если задача повторяется регулярно, лучше не лечить каждый URL вручную, а один раз настроить правила для всего класса страниц. Так sitemap остаётся чистым, а поисковик получает только те адреса, которые реально стоит обходить.