Когда в XML Sitemap попадают служебные записи, пустые рубрики, тестовые CPT или архивы, которые вы не хотите отдавать в поиск, карта сайта начинает мешать, а не помогать. Проблема обычно не в самом sitemap, а в том, что WordPress по умолчанию включает в него слишком широкий набор объектов. Если сайт уже живой, с историей и правками шаблона, проще точечно исключить лишнее, чем отключать sitemap целиком.
Как понять, что в sitemap попало лишнее
Сначала проверьте, что именно WordPress отдает сейчас. Откройте /wp-sitemap.xml или карту сайта, которую генерирует SEO-плагин, и посмотрите, какие разделы там есть. Частая картина: в индексе оказываются страницы вложений, тестовые типы записей, технические таксономии, архивы автора на небольшом сайте или рубрики без контента.
Диагностика здесь простая:
- откройте sitemap в браузере и найдите лишние URL;
- сравните список с тем, что реально должно индексироваться;
- проверьте, не дублируются ли эти URL в robots.txt или в настройках SEO-плагина;
- посмотрите, не закрыты ли нужные страницы от индексации случайно.
Если sitemap генерирует SEO-плагин, логика исключения может быть в его настройках. Если используется встроенный XML Sitemap WordPress, управлять списком можно через фильтры.
Что лучше: настройки плагина или код
Если задача типовая, безопаснее сначала использовать интерфейс SEO-плагина. Но когда нужно убрать только часть объектов, а остальное оставить без изменений, код дает больше контроля и меньше побочных эффектов.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Нужно скрыть целый тип контента или таксономию | Не всегда есть точечная настройка |
| Код через фильтры WordPress | Нужно исключить конкретный post type, taxonomy или архив | Нужно аккуратно тестировать после обновлений |
| Отключить sitemap целиком | Сайт маленький или карта сайта генерируется в другом месте | Можно потерять полезный сигнал для поисковиков |
Пошагово: как убрать лишние типы записей из XML Sitemap
Если у вас встроенная карта сайта WordPress, можно исключить ненужные типы записей через фильтр wp_sitemaps_post_types. Добавьте код в functions.php дочерней темы или в небольшой mu-plugin.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
unset( $post_types['product'] ); // если это не нужно в sitemap
unset( $post_types['my_test_cpt'] );
return $post_types;
} );Здесь важно не удалять вслепую все нестандартные типы. Если у вас, например, product — это основной контент, его исключение только навредит. Сначала проверьте, какие post type реально должны попадать в карту сайта.
Как убрать отдельные таксономии
Для таксономий используйте фильтр wp_sitemaps_taxonomies. Это полезно, если в sitemap попадают технические рубрики, служебные метки или таксономии, которые не должны индексироваться.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['internal_topic'] );
return $taxonomies;
} );Если вы исключаете таксономию из sitemap, но она уже доступна в индексе, одного этого шага мало. Нужно отдельно проверить мета-теги noindex, каноникал и внутренние ссылки на эти страницы.
Как скрыть конкретные архивы и записи
Иногда нужно убрать не весь тип, а только часть объектов. Для этого удобнее фильтр wp_sitemaps_posts_query_args. Он позволяет изменить запрос к записям, которые попадают в sitemap.
<?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 и уберите ее из внутренних ссылок.
Если sitemap генерирует SEO-плагин
У популярных SEO-плагинов свои настройки. Обычно там можно отключить типы записей, таксономии и архивы в разделе карты сайта. Это удобнее кода, если нужно быстро убрать целый блок URL и не трогать тему.
Но есть нюанс: если вы уже используете фильтры WordPress, а потом включаете аналогичную настройку в плагине, легко получить путаницу. В итоге кажется, что объект отключен, но он исчезает по другой причине, и при обновлении плагина вы не понимаете, что именно сломалось.
Практика такая: выбирайте один источник правды. Либо настраиваете SEO-плагин, либо управляете sitemap через код. Смешивать можно, но только если вы точно понимаете, какой слой за что отвечает.
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой. Откройте sitemap еще раз и убедитесь, что лишний раздел исчез. Затем проверьте несколько URL вручную:
- страница sitemap открывается без ошибок;
- исключенные типы записей больше не перечислены;
- нужные записи остались в карте сайта;
- в Search Console нет новых ошибок по sitemap;
- если URL уже были в индексе, они не возвращаются через внутренние ссылки.
Для быстрой проверки можно использовать curl:
curl -I https://example.com/wp-sitemap.xmlЕсли вы меняли код, очистите кеш страницы и объектный кеш, если он есть. Иначе вы можете смотреть на старую версию sitemap и сделать ложный вывод, что фильтр не сработал.
Частые ошибки и как их исправить
Удалили не тот тип записей
Самая частая ошибка — убрать из sitemap тип контента, который реально нужен для индексации. Это особенно легко сделать на сайтах с несколькими CPT. Перед правкой выпишите список post type и проверьте, какие из них должны быть видимыми для поисковиков.
Ожидали, что sitemap решит проблему индексации
Карта сайта — это подсказка для поисковика, а не жесткий запрет. Если URL уже есть во внутренних ссылках, в старых внешних ссылках или в кеше поисковика, он может оставаться в индексе. Для удаления из поиска нужны дополнительные меры: noindex, каноникал, удаление ссылок и, при необходимости, 410/404.
Правили не тот файл
Если код добавлен в родительскую тему, обновление может его затереть. Для таких правок лучше использовать дочернюю тему или mu-plugin. Это особенно важно для фильтров sitemap, потому что они должны переживать обновления темы.
Сломали sitemap после обновления плагина
Если SEO-плагин тоже управляет картой сайта, проверьте, не конфликтует ли он с фильтрами WordPress. Иногда плагин отключает встроенный sitemap, а вы продолжаете править именно его. В результате изменения не влияют на реальный файл.
Как сделать правку безопаснее и быстрее
Для таких изменений лучше не лезть в основную тему. Используйте mu-plugin или отдельный мини-плагин: так код не потеряется при обновлении и его проще отключить, если что-то пошло не так. Если сайт большой, после правки очистите кеш на уровне сервера, CDN и плагина кеширования, иначе поисковик и вы сами можете увидеть старую версию.
Если вам часто приходится чистить дубли, служебные страницы и мусорные URL, удобнее держать это в одном месте. В таких сценариях обычно помогает набор инструментов вроде Clearfy Pro, но только если вы понимаете, какие именно функции включаете и зачем: карта сайта, архивы, служебные страницы и мета-теги должны настраиваться отдельно, а не одним общим переключателем. Ссылка для проверки: Clearfy Pro.
Если нужен короткий чек-лист перед публикацией правки, используйте такой порядок:
- определить, что именно лишнее в sitemap;
- выбрать один способ управления: плагин или код;
- внести правку в дочернюю тему или mu-plugin;
- очистить кеш;
- проверить sitemap в браузере и через
curl; - убедиться, что нужные URL остались доступны;
- проверить Search Console на ошибки карты сайта.
Если задача не в полном отключении sitemap, а в точечной чистке, такой подход обычно дает предсказуемый результат без лишних побочных эффектов.