Ситуация типовая: карта сайта в WordPress есть, но в ней оказываются лишние разделы — attachment, теги, архивы авторов, иногда даже служебные таксономии. Полностью отключать sitemap не хочется, потому что поисковику всё равно нужен нормальный список важных URL. В этой статье разберём, как убрать только ненужные XML sitemap и не задеть остальную индексацию.
Когда это вообще нужно
Чаще всего проблема появляется после установки SEO-плагина или после миграции сайта. В админке всё выглядит нормально, но в /sitemap_index.xml появляются карты, которые не несут ценности для поиска. Это не всегда критично, но лишние URL в sitemap создают шум: поисковик тратит краулинговый бюджет на страницы, которые вы и так не хотите продвигать.
Типичные сценарии:
- в sitemap попали медиа-страницы вложений;
- отдельно индексируются теги, хотя они пустые или дублируют рубрики;
- в карту сайта попали архивы авторов на сайте с одним автором;
- нужно убрать служебные таксономии или CPT-архивы, но оставить записи и страницы.
Диагностика: что именно попало в sitemap
Сначала не правьте код вслепую. Откройте индекс карты сайта и посмотрите, какие подкарты реально отдаются:
https://example.com/sitemap_index.xmlЕсли у вас Yoast SEO, Rank Math или другой SEO-плагин, структура будет зависеть от него. Важно понять, где именно лежит лишний раздел: в индексной карте, в карте таксономии или в карте медиа.
Проверка через браузер и curl
Быстрый способ — посмотреть ответ сервера и убедиться, что карта вообще доступна:
curl -I https://example.com/sitemap_index.xmlЕсли карта отдается с 200 OK, дальше смотрите содержимое. Если там есть ненужные ссылки, задача не в robots.txt, а в настройке генерации sitemap.
Как отключить отдельные sitemap без отключения всей карты сайта
Есть три рабочих подхода: через SEO-плагин, через фильтры темы/му-плагина и через отключение конкретного типа контента от публичной карты сайта. Выбор зависит от того, чем именно генерируется sitemap.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| Настройки SEO-плагина | Если карта генерируется Yoast SEO, Rank Math и т.п. | Без кода, быстро | Не всегда есть точечный контроль |
| Код через фильтры | Если нужен точный список исключений | Контроль на уровне темы или mu-plugin | Нужно аккуратно тестировать |
| Отключение публичности типа контента | Если лишний sitemap идет от CPT или таксономии | Логично и прозрачно | Может повлиять на архивы и ссылки |
Вариант 1. Убрать лишнее в настройках SEO-плагина
Если у вас Yoast SEO, зайдите в настройки отображения в поиске и отключите ненужные типы контента или таксономии. Для медиафайлов обычно помогает отключение страниц вложений или редирект attachment URL на родительскую запись.
Если у вас Rank Math, проверьте разделы, связанные с sitemap и индексируемыми типами записей. Логика та же: не трогать всю карту, а убрать только те сущности, которые не должны попадать в индекс.
Это самый безопасный путь, если плагин уже умеет делать нужную фильтрацию. Но если интерфейс не дает убрать конкретный тип, проще перейти к коду.
Вариант 2. Исключить типы записей из sitemap через код
Если сайт использует встроенный WordPress sitemap или плагин, который опирается на стандартные фильтры, можно убрать отдельные типы записей из карты сайта. Для встроенного sitemap WordPress есть фильтр wp_sitemaps_post_types.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
unset( $post_types['product'] ); // если это не нужно именно в sitemap
return $post_types;
} );Этот код лучше размещать в небольшом mu-plugin или в дочерней теме, а не в functions.php активной темы, если тема может меняться. После этого WordPress перестанет генерировать sitemap для указанных типов записей.
Вариант 3. Убрать отдельные таксономии
Если проблема в тегах или другой таксономии, используйте фильтр wp_sitemaps_taxonomies. Это полезно, когда рубрики нужны, а теги — нет.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['post_format'] );
return $taxonomies;
} );Здесь важно не путать sitemap и архивы. Удаление таксономии из карты сайта не отключает сам архивный URL, если он доступен на сайте. Если нужно закрыть и архивы, это уже отдельная задача.
Если нужен точечный контроль в теме или плагине
Иногда удобнее не полагаться на глобальные фильтры, а явно отключить sitemap для конкретного типа контента. Это полезно для кастомных post type, которые существуют только для внутренней логики сайта и не должны светиться в поиске.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
$exclude = array( 'portfolio', 'event' );
foreach ( $exclude as $post_type ) {
if ( isset( $post_types[ $post_type ] ) ) {
unset( $post_types[ $post_type ] );
}
}
return $post_types;
} );Такой вариант проще сопровождать, если список исключений небольшой и понятный. Но не стоит превращать его в свалку из десятков условий. Если исключений много, лучше вынести логику в отдельный mu-plugin и задокументировать, зачем каждый тип убран.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием главной карты сайта. Проверьте конкретные URL, которые должны исчезнуть.
- Откройте
/sitemap_index.xmlи убедитесь, что лишняя подкарта пропала. - Проверьте прямой URL подкарты, например
/post-sitemap.xmlили/taxonomy-sitemap.xml. - Сделайте
curl -Iи убедитесь, что ответ не стал404там, где карта должна остаться доступной. - Если используете Search Console, отправьте карту сайта на повторную проверку после обновления.
Важно: если вы убрали тип записи из sitemap, но он всё ещё доступен по прямой ссылке, это нормально. Sitemap — это только список для обхода, а не механизм блокировки.
Частые ошибки и как их исправить
Отключили sitemap через robots.txt
Это частая путаница. Robots.txt не удаляет URL из уже известной поисковику карты сайта и не управляет генерацией sitemap. Он только ограничивает обход. Если нужно убрать конкретный раздел из карты, правьте генератор sitemap, а не robots.txt.
Сломали карту сайта целиком
Так бывает, если фильтр возвращает пустой массив или код вставлен с ошибкой. Проверьте, что вы удаляете только нужные ключи, а не перезаписываете весь массив. Для теста сначала отключите один тип, потом второй.
Убрали таксономию, но архивы остались в индексе
Это ожидаемо. Sitemap и индексация архивов — разные вещи. Если архивы не нужны, дополнительно проверьте настройки SEO-плагина, мета robots и внутренние ссылки на эти страницы.
Вставили код в активную тему и забыли про обновление
После смены темы правка исчезнет. Для технических исключений лучше использовать mu-plugin или отдельный мини-плагин. Это надежнее и проще сопровождать.
Чек-лист перед публикацией изменений
- Понял, какой именно sitemap нужно убрать.
- Проверил, не отключаю ли я всю карту сайта случайно.
- Сделал правку через настройку плагина или фильтр WordPress.
- Проверил
/sitemap_index.xmlи конкретные подкарты. - Убедился, что важные записи и страницы остались в sitemap.
- Обновил карту сайта в Search Console, если это нужно.
Практические советы по безопасности и производительности
Не храните такие правки в случайных сниппетах без контроля версий. Если сайт рабочий, лучше держать технические изменения в отдельном mu-plugin или в репозитории. Так проще понять, кто и зачем отключил конкретный sitemap, и не потерять настройку после обновления темы.
Если на сайте много лишних архивов, иногда выгоднее не только убрать их из sitemap, но и пересмотреть структуру контента. Чем меньше мусора в карте сайта, тем проще поддерживать индексацию и тем меньше шансов, что поисковик будет регулярно обходить бесполезные URL.
Если вам нужен более широкий набор технических чисток WordPress — от дублей до лишних архивов и служебных элементов — в таких задачах часто используют инструменты уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какой именно sitemap вы отключаете и почему.