Если в XML sitemap попадают страницы, которые не должны индексироваться, проблема обычно не в «плохом SEO», а в настройках генерации карты сайта. Частый сценарий: вы закрыли страницу от индексации, но она всё равно остаётся в sitemap, из-за чего поисковик получает противоречивые сигналы. Это особенно заметно после переноса сайта, массовой чистки контента или при работе с техническими страницами, черновиками и служебными архивами.
Ниже разберём, как убрать отдельные URL из XML sitemap в WordPress без выдуманных решений: через настройки плагина, через код и через проверку результата. Сразу оговорка: если у вас sitemap генерирует SEO-плагин, править нужно именно его логику, а не «весь WordPress сразу».
Когда это действительно нужно
Не стоит вычищать sitemap наугад. Он нужен для того, чтобы поисковик быстрее находил важные страницы. Убирать из него имеет смысл только то, что не должно участвовать в индексации или не несёт ценности для поиска.
- служебные страницы: «Спасибо за заявку», «Корзина», «Личный кабинет»;
- дубли контента, которые уже закрыты каноникалом или noindex;
- временные страницы кампаний, тестовые записи, внутренние лендинги;
- отдельные категории, теги или архивы, если они создают мусор в индексе;
- страницы с параметрами, которые случайно попали в карту сайта через плагин или кастомный код.
Диагностика: кто именно генерирует sitemap
Первый шаг — понять источник XML sitemap. В WordPress это обычно один из трёх вариантов: встроенная карта сайта ядра, SEO-плагин или кастомная реализация в теме/плагине. От этого зависит способ исключения URL.
Как быстро проверить источник
Откройте в браузере адрес /sitemap.xml и посмотрите, что отдаётся. Если видите индекс карт сайта в стиле WordPress Core, это встроенный механизм. Если структура похожа на набор sitemap от SEO-плагина, значит карту генерирует плагин. В админке это обычно видно по активным SEO-модулям.
Полезно также проверить исходный код страницы, которую нужно убрать: есть ли у неё noindex, не стоит ли она в robots.txt, не является ли она канонической копией другой страницы. Если страница закрыта от индексации, но остаётся в sitemap, это не ошибка WordPress как такового — это несогласованность настроек.
Способы убрать страницу из XML sitemap
Ниже — рабочие варианты, от самого простого к более гибкому. Если у вас уже стоит SEO-плагин, чаще всего достаточно его настроек. Если нужна точечная логика для конкретных типов контента, лучше использовать код.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Нужно убрать отдельные записи, страницы или таксономии без кода | Зависит от возможностей плагина |
| Фильтры WordPress / плагина | Нужна точечная логика по ID, типу записи или метке | Требуется аккуратный код и тестирование |
| Отключение sitemap для типа контента | Нужно исключить целый тип записей или таксономию | Можно случайно убрать слишком много |
Вариант 1. Исключить страницу через настройки SEO-плагина
Если вы используете SEO-плагин, ищите в настройках разделы вроде «Sitemap», «XML sitemap», «Индексация», «Типы записей» или «Таксономии». У большинства плагинов можно отключить показ отдельных post type, рубрик, тегов или конкретных страниц через метаполя в редакторе записи.
Логика простая: если страница не должна попадать в поиск, она не должна и присутствовать в sitemap. Но важно не путать «не показывать в sitemap» и «закрыть от индексации». Это разные действия. Иногда нужно и то и другое, иногда достаточно только одного.
Вариант 2. Исключить конкретный URL через код
Если у вас встроенная карта сайта WordPress или кастомная логика, можно исключить конкретную запись через фильтр wp_sitemaps_posts_query_args. Это рабочий способ для ядра WordPress: вы меняете аргументы запроса, который собирает записи для sitemap.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'page' !== $post_type ) {
return $args;
}
// Исключаем страницу с ID 42 из sitemap.
$args['post__not_in'] = array( 42 );
return $args;
}, 10, 2 );Если нужно убрать несколько страниц, добавьте массив ID. Такой подход удобен, когда у вас есть служебные страницы, которые не должны попадать в карту сайта, но при этом должны открываться по прямой ссылке для пользователей.
Вариант 3. Убрать целый тип записей или таксономию
Иногда проблема не в одной странице, а в целой группе URL: например, в архиве тега, в кастомном типе записи или в служебной таксономии. В этом случае лучше отключать sitemap на уровне типа контента. Для встроенного sitemap WordPress можно отключить поддержку sitemap у конкретного post type через фильтр wp_sitemaps_post_types.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['landing'] );
return $post_types;
} );Здесь landing — пример кастомного типа записи. Подставляйте реальный slug вашего post type. Такой способ подходит, если у вас есть отдельный тип страниц для промо-лендингов, тестовых материалов или внутреннего контента.
Вариант 4. Если sitemap генерирует SEO-плагин
У SEO-плагинов логика отличается. У одних есть переключатель «показывать в XML sitemap» в настройках типа записи, у других — отдельные поля в редакторе. Если плагин поддерживает исключение по ID или по типу записи, используйте штатный интерфейс. Это безопаснее, чем пытаться переопределять его внутренние классы.
Если штатного переключателя нет, сначала проверьте документацию именно вашего плагина. Не стоит лезть в его внутренние файлы: после обновления правки исчезнут. Для постоянной логики используйте либо фильтры плагина, либо mu-plugin.
Пошаговое решение без лишних рисков
- Определите, кто генерирует sitemap: ядро WordPress, SEO-плагин или кастомный код.
- Составьте список URL, которые нужно убрать, и проверьте, не нужны ли они в индексе по бизнес-логике.
- Если есть настройка в плагине — отключите страницу, тип записи или таксономию штатно.
- Если настройки нет — добавьте фильтр в дочернюю тему или в небольшой mu-plugin.
- Очистите кэш сайта и кэш CDN, если он есть.
- Проверьте sitemap в браузере и через Search Console.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием главной sitemap. Нужно проверить именно тот URL, который вы убирали.
- Откройте
/sitemap.xmlи убедитесь, что нужной страницы там больше нет. - Если sitemap разбит на несколько файлов, проверьте дочерние карты, например
post-sitemap.xmlилиpage-sitemap.xml. - Посмотрите исходный код страницы: нет ли противоречия между
noindexи присутствием в sitemap. - В Google Search Console отправьте sitemap на повторную обработку и проверьте статус обнаружения URL.
Если страница исчезла из sitemap, но всё ещё показывается в поиске, это нормально: поисковику нужно время на переобход. Если же она осталась в карте сайта, значит фильтр не сработал или вы правите не тот источник генерации.
Частые ошибки и как их исправить
Правят не тот sitemap
Иногда на сайте одновременно есть встроенный sitemap WordPress и sitemap от SEO-плагина. В результате вы меняете один источник, а в поиске виден другой. Решение простое: сначала определите, какой файл реально отдаётся по адресу /sitemap.xml.
Путают noindex и исключение из sitemap
Страница может быть закрыта от индексации, но всё ещё присутствовать в карте сайта. Это не всегда критично, но сигнал для поисковика получается смешанный. Если страница не нужна в поиске, лучше убрать её и из sitemap, и из индексации.
Ставят правку в файл темы
Если вы добавили код прямо в functions.php активной темы, он пропадёт после обновления или смены темы. Для постоянных изменений лучше использовать дочернюю тему или mu-plugin.
Не чистят кэш
После правки sitemap может продолжать отдаваться старая версия из кэша плагина, сервера или CDN. Если проверка показывает старый результат, сначала сбросьте кэш, а уже потом ищите ошибку в коде.
Что учесть для безопасности и производительности
Сама карта сайта не должна быть тяжёлой. Если у вас большой сайт, не делайте сложные запросы в фильтрах sitemap: это может замедлить генерацию и увеличить нагрузку на админку и фронтенд. Лучше исключать записи по ID, типу записи или заранее подготовленным признакам, а не строить тяжёлые JOIN-запросы.
Если вы вносите код, держите его в отдельном небольшом mu-plugin. Так проще контролировать изменения и не потерять их при обновлении темы. Для сайтов, где регулярно чистят дубли и технический мусор, удобно использовать инструменты вроде Clearfy Pro: он помогает навести порядок в SEO-настройках и убрать лишние сущности, но даже с ним логику sitemap всё равно нужно проверять вручную.
Когда лучше не трогать sitemap вручную
Если страница уже закрыта от индексации и не участвует в перелинковке, а в sitemap попадает только как техническая копия, иногда достаточно оставить всё как есть до следующего цикла переобхода. Но если это коммерчески важный сайт, где поисковик должен видеть только чистый набор URL, лучше не откладывать исправление: sitemap — это один из первых файлов, который анализируют роботы.
Главный ориентир здесь простой: в sitemap должны быть только те URL, которые вы реально хотите видеть в поиске. Всё остальное — либо убрать, либо явно закрыть и не смешивать сигналы.