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

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

Задача здесь не в том, чтобы «выключить sitemap целиком», а в том, чтобы точечно убрать из него лишние типы записей и при этом не сломать остальную индексацию. Ниже — рабочие способы для WordPress: через код, через фильтры и с проверкой результата.

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

Сначала стоит убедиться, что проблема именно в sitemap, а не в robots.txt, noindex или дублирующих архивах. XML-карта сама по себе не заставляет страницу индексироваться, но она подсказывает поисковику, что URL важен. Если туда попадает мусор, вы тратите краулинговый бюджет и усложняете диагностику.

Типичные сценарии

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

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

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

В WordPress с 5.5 встроена генерация XML sitemap. Проверять нужно не только главную карту /wp-sitemap.xml, но и вложенные карты типов записей. Откройте карту и посмотрите, какие разделы там есть: posts, pages, custom post types, taxonomies.

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

Быстрая проверка через браузер или curl:

curl -I https://example.com/wp-sitemap.xml

Если карта открывается, дальше смотрите её содержимое и ищите лишние разделы. Для CPT обычно проблема видна сразу: есть отдельный sitemap для типа записей, который вы не хотите отдавать поисковику.

Как отключить отдельный тип записей из sitemap

Самый чистый способ — убрать нужный post type из карты через фильтр wp_sitemaps_post_types. Это штатный хук WordPress, он не требует сторонних библиотек и работает предсказуемо.

Пример: исключаем тип записей internal_note из XML sitemap.

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['internal_note'] );
    return $post_types;
} );

Такой код можно добавить в functions.php дочерней темы, но на практике лучше вынести его в небольшой mu-plugin, чтобы он не потерялся при смене темы.

Вариант через mu-plugin

Создайте файл wp-content/mu-plugins/disable-sitemap-post-type.php и положите туда код:

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['internal_note'] );
    return $post_types;
} );

Если у вас несколько типов записей, можно убрать сразу все лишние:

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    $exclude = array( 'internal_note', 'landing_draft', 'partner_page' );

    foreach ( $exclude as $post_type ) {
        if ( isset( $post_types[ $post_type ] ) ) {
            unset( $post_types[ $post_type ] );
        }
    }

    return $post_types;
} );

Если нужно убрать только часть записей, а не весь тип

Иногда post type полезен сам по себе, но в sitemap не должны попадать отдельные записи: например, служебные материалы, тестовые страницы или контент с нестабильным статусом. В этом случае фильтр wp_sitemaps_posts_query_args позволяет изменить запрос к выборке URL.

Допустим, у записей есть мета-поле _hide_from_sitemap со значением 1. Тогда можно исключить такие записи из карты сайта:

add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
    if ( 'post' !== $post_type ) {
        return $args;
    }

    $args['meta_query'] = array(
        array(
            'key'     => '_hide_from_sitemap',
            'compare' => 'NOT EXISTS',
        ),
    );

    return $args;
}, 10, 2 );

Это уже более точечный сценарий, но здесь важно не переусложнить логику. Если вам нужно скрывать записи по нескольким признакам, проверьте, не проще ли вообще не включать этот тип в sitemap и отдельно управлять индексацией через мета-теги и robots.

Сравнение подходов

ПодходКогда подходитПлюсыМинусы
Фильтр wp_sitemaps_post_typesНужно убрать целый тип записейПросто, прозрачно, штатный механизмНе подходит для точечного исключения отдельных постов
Фильтр wp_sitemaps_posts_query_argsНужно скрыть часть записей внутри типаГибко, можно завязать на мета-поляНужно аккуратно проектировать логику выборки
SEO-плагинКарта сайта уже управляется плагиномУдобно для редакторовЗависит от конкретного плагина и его настроек

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

После изменения кода не ограничивайтесь открытием главной карты. Проверять нужно именно те вложенные sitemap, которые раньше содержали лишние URL.

  • откройте /wp-sitemap.xml и убедитесь, что раздел исчез;
  • проверьте HTTP-ответ нужного sitemap через curl -I;
  • посмотрите исходный XML и убедитесь, что URL больше не выводятся;
  • если используется кэш, очистите его на уровне плагина и сервера;
  • в Search Console отправьте карту заново, если она уже была добавлена.

Пример проверки конкретного URL в sitemap:

curl -s https://example.com/wp-sitemap-posts-post-1.xml | grep -n "test-post"

Если grep ничего не возвращает, но URL всё ещё виден в браузере, почти наверняка вы смотрите закэшированную версию. Тогда сначала очищайте page cache, object cache и CDN, а уже потом повторяйте проверку.

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

Отключили не тот тип записей

В WordPress slug post type и его название в коде — это не всегда то, что видно в админке. Проверьте регистрацию типа записей: именно ключ, который передан в register_post_type(), нужно использовать в фильтре.

Код добавили в тему, а потом потеряли при обновлении

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

Сайт использует SEO-плагин, а вы правите встроенный sitemap

Если плагин уже подменяет карту сайта, фильтры ядра могут не дать ожидаемого эффекта. В таком случае сначала проверьте, кто именно генерирует XML. Иногда проще отключить встроенную карту WordPress и управлять sitemap средствами одного плагина, чем смешивать два механизма.

Удалили URL из sitemap, но они всё равно индексируются

Это нормальная ситуация. Удаление из карты сайта не равно удалению из индекса. Если страница должна исчезнуть из поиска, дополнительно проверьте noindex, каноникал, внутренние ссылки и статус ответа сервера.

Безопасность и производительность

Сам фильтр sitemap почти не нагружает сайт, если вы не добавляете тяжёлые запросы в логику исключений. Опасность обычно не в коде, а в том, что его начинают усложнять: тянут мета-запросы, проверяют роли пользователей, делают лишние обращения к базе на каждом запросе.

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

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

Если вам нужно не только убрать дубли и лишние URL, но и навести порядок в технических настройках сайта, удобно делать это через один набор инструментов, а не разрозненные сниппеты. Например, у Clearfy Pro есть набор функций для чистки и SEO-настроек: https://wpshop.ru/plugins/clearfy?utm_source=wpdeveloper.ru&utm_medium=article&utm_campaign=otklyuchit-xml-sitemap-dlya-otdelnyh-tipov-zapisei-wordpress.

Главная идея простая: сначала определите, какой именно контент лишний в sitemap, затем выберите самый короткий способ исключения. Для целого типа записей достаточно одного фильтра. Для отдельных материалов — аккуратной логики в запросе. После этого обязательно проверьте XML руками и через curl, а не только по ощущениям из админки.

Как отключить pingback и trackback в WordPress без лишних 404 и спама
16.09.2026
Как отключить REST API для гостей в WordPress без поломки сайта
12.09.2026
Как отключить XML sitemap для отдельных типов записей в WordPress без поломки индексации
09.09.2026
Как закрыть от индексации поисковые страницы WordPress без поломки сайта
30.08.2026
Как отключить дубли от категорий в URL WordPress без потери индексации
27.08.2026
×
Сделай WordPress мощнее!

Скидка -20% на топовые премиум плагины

Выбрать плагин сейчас ⋙