Ситуация типовая: в sitemap попадают служебные страницы, тестовые посадочные, дубли с параметрами или временные материалы, которые не должны светиться поисковикам. При этом отключать карту сайта целиком нельзя — она нужна для остальных URL. В WordPress это решается точечно, но способ зависит от SEO-плагина и от того, где именно формируется sitemap.
Ниже разберу рабочие варианты для Yoast SEO и Rank Math, а также покажу, как проверить результат без догадок и почему простое удаление URL из меню или из контента не помогает.
Когда проблема действительно в sitemap
Сначала стоит убедиться, что речь именно о карте сайта, а не о другой причине индексации. Часто путают три разные задачи:
- страница доступна по прямой ссылке, но не должна быть в sitemap;
- страница уже закрыта от индексации, но всё ещё висит в карте сайта;
- страница дублируется из-за таксономии, пагинации или параметров URL.
Если URL есть в sitemap, поисковик получает явный сигнал, что страница важна для обхода. Даже если потом на странице стоит noindex, это создаёт лишний шум в отчётах и усложняет диагностику. Поэтому лучше убрать URL из карты сайта на уровне генерации, а не лечить последствия.
Что проверить перед изменениями
- какой SEO-плагин генерирует sitemap: Yoast SEO, Rank Math или другой;
- не создаёт ли карту сайт тема или отдельный плагин;
- нужна ли страница в индексе вообще, или её надо только скрыть из sitemap;
- нет ли у URL дубля с другим каноническим адресом.
Как отключить конкретную страницу в Yoast SEO
У Yoast SEO нет удобного универсального фильтра для исключения одной произвольной страницы из sitemap через интерфейс на каждой установке, но для точечных случаев обычно используют фильтр wpseo_exclude_from_sitemap_by_post_ids. Он позволяет передать ID записей, которые не должны попадать в XML sitemap.
Это хороший вариант, если у вас несколько служебных страниц или тестовых материалов, которые нужно убрать без отключения всей карты сайта.
<?php
add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', function( $excluded_ids ) {
$excluded_ids[] = 123; // ID страницы, которую нужно убрать из sitemap
$excluded_ids[] = 456;
return array_unique( array_map( 'intval', $excluded_ids ) );
} );Код можно добавить в мини-плагин или в functions.php дочерней темы, но для продакшена мини-плагин надёжнее: он не исчезнет после смены темы.
Если нужно убрать не одну запись, а целый тип страниц
Когда проблема не в одном URL, а в группе страниц, лучше не перечислять ID вручную. В Yoast SEO можно исключать записи по логике в собственном фильтре, но это уже зависит от вашей структуры. Например, если служебные страницы помечены отдельной категорией или шаблоном, проще отфильтровать их по post_type или мета-полю на этапе генерации списка исключений.
Практически это выглядит так: вы храните список ID в опции, а фильтр подхватывает его и отдаёт в sitemap исключения. Такой подход удобен, если редактору нужно управлять списком без правки кода.
<?php
add_filter( 'wpseo_exclude_from_sitemap_by_post_ids', function( $excluded_ids ) {
$custom_ids = get_option( 'my_sitemap_excluded_ids', array() );
if ( is_array( $custom_ids ) ) {
$excluded_ids = array_merge( $excluded_ids, $custom_ids );
}
return array_unique( array_map( 'intval', $excluded_ids ) );
} );Как убрать страницу из sitemap в Rank Math
В Rank Math логика другая: у записей есть настройка индексации, а для sitemap можно использовать фильтр rank_math/sitemap/entry. Он позволяет вернуть false для конкретного URL, если запись не должна попадать в карту сайта.
Это полезно, когда нужно исключить страницу по ID, по шаблону или по какому-то признаку в метаданных.
<?php
add_filter( 'rank_math/sitemap/entry', function( $url, $type, $object ) {
if ( isset( $object->ID ) && (int) $object->ID === 123 ) {
return false;
}
return $url;
}, 10, 3 );Если у вас несколько страниц, лучше проверять массив ID или мета-значение, а не плодить отдельные условия. Иначе код быстро превращается в набор ручных исключений, который трудно сопровождать.
Когда лучше использовать настройки записи, а не код
Если страница одна и она редактируется в админке, иногда проще поставить для неё noindex в SEO-плагине и отдельно убрать из sitemap через интерфейс, если плагин это позволяет. Но если задача повторяется регулярно, код надёжнее: он не зависит от того, заметил ли редактор нужный переключатель.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки в админке | Одна-две страницы, без автоматизации | Легко забыть при создании новых URL |
| Фильтр в коде | Служебные страницы, стабильные правила | Нужен доступ к коду и тестирование |
| Список ID в опции | Редактору нужно управлять исключениями | Нужна отдельная логика хранения |
Пошаговое решение без поломки индексации
Если нужен рабочий порядок действий, я бы делал так:
- Определить SEO-плагин, который генерирует sitemap.
- Проверить, нужен ли URL в индексе вообще.
- Если нужен, но не должен быть в sitemap, исключить его точечно через фильтр.
- Очистить кэш сайта и кэш плагина, если он есть.
- Переоткрыть sitemap и убедиться, что URL исчез.
- Проверить страницу в Search Console после следующего обхода.
Если сайт использует серверный кэш или CDN, не забывайте, что карта сайта тоже может кэшироваться. Иногда код уже работает, но вы видите старую версию XML из-за кэша.
Как проверить, что всё сработало
Проверка должна быть не на глаз, а по факту. Смотрите сразу в трёх местах:
- откройте сам sitemap в браузере и найдите URL;
- проверьте исходный XML через
view-source:или скачанный файл; - посмотрите, не осталась ли страница в дочернем sitemap, если карта разбита по типам записей.
Если URL исчез из sitemap, но всё ещё находится в индексе, это нормально: удаление из карты сайта не удаляет страницу из поиска мгновенно. Для этого нужен следующий обход роботом и, при необходимости, отдельная настройка индексации.
Дополнительно полезно проверить заголовки ответа страницы:
curl -I https://example.com/page/Так вы увидите, нет ли случайного noindex, редиректа или ошибки кеширования. Для sitemap можно проверить ответ отдельно:
curl -I https://example.com/sitemap_index.xmlЧастые ошибки и как их исправить
URL удалили из контента, но он остался в sitemap
Это ожидаемо. Sitemap строится не по меню и не по контенту страницы, а по данным WordPress и правилам SEO-плагина. Нужно исключать запись на уровне генерации карты, а не в редакторе.
Страница исчезла из sitemap, но стала отдавать 404
Значит, вы не только убрали её из карты сайта, но и удалили саму страницу или изменили её статус. Если URL должен жить, проверьте, не сломали ли вы публикацию, шаблон или редирект.
Код добавили, но ничего не изменилось
Обычно причина в одном из трёх мест: неверный ID, не тот SEO-плагин, либо старый кэш. Ещё одна частая ошибка — код добавили в активную тему, а потом переключили тему и потеряли правку.
Исключили страницу из sitemap, но не закрыли её от индексации
Это не ошибка само по себе, если страница должна быть доступна по прямой ссылке. Но если URL служебный или временный, одного удаления из sitemap мало — нужен отдельный контроль индексации и, при необходимости, noindex.
Что учесть для безопасности и производительности
Если исключений немного, фильтр в коде почти не влияет на производительность. Но когда список большой, не стоит каждый раз делать тяжёлые запросы к базе на фронте. Лучше хранить готовый массив ID в опции или в кэше объекта.
Для безопасности не вставляйте такие правки прямо в основной шаблон без резервной копии. Мини-плагин или mu-plugin удобнее: код не потеряется при обновлении темы и его проще отключить, если что-то пошло не так.
Если вам нужен не только контроль sitemap, но и более широкая чистка SEO-дублей, служебных страниц и лишних архивов, в таких задачах часто используют Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wptour.ru&utm_medium=article&utm_campaign=kak-otklyuchit-xml-sitemap-dlya-otdelnyh-stranic-v-yoast-и-rank-math. Но даже с плагином всё равно полезно понимать, где именно формируется исключение и как его проверить вручную.
Если коротко: не пытайтесь лечить карту сайта через удаление страницы из меню или через robots.txt. Для точечного сценария правильнее убрать конкретный URL из генерации sitemap, затем проверить XML, кэш и ответ сервера. Это быстрее в поддержке и меньше ломается после обновлений.