Если в XML sitemap попадают страницы поиска, архивы с пустым контентом, служебные URL или дубли, это обычно не ломает сайт сразу, но мешает индексации и размывает сигнал для поисковых систем. В WordPress такая проблема часто появляется после установки SEO-плагина, смены темы или добавления кастомных типов записей.
Ниже разберём, как понять, что именно лишнее попало в sitemap, чем отличается исключение через плагин от решения на уровне кода, и как проверить, что карта сайта после правки осталась валидной.
Когда sitemap нужно чистить
Не каждая страница обязана быть в XML sitemap. Туда должны попадать только те URL, которые вы реально хотите видеть в индексе и которые имеют самостоятельную ценность. Если в карте сайта есть технические страницы, поисковик тратит обход на мусор, а в отчётах начинают всплывать странные URL без трафика и без смысла.
Типичные лишние URL
- страницы внутреннего поиска вида
?s=; - архивы автора на сайтах с одним автором;
- страницы пагинации, если они не нужны в индексе;
- служебные таксономии и метки с пустыми архивами;
- кастомные типы записей, которые используются только внутри админки;
- страницы фильтров и параметров, если они генерируются темой или плагином.
Диагностика: где именно появляется лишняя запись
Сначала не правьте код вслепую. Откройте карту сайта и посмотрите, какой именно источник добавляет URL. В WordPress это может быть ядро, SEO-плагин или кастомный код темы. Если у вас установлен Yoast SEO, Rank Math или аналог, у них часто есть собственные настройки для исключения записей, таксономий и архивов.
Проверьте три вещи:
- есть ли URL в самой карте сайта;
- отдаёт ли он
200 OKили уже закрыт от индексации; - не генерируется ли он отдельным плагином или шаблоном темы.
Удобно открыть sitemap в браузере и поискать проблемный URL по фрагменту. Если карта сайта индексная и разбита на несколько файлов, проверьте и дочерние sitemap тоже.
Как исключить URL через SEO-плагин
Если лишние страницы создаёт SEO-плагин, это самый безопасный путь. В большинстве случаев лучше убрать URL из источника генерации, чем потом пытаться «лечить» его редиректами и noindex одновременно.
В Yoast SEO и Rank Math можно отключать отдельные типы записей, таксономии и архивы. Логика простая: если раздел не должен индексироваться, он не должен и попадать в sitemap. Это снижает риск расхождения между картой сайта и мета-роботами.
| Подход | Когда использовать | Минус |
|---|---|---|
| Настройка в SEO-плагине | Если URL создаёт сам плагин | Зависит от конкретного плагина и его интерфейса |
| Код в теме или mu-plugin | Если нужен точечный контроль | Нужно следить за обновлениями и совместимостью |
| Отключение генерации целого типа | Если тип записей вообще не должен индексироваться | Может скрыть полезные страницы, если ошибиться с выбором |
Исключение страниц из sitemap через код
Если плагин не даёт нужной точности, можно убрать конкретные записи из XML sitemap через фильтр wp_sitemaps_posts_query_args. Это работает для стандартной генерации sitemap в WordPress и позволяет исключать записи по ID, типу или другим признакам.
Ниже пример, который убирает из sitemap страницы с конкретными ID. Такой вариант полезен для служебных страниц, которые не должны попадать в карту сайта, но при этом остаются доступными в админке.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'page' === $post_type ) {
$args['post__not_in'] = array( 12, 34, 56 );
}
return $args;
}, 10, 2 );Если нужно убрать целый тип записей из sitemap, проще отключить его генерацию через фильтр wp_sitemaps_post_types:
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['landing'] );
return $post_types;
} );Такой код лучше размещать в небольшом mu-plugin, а не в functions.php активной темы. Тогда он не пропадёт при смене темы.
Когда нужен именно mu-plugin
Если сайт живёт на нескольких темах, а правило исключения должно работать всегда, mu-plugin надёжнее. Он загружается раньше темы и не зависит от дизайна. Для технических правок это обычно правильнее, чем держать логику в шаблоне.
<?php
/**
* Plugin Name: Sitemap exclusions
*/
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['post__not_in'] = array( 101, 102 );
}
return $args;
}, 10, 2 );Пошаговое решение без лишнего риска
- Составьте список URL, которые не должны быть в sitemap.
- Проверьте, создаёт ли их WordPress ядро, SEO-плагин или тема.
- Если есть настройка в плагине — используйте её первой.
- Если настройки нет или она слишком грубая — добавьте фильтр в mu-plugin.
- После правки очистите кеш сайта и кеш CDN, если он есть.
- Заново откройте sitemap и убедитесь, что проблемные URL исчезли.
Проверка результата после внедрения
Недостаточно просто убрать URL из кода. Нужно проверить, что карта сайта действительно обновилась и не отдаёт старую версию из кеша.
- откройте основной sitemap и дочерние файлы;
- поиск по проблемному URL должен ничего не находить;
- проверьте заголовок ответа: sitemap должен отдавать
200 OK; - если используется кеш-плагин, сбросьте его вручную;
- если есть Cloudflare или другой CDN, очистите кеш там тоже;
- проверьте, не остался ли URL в отдельной XML-карте SEO-плагина.
Дополнительно можно посмотреть исходный код sitemap и убедиться, что в нём нет старых ссылок на исключённые страницы. Иногда браузер показывает уже обновлённый файл, а поисковый робот ещё получает старую версию из промежуточного кеша.
Частые ошибки и как их исправить
Убрали URL из sitemap, но оставили индексируемую страницу
Это частая путаница. Отсутствие в sitemap не равно запрету на индексацию. Если страница должна быть закрыта, проверьте ещё и noindex, canonical или редирект — в зависимости от задачи.
Скрыли не тот тип записей
Если вы отключили целый post type, можно случайно убрать полезные страницы. Перед изменением проверьте, какие шаблоны и URL относятся к этому типу. Особенно это важно для кастомных типов, которые используются и для контента, и для служебных разделов.
Оставили кеш старой карты сайта
После правки sitemap часто продолжает отдавать старый список из кеша. Сначала очищайте кеш плагина, потом серверный кеш, потом CDN. И только после этого проверяйте результат.
Правили тему вместо отдельного слоя
Если код лежит в теме, при обновлении или смене шаблона исключения могут исчезнуть. Для технических правил лучше использовать mu-plugin или отдельный мини-плагин.
Что делать с сервисными страницами, если они уже в индексе
Если URL уже попал в индекс, одного удаления из sitemap может быть мало. В таком случае обычно нужно сочетание: убрать страницу из карты сайта, закрыть её от индексации или сделать редирект на релевантный URL. Выбор зависит от того, есть ли у страницы замена и нужен ли она пользователю вообще.
Для массовой технической чистки удобно использовать инструменты, которые помогают убрать дубли и служебные URL на уровне сайта. Например, в Clearfy Pro есть набор функций для SEO-чистки и управления дублями, но применять такие инструменты стоит только после проверки, что они не затронут нужные разделы.
Как не сломать производительность и безопасность
Сама правка sitemap обычно лёгкая, но проблемы появляются, когда начинают подключать тяжёлые плагины ради одной настройки. Если задача точечная, лучше решить её кодом или штатной функцией SEO-плагина, чем ставить ещё один большой модуль.
- не храните исключения в теме, если сайт активно развивается;
- не используйте несколько плагинов, которые одновременно генерируют sitemap;
- не закрывайте важные URL только через robots.txt, если они уже в индексе;
- проверяйте права на редактирование файлов, если добавляете mu-plugin вручную;
- после изменений тестируйте sitemap в режиме инкогнито и без кеша.
Если у вас много технических правок по SEO и чистке сайта, лучше держать их в одном контролируемом месте, а не размазывать по теме и нескольким плагинам. Так проще отлаживать конфликты и понимать, что именно влияет на индексацию.