Если в XML-карте сайта у вас появляются страницы, которые не должны попадать в поиск, проблема обычно не в самом sitemap, а в том, что WordPress и SEO-плагин публикуют в него все доступные типы контента по умолчанию. В итоге поисковик видит архивы, служебные записи, вложения, черновые типы контента или страницы, которые вы уже закрыли от индексации, но они все равно продолжают светиться в карте сайта.
Ниже разберем, как точечно убрать лишние URL из XML sitemaps в WordPress: через настройки SEO-плагина, через код и через проверку результата. Без лишних действий и без отключения карты сайта целиком.
Когда это действительно нужно
Отключать XML sitemap полностью не нужно. Обычно задача точечная: оставить в карте сайта только полезные URL и убрать все, что мешает индексации или засоряет отчетность в Search Console.
- в sitemap попадают страницы вложений, хотя они не нужны в поиске;
- в карту сайта добавлены служебные типы записей, которые не должны индексироваться;
- в SEO-плагине включен тип контента, который используется только для внутренней логики;
- в sitemap есть архивы таксономий или CPT, которые вы уже закрыли от индексации;
- после миграции остались старые типы записей, и они продолжают генерировать URL.
Диагностика проблемы
Сначала проверьте, кто именно формирует sitemap: ядро WordPress или SEO-плагин. В современных установках чаще всего карту сайта отдает сам WordPress по адресу /wp-sitemap.xml, но многие сайты используют Yoast SEO, Rank Math или другой плагин, который подменяет стандартное поведение.
Что смотреть в первую очередь
- откройте
/wp-sitemap.xmlи посмотрите, какие разделы там есть; - проверьте, не отдает ли SEO-плагин собственный sitemap-индекс;
- сравните список URL в карте сайта с тем, что реально должно индексироваться;
- посмотрите, нет ли в sitemap страниц с
noindex— это частая ошибка после ручных правок; - проверьте, не дублируются ли одни и те же URL в нескольких sitemap-файлах.
Если вы используете Yoast SEO, Rank Math или похожий плагин, лучше сначала решить задачу в его интерфейсе. Код нужен тогда, когда настройки не покрывают ваш сценарий или когда нужно управлять картой сайта для кастомного типа записи.
Как убрать лишние типы страниц из XML sitemap
Вариант 1. Через настройки SEO-плагина
Это самый безопасный путь, если плагин умеет исключать типы записей, таксономии или отдельные архивы. Например, в Yoast SEO можно отключать индексацию для конкретных типов контента, а в Rank Math — управлять отображением CPT и таксономий в sitemap через настройки.
Плюс этого подхода в том, что плагин сам синхронизирует карту сайта с правилами индексации. Минус — не все плагины дают достаточно точный контроль, особенно если у вас кастомная структура данных.
Вариант 2. Через фильтры WordPress
Если нужно убрать из стандартного sitemap отдельный тип записей, можно использовать фильтр wp_sitemaps_post_types. Он работает с картой сайта ядра WordPress и позволяет исключить нужные post type.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный тип записи из XML sitemap.
unset( $post_types['internal_note'] );
// Можно отключить и стандартные типы, если это оправдано.
// unset( $post_types['attachment'] );
return $post_types;
} );Если вам нужно убрать таксономии, используйте фильтр wp_sitemaps_taxonomies:
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['product_cat'] );
return $taxonomies;
} );Такой подход удобен, когда вы хотите оставить карту сайта рабочей, но убрать из нее шум. Например, теги на контентном сайте часто создают много слабых страниц, которые не дают пользы в индексации.
Вариант 3. Исключить отдельные URL из sitemap
Иногда нужно убрать не весь тип записи, а только конкретные страницы. Для стандартного sitemap ядра это сложнее, но для кастомных сценариев можно фильтровать список URL на уровне генерации. Если у вас SEO-плагин, у него обычно есть собственные фильтры или настройки исключения отдельных записей.
Для WordPress core можно работать через исключение записей по ID в конкретном типе, если это поддерживается вашим кодом генерации. Но на практике лучше решать это на уровне типа записи или таксономии, а не точечно по одному URL, чтобы не получить неуправляемую конфигурацию.
Сравнение подходов
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Если sitemap генерирует Yoast SEO, Rank Math или аналог | Безопасно, без кода, синхронизируется с noindex | Не всегда хватает точности |
| Фильтры WordPress | Если используется стандартный sitemap ядра или нужен контроль для CPT | Гибко, можно точечно исключать типы | Нужно править код и тестировать |
| Отключить sitemap целиком | Почти никогда, только для очень специфичных случаев | Просто | Ломает полезную индексацию |
Пошаговое решение без лишнего риска
- Определите, какой sitemap активен: ядро WordPress или SEO-плагин.
- Составьте список типов контента, которые не должны попадать в карту сайта.
- Сначала попробуйте убрать их в настройках плагина.
- Если настроек не хватает, добавьте фильтр в
functions.phpдочерней темы или в mu-plugin. - Очистите кеш сайта и кеш CDN, если он есть.
- Проверьте sitemap в браузере и в Search Console.
Если вы вносите код, лучше не править родительскую тему. Для таких задач безопаснее использовать дочернюю тему или отдельный mu-plugin, чтобы настройка не исчезла после обновления.
Проверка результата после внедрения
После изменений не ограничивайтесь визуальной проверкой страницы sitemap. Нужно убедиться, что поисковик видит именно тот набор URL, который вы ожидаете.
- откройте sitemap в браузере и проверьте, исчез ли нужный тип записей;
- посмотрите исходный XML, а не только страницу индекса;
- проверьте
robots.txt, если там есть ссылки на sitemap; - в Google Search Console отправьте sitemap заново и посмотрите, нет ли ошибок обработки;
- если URL уже были в индексе, проверьте, как они отрабатывают после следующего обхода.
Для быстрой локальной проверки можно использовать curl:
curl -I https://example.com/wp-sitemap.xml
curl https://example.com/wp-sitemap.xml | head -n 40Если ответ отдает старую версию, значит мешает кеш. Тогда сначала чистите кеш плагина, затем серверный кеш и только потом CDN.
Частые ошибки и как их исправить
Отключили sitemap, но URL остались в индексе
Это нормальная ситуация. Удаление URL из sitemap не удаляет их из поиска мгновенно. Если страница должна исчезнуть, нужен корректный noindex, редирект или удаление страницы с кодом ответа, который соответствует задаче.
Убрали тип записи из sitemap, но он все равно доступен по архиву
Sitemap и доступность URL — разные вещи. Если архив должен быть закрыт, проверьте также мета-robots, canonical и правила в SEO-плагине. Иначе поисковик может продолжить находить URL через внутренние ссылки.
Сломали sitemap после обновления плагина
Так бывает, если правки внесены прямо в файлы плагина. После обновления они исчезают. Используйте фильтры, дочернюю тему или mu-plugin.
Скрыли полезные страницы вместе с мусором
Частая ошибка при массовом unset() по типу записи. Перед удалением проверьте, не содержит ли этот post type важные страницы, которые должны индексироваться. Особенно это критично для кастомных типов контента.
Практические советы по безопасности и производительности
XML sitemap сам по себе не тяжелый, но проблемы начинаются, когда в нем слишком много мусорных URL. Это увеличивает объем обхода и усложняет контроль индексации. Поэтому лучше держать карту сайта компактной и логичной.
- не добавляйте в sitemap страницы, которые закрыты от индексации;
- не включайте служебные post type без необходимости;
- проверяйте, не генерируют ли плагины дубли через собственные sitemap-эндпоинты;
- после правок чистите кеш, чтобы не отдавать старую карту сайта;
- если используете несколько SEO-плагинов, оставьте только один источник sitemap.
Если вам нужен более широкий контроль над дублями, мета-тегами и технической чисткой сайта, иногда проще собрать это в одном инструменте, чем поддерживать набор разрозненных правок. В таких сценариях уместно посмотреть на Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Когда лучше не трогать sitemap кодом
Если сайт ведет не один человек, а контент регулярно меняется, жесткие фильтры в коде могут создать скрытую проблему: новый тип записи появится позже, но в sitemap не попадет, потому что его забыли добавить в исключения или наоборот не заметили, что он нужен. В таких случаях лучше сначала решить задачу настройками SEO-плагина и только потом фиксировать остаточные исключения кодом.
Для небольших правок безопаснее всего держать изменения в одном месте и документировать, что именно исключено и почему. Тогда через полгода не придется гадать, откуда взялся unset( $post_types['attachment'] ) и почему у сайта пропали медиа-страницы из карты сайта.