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