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

Иногда проблема не в самом sitemap, а в том, что в него попадают страницы, которые не должны помогать индексации: служебные шаблоны, дубли фильтров, внутренние результаты поиска, страницы с параметрами, тестовые записи. Если просто удалить sitemap целиком или закрыть всё подряд, можно сломать сигнал для поисковиков. Рабочая задача здесь более узкая: убрать из XML sitemap только лишние URL и оставить полезные.

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

Чаще всего исключение страниц из sitemap требуется в таких сценариях:

  • в sitemap попадают страницы с ?utm_, ?sort=, ?filter= и другими параметрами;
  • в карту сайта попадают служебные страницы темы или плагина;
  • нужно убрать из sitemap отдельные страницы, но оставить их доступными по прямой ссылке;
  • в индексе уже есть мусорные URL, и вы хотите перестать подсказывать их поисковикам через sitemap;
  • на сайте несколько типов контента, и часть из них не должна участвовать в обходе.

Диагностика: что именно попадает в sitemap

Перед правкой проверьте, какой именно sitemap генерируется и каким плагином. В WordPress это может быть встроенный sitemap ядра или карта сайта от SEO-плагина. Откройте адрес вроде /wp-sitemap.xml или sitemap, который отдает ваш SEO-плагин, и найдите проблемный URL.

Полезно сразу понять, где источник:

  • если URL есть в wp-sitemap.xml, значит он идет из ядра WordPress;
  • если sitemap отдает Yoast, Rank Math или другой SEO-плагин, исключение обычно делается через их фильтры или настройки;
  • если URL появляется только в отдельном sitemap для записей, страниц или таксономий, проще отключать его на уровне типа контента или конкретного объекта.

Что проверить до изменений

  • есть ли у страницы канонический URL;
  • не закрыта ли она уже в robots.txt или через noindex;
  • не нужна ли она в sitemap для внутренней навигации или внешних ссылок;
  • не является ли она дублем другой страницы.

Как исключить конкретную страницу через код

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

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

	$excluded_ids = array( 42, 108 );

	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 );

В этом примере из sitemap страниц исключаются записи с ID 42 и 108. Логика простая: WordPress продолжает генерировать sitemap, но конкретные страницы в него не попадают.

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

Если sitemap генерирует SEO-плагин

У SEO-плагинов свои механизмы. Например, в Yoast SEO можно исключать записи из sitemap через фильтры плагина, а в Rank Math часть настроек доступна в интерфейсе для типа записи или отдельной записи. Здесь важно не смешивать подходы: если sitemap отдает плагин, фильтр ядра WordPress может не сработать.

Практический ориентир такой: сначала проверьте настройки плагина, потом уже добавляйте код. Это экономит время и снижает риск конфликта после обновления.

СпособКогда подходитМинус
Настройка в SEO-плагинеНужно убрать отдельные записи без кодаЗависит от конкретного плагина и его интерфейса
Фильтр в functions.phpНужен точный контроль по ID или условиюТребует поддержки кода при смене темы
Отключение типа записи из sitemapВ sitemap не должен попадать весь тип контентаСлишком грубо для точечных задач

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

  1. Определите, какой sitemap используется: ядро WordPress или SEO-плагин.
  2. Найдите конкретные URL, которые нужно убрать.
  3. Решите, исключаете вы отдельные страницы, целый тип записей или URL с параметрами.
  4. Добавьте фильтр в дочернюю тему или мини-плагин, а не в файлы основной темы.
  5. Очистите кэш сайта и кэш CDN, если он есть.
  6. Проверьте sitemap в браузере и через инструменты для вебмастеров.

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

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

После изменения откройте sitemap вручную и убедитесь, что URL исчезли из XML. Но на этом проверка не заканчивается.

  • проверьте, отдает ли sitemap код 200;
  • убедитесь, что в нем остались нужные страницы;
  • посмотрите, не сломалась ли вложенность sitemap index, если он используется;
  • в Search Console отправьте sitemap повторно или дождитесь переобхода;
  • проверьте, не остались ли исключенные URL в старом кэше.

Если URL исчез из sitemap, но все еще индексируется, это нормально: sitemap не удаляет страницу из индекса мгновенно. Для ускорения реакции обычно дополнительно проверяют noindex, каноникал и внутренние ссылки на эту страницу.

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

Убрали URL из sitemap, но забыли про внутренние ссылки

Если страница активно связана с меню, хлебными крошками или блоками похожих материалов, поисковик все равно найдет ее. В таком случае sitemap — только часть решения. Проверьте, действительно ли страницу нужно скрывать от индексации, или достаточно убрать ее из карты сайта.

Используют robots.txt вместо точечного исключения

Закрытие URL в robots.txt не равно удалению из sitemap. Более того, если URL уже известен поисковику, запрет в robots может помешать ему увидеть noindex или обновленный каноникал. Для точечной работы лучше сначала убрать URL из sitemap, а затем решить вопрос с индексацией отдельно.

Правят файл темы, а потом теряют изменения

Если код добавлен в основную тему, обновление его перезатрёт. Для таких задач используйте дочернюю тему или небольшой mu-plugin. Это особенно важно, если исключение страниц из sitemap — не разовая правка, а постоянное правило.

Не очищают кэш

После изменения sitemap старый XML может продолжать отдаваться из кэша. Это частая причина, почему кажется, что код «не работает». Проверьте кэш плагина, серверный кэш и CDN.

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

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

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

Для точечных исключений безопаснее всего:

  • хранить список исключаемых ID отдельно;
  • документировать, почему каждая страница исключена;
  • проверять sitemap после каждого обновления SEO-плагина;
  • не смешивать исключение из sitemap с удалением страницы или отключением индексации без анализа.

Когда лучше не исключать страницу из sitemap

Если страница полезна для поиска, но просто не нравится вам визуально, не убирайте ее из sitemap без причины. Sitemap — это не список «красивых» URL, а техническая подсказка для обхода. Удалять из него стоит только то, что действительно мешает индексации или создает мусорный контур сайта.

Если сомневаетесь, сравните три варианта: оставить как есть, убрать из sitemap, закрыть от индексации. Для каждой страницы решение может быть разным, и это нормально.

⭐⭐⭐⭐⭐