Ситуация типовая: сайт уже открыт для индексации, но в XML sitemap продолжают попадать страницы, которые вы не хотите отдавать поисковикам. Это могут быть архивы, служебные страницы, результаты поиска, вложения, кастомные типы записей или URL с параметрами, если они генерируются плагином карты сайта. Сам по себе noindex не всегда решает задачу: URL может оставаться в sitemap и продолжать расходовать краулинговый бюджет.
Ниже разберём, как точечно убрать такие страницы из XML sitemap в WordPress, не ломая остальную индексацию. Подход подойдёт для сайтов на классическом WordPress и для проектов, где карта сайта генерируется ядром или SEO-плагином.
Когда проблема действительно в sitemap
Сначала стоит убедиться, что поисковик видит именно лишние URL из карты сайта, а не просто нашёл их по внутренним ссылкам. Для этого проверьте:
- какие URL реально попали в
/sitemap.xmlили в дочерние sitemap-файлы; - есть ли у этих страниц статус
noindexв HTML, но при этом они всё равно присутствуют в sitemap; - не создаёт ли плагин отдельные sitemap для медиафайлов, авторов, тегов, кастомных таксономий;
- не дублируются ли URL через разные форматы, например архивы и отдельные записи.
Если страница уже закрыта от индексации в мета-тегах, но остаётся в sitemap, это не всегда ошибка. Но для служебных и мусорных URL лучше убрать их из карты сайта полностью — так проще контролировать обход и отчёты в Search Console.
Диагностика: где именно генерируется лишний URL
В WordPress карта сайта может формироваться ядром или SEO-плагином. Поэтому сначала определите источник. Если вы используете Yoast SEO, Rank Math, All in One SEO или аналог, проверьте их настройки sitemap. Если карта сайта штатная, фильтровать придётся через хуки WordPress.
Практический способ диагностики:
- Откройте XML sitemap в браузере и найдите проблемный URL.
- Посмотрите, в каком дочернем sitemap он находится: записи, страницы, таксономии, авторы, вложения.
- Сравните с настройками индексации в SEO-плагине.
- Если URL создаётся ядром или кастомным кодом, ищите фильтры генерации sitemap.
Для штатного sitemap WordPress полезно проверить, не включён ли в него тип записи, который вы не хотите индексировать. Для этого часто достаточно отключить его из публичного sitemap на уровне кода.
Пошаговое решение через фильтры WordPress
Если карта сайта генерируется ядром WordPress, можно исключить отдельные типы записей и таксономии через фильтры wp_sitemaps_post_types и wp_sitemaps_taxonomies. Это безопаснее, чем пытаться потом закрывать всё через robots.txt.
Исключаем типы записей из sitemap
Пример: нужно убрать из sitemap служебный тип записи landing и внутренние документы internal_doc. Код можно добавить в мини-плагин или в functions.php дочерней темы, но для продакшена лучше отдельный mu-plugin.
<?php
add_filter('wp_sitemaps_post_types', function ($post_types) {
unset($post_types['landing']);
unset($post_types['internal_doc']);
return $post_types;
});После этого WordPress перестанет включать эти типы записей в XML sitemap, но сами записи останутся доступными на сайте, если вы не закрывали их отдельно.
Исключаем таксономии и архивы
Если проблема в тегах, служебных рубриках или кастомных таксономиях, используйте фильтр wp_sitemaps_taxonomies.
<?php
add_filter('wp_sitemaps_taxonomies', function ($taxonomies) {
unset($taxonomies['post_tag']);
unset($taxonomies['internal_topic']);
return $taxonomies;
});Такой вариант полезен, когда теги на сайте создаются автоматически и дают много слабых страниц без самостоятельной ценности. Но если теги реально приводят трафик, удалять их из sitemap нужно осторожно и только после проверки в аналитике.
Если sitemap генерирует SEO-плагин
У SEO-плагинов логика своя. Обычно нужные настройки есть в интерфейсе: отключение архивов авторов, дат, тегов, медиа-страниц, отдельных типов записей. Это предпочтительнее, чем вмешиваться в внутренние фильтры плагина без документации.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Если sitemap управляется через интерфейс | Не всегда хватает для точечной фильтрации |
| Фильтры WordPress | Если используется штатный sitemap | Нужно аккуратно тестировать после обновлений |
| robots.txt | Для грубого ограничения обхода | Не убирает URL из sitemap и не решает проблему полностью |
Как убрать только отдельные URL, а не весь тип записей
Иногда нужно исключить не весь post type, а только часть записей по условию: например, записи без featured image, записи в определённой рубрике или страницы с техническим шаблоном. Для штатного sitemap WordPress это можно сделать через фильтр wp_sitemaps_posts_query_args.
<?php
add_filter('wp_sitemaps_posts_query_args', function ($args, $post_type) {
if ($post_type !== 'post') {
return $args;
}
$args['tax_query'] = array(
array(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array('internal', 'test'),
'operator' => 'NOT IN',
),
);
return $args;
}, 10, 2);Этот способ полезен, если у вас есть технические записи, которые должны жить на сайте, но не должны попадать в карту сайта. Важно: не усложняйте запрос без необходимости. Чем больше условий вы добавляете, тем выше риск случайно скрыть нужные страницы.
Проверка результата после внедрения
После правки не ограничивайтесь открытием главной sitemap. Проверьте именно дочерние файлы, где раньше был проблемный URL.
- Откройте sitemap в браузере и убедитесь, что нужный URL исчез.
- Проверьте исходный код страницы sitemap, если плагин отдаёт её как XML.
- Очистите кэш плагина, сервера и CDN, если они есть.
- Сравните список URL до и после в Search Console.
- Убедитесь, что запись всё ещё доступна по прямой ссылке, если это было нужно.
Если URL не исчез сразу, причина часто в кэше. На сайтах с серверным кэшированием и CDN XML sitemap тоже может кэшироваться, и тогда вы видите старую версию файла.
Частые ошибки и как их исправить
Отключили URL в robots.txt, но оставили в sitemap
Это частая полумера. Поисковик всё равно видит URL в карте сайта, а robots.txt лишь ограничивает обход. Для чистой индексации лучше убрать URL из sitemap и отдельно решить, должен ли он быть доступен для обхода.
Скрыли важные страницы вместе со служебными
Так бывает, когда фильтр написан слишком широко. Например, вы исключили весь post type, хотя в нём есть и полезные страницы. Перед выкладкой проверьте, какие именно типы записей и таксономии реально используются на сайте.
Не учли SEO-плагин
Если одновременно включён штатный sitemap WordPress и sitemap от SEO-плагина, можно получить путаницу. В таком случае оставьте один источник карты сайта и проверьте, не дублируются ли URL в двух разных XML-файлах.
Забыли очистить кэш
После изменения фильтров sitemap может продолжать отдавать старую версию из кэша. Это особенно заметно на больших сайтах. Очистите кэш плагина, объектный кэш, серверный кэш и CDN, затем повторите проверку.
Безопасность и производительность
Фильтры sitemap сами по себе не нагружают сайт сильно, но не стоит превращать их в тяжёлые запросы к базе. Если вы исключаете записи по сложным условиям, тестируйте генерацию sitemap на реальном объёме контента. Для крупных проектов лучше ограничиваться простыми условиями по типу записи и таксономии.
Если задача шире и вам нужно одновременно чистить дубли, архивы и служебные URL, имеет смысл вынести часть технических настроек в отдельный инструмент. В экосистеме WPShop для таких задач часто используют Clearfy Pro: он закрывает ряд типовых SEO- и технических настроек без ручного кода. Ссылка на продукт: Clearfy Pro.
Что должно получиться в итоге
После настройки в sitemap остаются только те URL, которые вы действительно хотите отдавать поисковым системам. Лишние архивы, служебные типы записей и технические страницы исчезают из карты сайта, а проверка в браузере и Search Console подтверждает, что генерация работает предсказуемо. Если после правки что-то не совпадает, почти всегда причина в кэше, параллельной генерации sitemap или слишком широком фильтре.