Если в XML sitemap попадают служебные страницы, тестовые записи, вложения или другие URL, которые не должны индексироваться, поисковик получает лишний шум. На небольшом сайте это выглядит как мелочь, но на практике мешает быстрее находить важные страницы и усложняет контроль индексации.
Задача здесь не в том, чтобы «выключить sitemap вообще», а в том, чтобы оставить в карте сайта только те типы контента, которые реально нужны для поиска. Ниже — рабочие способы для WordPress: через SEO-плагин и через код, а также как проверить, что изменения применились.
Когда sitemap нужно чистить, а не трогать целиком
XML sitemap полезен, пока он отражает структуру сайта. Проблемы начинаются, когда туда попадают:
- страницы вложений с пустым или дублирующимся контентом;
- служебные записи и черновики, если их случайно публикуют;
- кастомные типы записей, которые не должны индексироваться;
- архивы или таксономии, которые уже закрыты от индексации, но продолжают попадать в карту сайта;
- страницы с параметрами или технические URL, если они генерируются плагином или темой.
Если карта сайта разрастается за счет мусора, это не всегда приводит к санкциям, но почти всегда усложняет диагностику. В Search Console становится труднее понять, какие URL действительно важны, а какие просто создают фон.
Диагностика проблемы перед изменениями
Сначала проверьте, что именно попадает в sitemap. Откройте основной XML-индекс, обычно это /sitemap_index.xml или аналогичный адрес, если используется SEO-плагин. Дальше смотрите не только список файлов, но и конкретные URL внутри нужного sitemap.
Полезно проверить три вещи:
- какие типы контента вообще включены в карту сайта;
- нет ли там вложений, медиа-страниц и других технических URL;
- не дублируется ли один и тот же контент в нескольких sitemap.
Если сайт использует Yoast SEO, Rank Math или другой SEO-плагин, именно он чаще всего управляет картой сайта. В этом случае лучше сначала найти настройку в интерфейсе, а уже потом идти в код. Если же карта сайта формируется темой или кастомным плагином, понадобится фильтр WordPress.
Способ 1. Отключить нужный тип записей в SEO-плагине
Это самый безопасный путь, если у вас уже стоит плагин, который управляет sitemap. Логика простая: отключаете ненужный тип контента в настройках индексации или sitemap, сохраняете изменения и проверяете карту сайта заново.
В большинстве случаев это работает для:
- custom post types;
- медиа-вложений;
- таксономий;
- архивов автора или даты, если плагин их вообще добавляет в карту сайта.
Плюс этого способа в том, что он переживает обновления плагина и не требует правок темы. Минус — не все плагины дают тонкую настройку для каждого типа URL.
Что делать, если в плагине нет нужной галочки
Тогда переходите к фильтру WordPress. Для ядра и SEO-плагинов часто есть возможность исключить тип записи программно. Ниже пример для сайта, где нужно убрать из sitemap вложения и один кастомный тип записи.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
unset( $post_types['review'] ); // пример кастомного типа записи
return $post_types;
} );
Этот код подходит для случаев, когда sitemap генерирует встроенный механизм WordPress. Если у вас SEO-плагин, у него могут быть свои фильтры. Важно не смешивать несколько способов сразу: сначала отключите лишнее в одном месте, затем проверьте результат.
Способ 2. Исключить отдельные записи из sitemap по ID
Иногда проблема не в типе записи, а в нескольких конкретных страницах. Например, у вас есть служебная страница, тестовая публикация или временный материал, который не должен попадать в карту сайта, но тип записи в целом нужен.
Для встроенного sitemap WordPress можно исключить записи по ID через фильтр wp_sitemaps_posts_query_args.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['post__not_in'] = array( 123, 456 );
}
return $args;
}, 10, 2 );
Здесь важно понимать ограничение: вы исключаете конкретные записи из генерации sitemap, но сами страницы остаются доступными по прямой ссылке, если их не закрыть отдельно. Если нужно именно убрать их из индекса, обычно дополнительно ставят noindex или закрывают страницу на уровне логики публикации.
Сравнение подходов: плагин, код, компромисс
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройка в SEO-плагине | Есть Yoast SEO, Rank Math или похожий плагин | Безопасно, не требует кода, легко поддерживать | Не всегда хватает гибкости |
| Фильтры WordPress | Нужна точечная настройка по типам или ID | Точно решает задачу, не зависит от интерфейса | Нужно аккуратно тестировать после обновлений |
| Отключить sitemap целиком | Очень редкий случай, например, закрытый сайт | Просто технически | Почти всегда лишает сайт полезного сигнала для поиска |
Пошаговое решение без лишнего риска
- Определите, какой именно sitemap генерирует URL: ядро WordPress или SEO-плагин.
- Найдите типы записей, таксономии или конкретные страницы, которые не должны попадать в карту сайта.
- Сначала отключите их в настройках плагина, если это возможно.
- Если нужной настройки нет, добавьте фильтр в дочернюю тему или небольшой mu-plugin.
- Очистите кэш сайта и CDN, если они используются.
- Проверьте sitemap в браузере и в Search Console.
Если вы вносите код, лучше делать это не в functions.php активной темы, а в небольшом отдельном плагине или в mu-plugins. Так изменение не потеряется при смене темы.
Как проверить, что решение сработало
После изменений не ограничивайтесь визуальной проверкой в браузере. Нужна проверка на уровне фактического XML.
- Откройте sitemap и убедитесь, что лишний тип записи исчез из списка.
- Проверьте несколько URL вручную: они не должны присутствовать в XML.
- Если сайт уже отправлен в Search Console, дождитесь переобхода и посмотрите, не остались ли старые URL в отчете по sitemap.
- Если используется кэш, убедитесь, что вы смотрите не старую версию XML.
Для быстрой проверки можно использовать поиск по странице sitemap в браузере или команду curl:
curl -s https://example.com/sitemap_index.xml | grep -E 'attachment|review|123'
Если grep ничего не возвращает, это еще не финальная гарантия, но хороший признак, что лишние URL больше не генерируются.
Частые ошибки и как их исправить
Отключили sitemap в одном месте, но URL остались
Так бывает, когда sitemap генерирует не тот компонент, который вы правите. Например, вы отключили тип записи в SEO-плагине, а карта сайта на самом деле идет из ядра WordPress или другого плагина.
Что делать: сначала выяснить источник sitemap. Если в HTML-коде страницы или в заголовках есть ссылки на sitemap от конкретного плагина, правьте именно его настройки или фильтры.
Скрыли URL из sitemap, но не закрыли от индексации
Это нормальная ситуация, если задача была только убрать шум из карты сайта. Но если URL не должен индексироваться вообще, одного исключения из sitemap мало. Нужен noindex, корректный статус ответа или удаление страницы из публикации.
Сломали sitemap из-за неверного фильтра
Частая ошибка — возвращать не тот тип данных или удалять из массива несуществующий ключ. В результате sitemap может перестать открываться или начать отдавать пустой XML.
Проверяйте код на тестовой среде и не добавляйте сразу несколько фильтров без понимания, какой из них за что отвечает.
Не очистили кэш
Если сайт использует page cache, object cache или CDN, старая версия sitemap может жить отдельно от кода. После правок обязательно очищайте кэш на всех уровнях.
Практические советы по производительности и безопасности
Сама по себе карта сайта не должна быть тяжелой, но на крупных проектах она может создавать лишнюю нагрузку, если в нее попадают тысячи ненужных URL. Поэтому лучше не генерировать мусор, чем потом его фильтровать.
Если вы часто меняете структуру сайта, держите логику sitemap в отдельном мини-плагине или mu-plugin. Это проще сопровождать и безопаснее для обновлений темы. Для сайтов с большим количеством дублей и служебных страниц полезно дополнительно проверить настройки SEO-плагина и убрать лишние архивы, таксономии и медиа-страницы из индексации.
Если нужен более широкий набор инструментов для чистки дублей и технической оптимизации WordPress, можно посмотреть на Clearfy Pro, но только если вам действительно нужен единый набор настроек, а не точечная правка через код.
Когда лучше не трогать sitemap вручную
Если сайт маленький, структура простая и в карте сайта уже нет мусора, лишняя кастомизация не нужна. Чем больше ручных исключений, тем выше шанс забыть, почему конкретный URL исчез из sitemap через полгода после правки.
Ручное исключение оправдано, когда есть понятная причина: технические страницы, закрытые разделы, тестовые записи, отдельные типы контента без SEO-ценности. Во всех остальных случаях лучше сначала решить проблему на уровне структуры контента, а не маскировать ее фильтрами.