Ситуация типовая: в XML-карте сайта появляются URL, которые не должны попадать в индекс — служебные страницы, архивы с мусором, вложения, результаты поиска, тестовые записи, иногда даже дубли из кастомных типов записей. Если просто удалить их из sitemap, не понимая источник генерации, можно получить расхождение между картой сайта, canonical и реальной индексацией. Поэтому сначала нужно понять, кто именно добавляет эти URL, а уже потом отключать их точечно.
Когда проблема действительно в sitemap
Не каждый лишний URL в поиске означает ошибку карты сайта. Но если в Google Search Console в отчёте по sitemap видны страницы, которые вы не хотите индексировать, или если в XML-файле есть разделы вроде post_tag, attachment, author и служебные архивы, это уже повод вмешаться. Особенно часто проблема возникает после установки SEO-плагина, миграции темы или добавления кастомных типов записей без настройки их публичности.
Что проверить в первую очередь
- открывается ли sitemap по адресу
/sitemap_index.xmlили через SEO-плагин; - какие типы записей и таксономии туда попадают;
- не создаёт ли тема или плагин отдельный sitemap для вложений, авторов или меток;
- есть ли у проблемных URL статус
noindex, но они всё равно остаются в карте сайта; - не дублируются ли записи из-за нескольких SEO-плагинов одновременно.
Если URL уже помечен как noindex, но продолжает попадать в sitemap, это плохая связка: поисковик получает противоречивый сигнал. В норме такие страницы лучше исключать именно из карты сайта, а не надеяться, что noindex всё исправит.
Диагностика: откуда WordPress берёт URL для sitemap
В современном WordPress карта сайта часто генерируется ядром, но SEO-плагины могут её переопределять. Поэтому сначала нужно понять источник. Если у вас установлен Yoast SEO, Rank Math или похожий плагин, настройка обычно делается в его интерфейсе. Если карта сайта формируется ядром или кастомным кодом, тогда пригодятся фильтры WordPress.
Проверка простая: откройте XML-файл и посмотрите, какие разделы в нём есть. Если проблема только в одном типе записей, не трогайте всё подряд. Если в sitemap попали вложения, часто достаточно отключить их генерацию и одновременно закрыть сами attachment-страницы от индексации.
Пошаговое решение через код
Если нужен точечный контроль без зависимости от интерфейса плагина, удобнее использовать фильтры WordPress. Ниже — рабочий пример для карты сайта ядра WordPress: он убирает из sitemap типы записей, которые вы не хотите отдавать поисковикам.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
unset( $post_types['page'] ); // если нужно убрать служебные страницы, но не делайте это бездумно
return $post_types;
} );
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['post_format'] );
return $taxonomies;
} );
Этот код лучше добавлять в мини-плагин или в functions.php дочерней темы, если вы уверены, что тема не будет часто меняться. Для production-проекта мини-плагин безопаснее: логика не исчезнет после обновления темы.
Если нужно убрать только часть записей внутри типа, а не весь тип целиком, используйте фильтр wp_sitemaps_posts_query_args. Он позволяет исключать записи по ID, статусу или другим параметрам.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['post__not_in'] = array( 123, 456 );
}
return $args;
}, 10, 2 );
Это полезно, если в sitemap попали тестовые публикации, внутренние страницы или записи, которые должны жить только в админке. Но не используйте такой подход для массовой чистки без списка исключений: можно случайно выкинуть из карты важные URL.
Если sitemap создаёт SEO-плагин
У плагинов логика своя, и код ядра может не сработать. Тогда лучше отключать разделы через настройки. В большинстве случаев это быстрее и безопаснее, чем писать обходные фильтры. Например, в SEO-плагине можно убрать из карты сайта таксономии, архивы авторов, медиа-вложения или отдельные типы записей.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| Настройки SEO-плагина | Если sitemap генерирует плагин | Быстро и прозрачно | Зависит от интерфейса и версии |
| Фильтры WordPress | Если нужен точечный контроль | Гибко и предсказуемо | Нужно поддерживать код |
| Отключение через robots.txt | Только для обхода, не для удаления из sitemap | Просто внедрить | Не убирает URL из карты сайта |
Важно: robots.txt не решает задачу исключения URL из sitemap. Он может ограничить обход, но не убирает саму ссылку из XML. Если URL уже есть в карте сайта, поисковик всё равно видит его как кандидат на обход.
Как закрыть служебные страницы и не получить дубли
Частая ошибка — убрать URL из sitemap, но оставить страницу доступной и индексируемой по прямой ссылке. Тогда она продолжит жить в поиске, а карта сайта просто перестанет помогать. Для служебных страниц нужен полный сценарий: убрать из sitemap, поставить noindex, а при необходимости ещё и закрыть внутренние ссылки на них.
Например, для страниц поиска, архивов тегов с мусором или вложений лучше использовать связку: исключение из sitemap + noindex + корректный canonical на основную страницу, если это уместно. Если canonical уже настроен, но карта сайта всё равно содержит мусор, поисковик получает смешанный сигнал и может дольше переобходить лишние URL.
Мини-чек-лист перед публикацией изменений
- проверить, что нужные типы записей остались в sitemap;
- убедиться, что служебные URL исчезли из XML;
- открыть проблемную страницу и проверить meta robots;
- посмотреть, не ведут ли внутренние ссылки на исключённые URL;
- очистить кеш сайта и CDN, если они используются;
- пересобрать sitemap, если плагин делает это вручную или по расписанию.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием главной sitemap-страницы. Проверьте конкретный XML-файл, который раньше содержал лишние URL, и убедитесь, что он пересобрался без кешированной версии. Если используется кеширование на уровне плагина или сервера, старый sitemap может ещё некоторое время отдаваться из кеша.
Дальше откройте Google Search Console и отправьте sitemap на повторную обработку. Если URL были исключены корректно, в отчёте по sitemap они перестанут появляться как отправленные через карту сайта. Но это не мгновенная история: поисковик должен заново обойти XML и обновить данные.
Полезно также проверить ответ сервера для самого sitemap. Он должен отдавать 200 OK, а не редиректить на HTML-страницу или ошибку. Если sitemap отдаётся через редирект, некоторые краулеры обрабатывают его хуже.
Частые ошибки и как их исправить
Убрали URL из sitemap, но они остались в индексе
Это нормально для уже проиндексированных страниц. Исключение из sitemap не удаляет URL из поиска автоматически. Если страница больше не нужна, дополнительно настройте noindex, уберите внутренние ссылки и при необходимости отдайте 410 или 301 на релевантный адрес.
Сломали sitemap целиком
Так бывает, когда фильтром удаляют не только лишние элементы, но и весь массив типов записей. Проверьте, что функция возвращает массив и не перезаписывает его пустым значением. Ещё одна причина — конфликт двух SEO-плагинов, каждый из которых пытается управлять картой сайта.
Изменения не видны после правки кода
Чаще всего виноват кеш. Очистите кеш плагина, серверный кеш и CDN. Если sitemap генерируется динамически, но отдаётся через кеширующий слой, вы будете видеть старую версию до сброса кеша.
Исключили важные страницы
Это уже не техническая, а редакционная ошибка. Перед массовым отключением таксономий и архивов проверьте, какие URL реально дают трафик и нужны ли они в индексации. Иногда метки или архивы авторов полезны, если на сайте есть сильная структура и контент под них.
Практика безопасности и производительности
Если вы правите sitemap кодом, не вносите изменения прямо в родительскую тему. Лучше использовать дочернюю тему или мини-плагин. Так вы не потеряете логику после обновления. Для небольших правок это особенно важно: один фильтр проще сопровождать отдельно, чем искать его в шаблонах темы через полгода.
Ещё один момент — не плодите тяжёлые запросы внутри фильтров sitemap. Фильтр вызывается при генерации карты сайта, и если вы начнёте там делать сложные обращения к базе, это ударит по времени ответа. Для исключений используйте статические списки ID, типы записей и таксономии, а не дорогие выборки.
Если вам нужен более широкий контроль над SEO-чисткой сайта, иногда удобнее взять специализированный инструмент вроде Clearfy Pro: он закрывает часть типовых задач по дублям, служебным страницам и технической чистке без ручного кода. Но даже в этом случае полезно понимать, какие именно URL вы убираете и почему.
Когда карта сайта приведена в порядок, проверьте ещё и внутренние ссылки: если исключённые страницы всё ещё активно линкованы из меню, футера или блоков контента, поисковик продолжит на них натыкаться. Sitemap — это только один слой технической оптимизации, а не замена нормальной архитектуре сайта.