Если в sitemap попадают служебные страницы, черновики, внутренние архивы или приватные URL, поисковик получает лишние сигналы и тратит краулинговый бюджет не туда. На небольшом сайте это обычно не критично, но на проектах с большим количеством записей, таксономий и кастомных типов контента лишние URL быстро превращаются в шум.
Проблема часто выглядит так: в Google Search Console появляются URL, которые не должны индексироваться; в отчётах по покрытию растут страницы с пометкой «Просканировано, но не проиндексировано»; а в sitemap.xml видны записи, которые пользователь вообще не должен находить через поиск. Ниже — как диагностировать источник, что именно отключать и как проверить результат.
Когда sitemap начинает мешать индексации
Сам по себе XML sitemap не заставляет поисковик индексировать страницу. Но если в него попадают лишние URL, вы сами подсказываете роботу, что эти адреса важны. Это особенно заметно, когда:
- в sitemap есть страницы с
noindex, но они всё равно перечислены; - в карту сайта попадают архивы авторов, дат, тегов без ценности для поиска;
- в sitemap видны приватные или технические записи из кастомных типов;
- плагин SEO генерирует отдельные карты для контента, который вы не хотите продвигать;
- после миграции остались старые URL, которые уже закрыты, но всё ещё отдаются в карте сайта.
Что именно нужно искать в диагностике
Откройте sitemap.xml и проверьте не только главную карту, но и вложенные файлы: post-sitemap.xml, page-sitemap.xml, карты таксономий и кастомных типов записей. Если сайт использует SEO-плагин, часть URL может генерироваться им, а часть — ядром WordPress или темой.
Полезно сравнить три вещи: сам URL в sitemap, статус страницы в браузере и мета-роботс на странице. Если страница закрыта от индексации, но остаётся в sitemap, это уже повод править генерацию карты, а не только ставить noindex.
Пошаговое решение: убрать лишние URL из XML sitemap
Есть три рабочих подхода: через настройки SEO-плагина, через фильтры WordPress и через отключение ненужных типов контента на уровне регистрации. Выбор зависит от того, где именно рождается лишний URL.
1. Сначала проверьте настройки SEO-плагина
Если у вас установлен плагин, который управляет картой сайта, начните с него. В большинстве случаев проще отключить ненужный тип архива или таксономии в интерфейсе, чем потом компенсировать это кодом. Это особенно важно, если сайт поддерживает редактор или контент-менеджер: кодовые правки без понятной логики в админке быстро ломают поддержку.
Ищите настройки для:
- архивов тегов и рубрик;
- архивов авторов;
- кастомных типов записей;
- отдельных таксономий;
- медиа-страниц, если они не нужны в поиске.
Если нужной опции нет или плагин всё равно отдаёт лишние URL, переходите к коду.
2. Исключите конкретный тип записей из sitemap через фильтр
В WordPress core для XML sitemap есть фильтр wp_sitemaps_post_types. Он позволяет убрать целый тип записей из карты сайта. Это удобнее, чем пытаться закрывать каждый URL отдельно, если проблема системная.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный тип записей из sitemap.
unset( $post_types['landing'] );
// Если не нужно показывать медиа-attachment в карте сайта.
unset( $post_types['attachment'] );
return $post_types;
} );Этот вариант подходит, если лишний контент создаётся отдельным типом записей и не должен участвовать в поиске вообще. Но если тип нужен на сайте, а скрыть надо только часть записей, потребуется более точечная логика.
3. Отфильтруйте отдельные записи по ID или статусу
Для выборочного исключения конкретных записей можно использовать фильтр wp_sitemaps_posts_query_args. Он позволяет изменить аргументы запроса, из которого WordPress собирает список URL для sitemap.
<?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 );На практике это полезно для:
- страниц для внутреннего использования;
- технических лендингов;
- дубликатов после миграции;
- служебных страниц, которые должны быть доступны по прямой ссылке, но не участвовать в индексации.
Если нужно исключать не по ID, а по метке или признаку в метаполе, лучше строить логику на отдельном признаке, чтобы не зависеть от ручного списка ID.
4. Уберите таксономии и архивы, которые не дают ценности
Для таксономий есть отдельный фильтр wp_sitemaps_taxonomies. Он помогает убрать теги, служебные рубрики или кастомные таксономии, если они не должны попадать в карту сайта.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['internal_topic'] );
return $taxonomies;
} );Если у вас много тегов с тонким или почти пустым контентом, это часто самый быстрый способ сократить шум в sitemap без риска сломать основной контент.
Сравнение подходов: плагин, код или отключение типа контента
| Подход | Когда подходит | Плюс | Компромисс |
|---|---|---|---|
| Настройки SEO-плагина | Нужно быстро убрать архивы, таксономии, типы записей | Без кода, удобно для редактора | Не всегда есть точечный контроль |
| Фильтры WordPress | Нужно исключить конкретные типы или записи | Гибко и прозрачно | Требует аккуратной поддержки |
| Отключение регистрации типа/таксономии в sitemap | Контент не должен участвовать в индексации вообще | Чистое решение на уровне архитектуры | Нужно понимать, как устроен проект |
Проверка результата после внедрения
После правки не ограничивайтесь открытием главного sitemap.xml. Проверяйте именно те URL, которые вы исключали.
- Откройте карту сайта в браузере и убедитесь, что лишний тип записей исчез из списка.
- Проверьте вложенные sitemap-файлы, если карта разбита на части.
- Посмотрите исходный код страницы и убедитесь, что URL не остались в генерации через кэш.
- Если сайт использует кэш-плагин или серверный кэш, очистите его вручную.
- В Google Search Console отправьте sitemap повторно и проверьте, что новые данные подтянулись без ошибок.
Если URL всё ещё виден в старой версии карты, проблема может быть не в WordPress, а в кэше CDN, плагина или сервера. В таком случае сначала сбрасывайте кэш, а уже потом ищите ошибку в коде.
Частые ошибки и как их исправить
Отключили URL в sitemap, но не закрыли саму страницу
Это частая путаница. Убрать URL из sitemap — не то же самое, что запретить индексацию. Если страница больше не нужна в поиске, проверьте ещё noindex, canonical и внутренние ссылки. Иначе робот может найти её через другие пути.
Скрыли тип записей, который нужен для внутренней навигации
Иногда разработчик убирает из sitemap целый тип записей, а потом выясняется, что на него завязаны хлебные крошки, фильтры или блоки похожих материалов. Перед правкой проверьте, используется ли этот тип в шаблонах и в REST API.
Правка сделана, но sitemap не обновился
Причина обычно в кэше или в том, что фильтр подключён слишком поздно. Код лучше размещать в дочерней теме или в собственном мини-плагине, а не в случайном шаблоне, который может не загружаться на всех запросах.
Пытаются закрыть всё через robots.txt
robots.txt не удаляет URL из уже известного поисковику списка и не решает проблему генерации лишних ссылок в sitemap. Для XML sitemap нужен именно контроль источника генерации, а не только запрет обхода.
Практические советы по безопасности и производительности
Если вы правите sitemap кодом, держите изменения отдельно от темы. Это снижает риск потерять настройку при обновлении шаблона. Для небольших правок удобнее использовать mu-plugin или собственный мини-плагин, чем вносить код в functions.php активной темы.
Ещё один момент — не перегружайте фильтры тяжёлыми запросами. Если вы исключаете записи по метаполям или сложным условиям, лучше заранее продумать признак, по которому можно быстро отфильтровать контент. Иначе генерация sitemap на большом сайте будет тормозить.
Если нужен более широкий набор инструментов для чистки дублей, управления индексируемостью и отключения лишних элементов WordPress, иногда проще собрать это в одном месте, чем держать разрозненные сниппеты. В таких сценариях уместно посмотреть на Clearfy Pro, но только если его функции действительно закрывают вашу задачу и не дублируют уже существующую логику сайта.
Короткий чек-лист перед публикацией правки
- Проверен источник генерации sitemap: core, SEO-плагин или оба сразу.
- Исключены только те типы записей и таксономии, которые не нужны в поиске.
- Сделана очистка кэша сайта, сервера и CDN.
- Проверены вложенные sitemap-файлы, а не только главный индекс.
- Сравнены sitemap,
noindexи canonical, чтобы не осталось противоречий. - После обновления sitemap повторно проверен в Search Console.
Если действовать по этой схеме, вы убираете из карты сайта именно те URL, которые мешают индексации, а не просто «прячете» их от глаз. Для технического SEO это обычно и есть правильная цель: меньше шума, больше контроля над тем, что поисковик видит как важный контент.