Как отключить отдельные страницы из XML sitemap в WordPress без плагина

Если в XML sitemap попадают служебные страницы, дубли, тестовые записи или URL, которые не должны уходить в поиск, это лучше исправить на уровне генерации карты сайта, а не только через noindex. Поисковик может увидеть URL в sitemap раньше, чем доберётся до мета-тегов, и для технически грязного сайта это лишний шум.

В WordPress с версии 5.5 встроена собственная XML sitemap. Её можно точечно фильтровать без плагина: убрать конкретные записи, страницы, термины или целые типы контента. Ниже — рабочий сценарий, который подходит для типичных задач: исключить страницу благодарности, внутренние документы, тестовые записи, архивы с мусорным контентом и похожие URL.

Когда это действительно нужно

Сначала проверьте, что проблема именно в sitemap, а не в индексации вообще. Если URL уже закрыт от индексации, но продолжает попадать в карту сайта, это не критическая ошибка, но для SEO и диагностики лучше убрать его из источника.

Типичные случаи

  • страница /thank-you/ после формы или оплаты;
  • внутренние служебные страницы: политика, техстраницы, шаблоны;
  • черновые или тестовые записи, которые случайно опубликованы;
  • дубли контента, которые не должны участвовать в обходе роботом;
  • отдельные категории или метки с пустым либо слабым содержимым.

Что проверить до правки

  • URL действительно есть в текущем sitemap;
  • страница не нужна для внутренней перелинковки и навигации;
  • для неё уже настроен noindex, если она должна оставаться доступной пользователю;
  • нет ли у темы или SEO-плагина своего фильтра, который уже меняет sitemap.

Диагностика: где именно генерируется sitemap

Встроенная карта сайта WordPress обычно доступна по адресу /wp-sitemap.xml. Если у вас установлен SEO-плагин, он может подменять стандартную реализацию своей. Это важно: код ниже работает именно со встроенным sitemap WordPress.

Проверить источник можно быстро:

  • откройте /wp-sitemap.xml в браузере;
  • посмотрите, есть ли там стандартные секции post-sitemap.xml, page-sitemap.xml, taxonomies-sitemap.xml;
  • если sitemap отдаёт Yoast, Rank Math или другой плагин, фильтры WordPress могут не сработать так, как ожидается.

Если у вас уже есть SEO-плагин, сначала проверьте его настройки исключения URL из sitemap. Код нужен, когда нужна точечная логика или когда вы не хотите добавлять ещё один плагин ради одной задачи.

Пошаговое решение без плагина

Самый надёжный способ — добавить небольшой код в functions.php дочерней темы или в собственный мини-плагин. Для продакшена мини-плагин обычно безопаснее: код не потеряется при смене темы.

Вариант 1: убрать конкретные записи и страницы из sitemap

Для встроенного sitemap WordPress есть фильтр wp_sitemaps_posts_query_args. Он позволяет изменить запрос к записям до генерации карты сайта. Это удобно, если нужно исключить несколько ID.

add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
	if ( 'page' !== $post_type ) {
		return $args;
	}

	$excluded_ids = array( 42, 108, 256 );

	if ( empty( $args['post__not_in'] ) ) {
		$args['post__not_in'] = array();
	}

	$args['post__not_in'] = array_unique( array_merge( $args['post__not_in'], $excluded_ids ) );

	return $args;
}, 10, 2 );

Что делает этот код: для типа page он исключает страницы с указанными ID из sitemap. На фронтенде они останутся доступными, если вы не закрыли их отдельно.

Вариант 2: убрать конкретный термин таксономии

Если проблема в архиве рубрики или метки, используйте фильтр wp_sitemaps_taxonomies_query_args. Он работает по тому же принципу, но для таксономий.

add_filter( 'wp_sitemaps_taxonomies_query_args', function( $args, $taxonomy ) {
	if ( 'post_tag' !== $taxonomy ) {
		return $args;
	}

	$excluded_terms = array( 15, 27 );

	if ( empty( $args['exclude'] ) ) {
		$args['exclude'] = array();
	}

	$args['exclude'] = array_unique( array_merge( $args['exclude'], $excluded_terms ) );

	return $args;
}, 10, 2 );

Такой подход полезен, когда в sitemap попадают пустые или технические метки, а удалять сами термины нельзя из-за внутренней структуры сайта.

Вариант 3: отключить целый тип контента из sitemap

Если у вас есть служебный custom post type, который не должен индексироваться вообще, его можно убрать из sitemap через фильтр wp_sitemaps_post_types.

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
	unset( $post_types['landing'] );
	unset( $post_types['internal_doc'] );

	return $post_types;
} );

Это уже более грубый вариант. Он подходит для типов контента, которые не должны попадать в поиск и не несут ценности для внешней индексации.

Какой способ выбрать: код, плагин или настройка SEO-плагина

ПодходКогда использоватьПлюсыМинусы
Настройка SEO-плагинаЕсли плагин уже управляет sitemapБез кода, быстроЗависит от конкретного плагина и его интерфейса
Код через фильтры WordPressТочечные исключения, кастомная логикаГибко, без лишних зависимостейНужно аккуратно поддерживать
Отключение sitemap целикомРедкий случай, когда карта сайта не нужнаПростоПочти всегда слишком грубо

Если задача сводится к нескольким URL, код обычно надёжнее. Если у вас уже стоит SEO-плагин и он умеет исключать нужные сущности из sitemap, сначала используйте его настройки, чтобы не дублировать логику.

Проверка результата после внедрения

После добавления кода не ограничивайтесь визуальной проверкой главной страницы sitemap. Нужно убедиться, что исключённые URL реально исчезли из нужного раздела.

Что проверить вручную

  • откройте /wp-sitemap.xml и нужный дочерний sitemap, например /wp-sitemap-posts-page-1.xml;
  • найдите исключённый URL поиском по странице;
  • проверьте, что остальные записи этого типа остались на месте;
  • если используется кэш, очистите его на уровне сайта и CDN;
  • посмотрите исходный XML, а не только визуальный рендер в браузере.

Что проверить через Search Console

Если URL уже был отправлен в индекс, он не исчезнет мгновенно только потому, что пропал из sitemap. Это нормально. После обновления карты сайта поисковик должен увидеть изменение при следующем обходе. В Search Console полезно проверить отчёт по sitemap и статус конкретного URL.

Если страница должна оставаться доступной, но не индексироваться, сочетайте удаление из sitemap с noindex. Если страница вообще не нужна, лучше вернуть 404 или 410, а не просто прятать её из карты сайта.

Частые ошибки и как их исправить

Код добавили не туда

Если вставить код в активную тему, он может пропасть после обновления. Для стабильной работы используйте дочернюю тему или отдельный мини-плагин.

Путают встроенный sitemap и sitemap от плагина

Фильтры WordPress не управляют картой сайта, которую генерирует сторонний SEO-плагин. Если у вас Yoast, Rank Math или другой плагин, сначала ищите его собственные настройки и хуки.

Исключают URL, но не убирают причину дубля

Если в sitemap попадает дубль из-за неправильной структуры таксономий, каноникал, редиректы и внутренние ссылки тоже нужно проверить. Иначе проблема останется, просто станет менее заметной.

Ожидают мгновенного удаления из индекса

Удаление из sitemap не равно удалению из индекса. Это только сигнал для обхода. Для уже проиндексированных страниц нужны дополнительные меры: noindex, редирект или удаление страницы.

Практические советы по безопасности и производительности

Если исключений немного, не усложняйте код лишними запросами к базе. Жёстко заданные ID работают быстрее и предсказуемее, чем попытка каждый раз искать записи по заголовку или slug.

Для больших сайтов лучше хранить список исключений в одном месте и комментировать, почему каждый URL убран. Через полгода это экономит время при аудите.

Если вам нужно регулярно чистить сайт от дублей, служебных архивов и мусорных URL, имеет смысл собрать это в один технический слой: sitemap, noindex, каноникал, редиректы и отключение лишних архивов. В таких задачах иногда удобнее использовать инструменты вроде Clearfy Pro, если нужен не один фильтр, а набор технических настроек без ручной сборки.

Главное правило простое: sitemap должен отражать только те URL, которые вы реально хотите отдавать поисковику. Всё остальное — либо убрать из карты сайта, либо закрыть на уровне индексации, либо удалить совсем.

Как использовать фильтры и хуки WooCommerce для изменения цены товара в корзине
03.05.2026
Как отключить архив авторов в WordPress без плагина
26.08.2026
Как отключить отдельные страницы из XML sitemap в WordPress без плагина
07.09.2026
Как отключить архивы меток в WordPress без плагина
31.08.2026
Проблемы с пересчётом стоимости в WooCommerce при изменении количества товаров и их решение
19.05.2026