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

|

Ситуация типовая: сайт уже живёт, карта сайта генерируется автоматически, а в индекс регулярно уезжают URL, которые там не нужны. Чаще всего это служебные записи, внутренние материалы, черновые типы контента, архивы с пустой ценностью или кастомные post type, которые должны существовать на сайте, но не должны попадать в XML Sitemap.

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

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

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

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

Диагностика: где именно формируется карта сайта

В WordPress карта сайта может генерироваться ядром или SEO-плагином. Это принципиально, потому что способ отключения зависит от источника. Сначала проверьте, какой URL у sitemap открыт на сайте:

Если вы не уверены, откройте исходный код страницы карты сайта или посмотрите HTTP-ответ. Для ядра WordPress и SEO-плагинов логика отключения будет разной.

Что проверить до изменений

Способ 1: отключить тип записей из sitemap через код

Если sitemap генерирует ядро WordPress, можно убрать конкретный тип записей через фильтр wp_sitemaps_post_types. Это самый прямой и предсказуемый вариант, если вам нужен точечный контроль без лишних зависимостей.

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['service_note'] );
    unset( $post_types['internal_doc'] );

    return $post_types;
} );

Код можно добавить в дочернюю тему, mu-plugin или собственный мини-плагин. Важно использовать реальные имена post type, а не ярлыки из админки. Если тип записей называется service_note, именно этот ключ и нужно убирать.

Если нужно отключить только отдельные записи, а не весь тип, используйте фильтр wp_sitemaps_posts_query_args и исключайте конкретные ID или статус. Но это уже более тонкая настройка, и её стоит применять только когда есть чёткое понимание, какие URL должны остаться.

Пример исключения отдельных записей

<?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 );

Этот вариант полезен, если у вас есть несколько служебных материалов внутри обычных записей. Но не злоупотребляйте им: если исключений становится много, лучше пересмотреть саму структуру контента.

Способ 2: отключить тип записей в SEO-плагине

Если sitemap отдаёт SEO-плагин, правильнее управлять им через его настройки. У большинства плагинов есть отдельный переключатель для post type в разделе XML Sitemap. Это проще для редакторов и безопаснее для сопровождения.

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

ПодходКогда подходитМинус
Код через фильтр WordPressНужен точный контроль, без зависимости от интерфейсаТребует поддержки в коде
Настройка в SEO-плагинеКонтентом управляет редакция, нужен понятный интерфейсЗависит от конкретного плагина
robots.txtНужно скрыть обход, но не менять генерацию sitemapНе убирает URL из самой карты сайта

Если у вас уже стоит плагин для технической чистки сайта, например Clearfy Pro, проверьте, нет ли там отдельного управления sitemap и типами записей. Это удобнее, чем держать разрозненные правки в нескольких местах. Ссылка на продукт: Clearfy Pro.

Пошаговое решение без лишнего риска

  1. Определите источник sitemap: ядро WordPress или SEO-плагин.
  2. Составьте список post type, которые не должны попадать в карту сайта.
  3. Сделайте правку в коде или в настройках плагина.
  4. Очистите кеш сайта и, если есть, кеш CDN.
  5. Проверьте XML Sitemap вручную и через инструменты для вебмастеров.

Если правите кодом, лучше вынести его в отдельный мини-плагин. Так вы не потеряете настройку при смене темы и не забудете, где именно была сделана правка.

<?php
/**
 * Plugin Name: Disable selected post types in sitemap
 */

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    $exclude = array( 'service_note', 'internal_doc' );

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

    return $post_types;
} );

Такой вариант проще сопровождать: код лежит отдельно, его легко отключить и он не зависит от шаблона темы.

Как проверить, что всё сработало

Проверка должна быть не формальной, а по факту. Откройте sitemap в браузере и найдите, исчез ли нужный раздел. Затем проверьте, что:

Если у вас WordPress 5.5+ и используется стандартный sitemap, можно дополнительно проверить ответ через curl:

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

Нужен код ответа 200 OK. Затем откройте сам XML и убедитесь, что нужный post type отсутствует. Если изменения не видны, почти всегда виноват кеш — серверный, плагинный или CDN.

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

Путают исключение из sitemap и noindex

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

Используют неправильный ключ post type

В коде нужно указывать системное имя типа записей, а не его название в админке. Если тип называется internal_doc, а вы пишете Internal Docs, фильтр просто не сработает.

Правят robots.txt вместо sitemap

Это частая ошибка. Disallow в robots.txt не убирает URL из XML Sitemap. Поисковик всё равно увидит их в карте сайта и может попытаться обойти. Если цель — убрать URL из sitemap, правьте именно генератор sitemap.

Не очищают кеш после изменений

Если сайт использует кеширование страниц или CDN, старая версия sitemap может отдаваться ещё какое-то время. После правки обязательно сбросьте кеш и проверьте ответ заново.

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

Технические правки для sitemap лучше делать минимальными и локальными. Не вносите изменения в ядро темы и не редактируйте файлы плагина напрямую: обновление всё перетрёт. Для production-проектов безопаснее использовать mu-plugin или отдельный мини-плагин.

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

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

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

Если post type содержит полезные страницы, которые должны быстро попадать в индекс, не убирайте его только потому, что он «не нравится» в отчётах. Иногда проблема не в sitemap, а в плохой структуре контента, слабой внутренней перелинковке или дублирующихся шаблонах. В таком случае сначала исправляют саму модель контента, а уже потом — карту сайта.

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

Как отключить автообновление плагинов WordPress без риска для безопасности
03.09.2026
Как удалить старые ревизии записей в WordPress для оптимизации базы данных
18.09.2026
Как отладить проблемы со загрузкой изображений в WordPress: практическое руководство
21.08.2026
Автоматическое изменение стоимости товаров в WooCommerce по условиям
03.10.2026
Как создать автоматический бэкап в WordPress с помощью плагинов
27.08.2026
×
-15%
на премиум-тему
Bono

Создай магазин мечты
на WordPress!

↓ ↓ ↓ ↓ ↓
Купить со скидкой »