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

Иногда sitemap в WordPress начинает тянуть в индекс то, что там не должно быть: служебные записи, внутренние типы контента, черновые структуры под фильтры, архивы с пустой ценностью для поиска. Если просто удалить страницу из меню или закрыть её robots.txt, это не решает задачу. Нужен точечный контроль именно над XML sitemap.

Когда это действительно проблема

Сценарий обычно выглядит одинаково: в Search Console появляются URL из нецелевых типов записей, в sitemap.xml видны лишние разделы, а после публикации новых материалов поисковик начинает обходить технические страницы вместо полезных. Это особенно заметно, если на сайте есть custom post types, которые создавались для внутренней логики темы или плагина.

Проверять нужно не только сам файл sitemap, но и то, как WordPress формирует его по типам записей. В ядре с версии 5.5 используется встроенная XML-карта сайта, и она автоматически включает публичные post types, если у них не отключена поддержка sitemap.

Что именно стоит исключать

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

Диагностика: где WordPress берет эти URL

Сначала проверьте, какой sitemap у вас используется: встроенный WordPress или генератор от SEO-плагина. Если карта сайта от плагина, логика исключения может отличаться. Если используется ядро, ориентируйтесь на фильтры WordPress и настройки самого post type.

Для встроенного sitemap откройте /wp-sitemap.xml и посмотрите, какие разделы там перечислены. Если лишний тип записей уже есть в индексе карты сайта, значит он зарегистрирован как публичный и попадает в sitemap по умолчанию.

Полезно также проверить регистрацию типа записей в коде темы или плагина. Ищите параметры public, show_ui, publicly_queryable и show_in_rest. Для sitemap важнее всего именно публичность типа.

Рабочие способы убрать тип записей из sitemap

Есть три нормальных подхода: через регистрацию post type, через фильтр sitemap, либо через настройки SEO-плагина. Выбор зависит от того, где у вас живет логика контента.

СпособКогда подходитПлюсыМинусы
Изменить регистрацию post typeТип записей создаете самиЧистое решение на уровне кодаНужно править плагин или тему, где объявлен CPT
Фильтр wp_sitemaps_post_typesНужно убрать тип из встроенного sitemapНе трогает сам post typeРаботает только для ядра WordPress sitemap
Настройки SEO-плагинаКарта сайта генерируется плагиномБез кода, если опция естьЗависит от конкретного плагина

Вариант 1: убрать тип записей через фильтр WordPress

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

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

    return $post_types;
});

Здесь service_log и internal_note — примеры slug типа записей. Подставляйте свои значения, которые используются в register_post_type().

Вариант 2: отключить sitemap у конкретного CPT при регистрации

Если тип записей создается вашим кодом, лучше сразу задать ему show_in_sitemap в false. Это более явный и читаемый способ, чем последующее исключение фильтром.

<?php
register_post_type('service_log', array(
    'label'           => 'Service logs',
    'public'          => false,
    'show_ui'         => true,
    'show_in_rest'    => true,
    'show_in_sitemap' => false,
    'supports'        => array('title', 'editor'),
));

Важно: show_in_sitemap имеет смысл именно для встроенной карты сайта WordPress. Если sitemap генерирует SEO-плагин, он может игнорировать этот параметр и использовать свои настройки.

Вариант 3: если sitemap делает SEO-плагин

У плагинов логика обычно своя. В таком случае сначала ищите настройку исключения post type из XML sitemap в интерфейсе. Если её нет, придется смотреть документацию конкретного плагина. Универсального фильтра на все случаи здесь нет, и придумывать его не стоит.

Если вы используете Clearfy Pro, имеет смысл проверить, не дублируется ли у вас управление sitemap через несколько инструментов сразу. Когда один плагин генерирует карту сайта, а другой пытается ее править, результат часто становится непредсказуемым. В таких конфигурациях лучше оставить один источник sitemap.

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

  1. Определите, кто генерирует sitemap: ядро WordPress или SEO-плагин.
  2. Найдите slug проблемного типа записей в register_post_type() или в настройках плагина.
  3. Исключите тип через show_in_sitemap => false или фильтр wp_sitemaps_post_types.
  4. Очистите кеш, если sitemap кэшируется на уровне плагина, сервера или CDN.
  5. Проверьте итоговый XML вручную и через Search Console.

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

После правки откройте /wp-sitemap.xml и убедитесь, что раздел с нужным типом записей исчез. Если карта сайта разбита на несколько файлов, проверьте и индексный sitemap, и дочерние XML-файлы.

Дальше проверьте исходный код страницы sitemap и убедитесь, что в ней больше нет ссылок на исключенный тип записей. Если URL все еще присутствуют, значит:

  • изменение внесено не в тот sitemap-генератор;
  • не сброшен кеш;
  • тип записей добавляет в карту не WordPress, а SEO-плагин или отдельный модуль.

Дополнительно можно проверить ответ сервера через curl:

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

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

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

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

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

Поменяли public на false и сломали админку

Если тип записей нужен в админке, не трогайте публичность без понимания последствий. Для исключения из sitemap обычно достаточно show_in_sitemap => false или фильтра. Полное отключение публичности может повлиять на REST API, шаблоны и связанные запросы.

Правили не тот слой

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

Оставили два генератора sitemap одновременно

Когда активны и ядро WordPress, и SEO-плагин, и еще один модуль карты сайта, легко получить дубли или конфликтующие URL. В такой схеме сначала определите единственный источник sitemap, а остальные отключите.

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

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

Еще один момент — кеш. После изменения sitemap очищайте не только плагин кеша, но и серверный кеш, если он есть. Иначе вы будете проверять не актуальный XML, а старую копию.

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

<?php
/**
 * Plugin Name: Sitemap post type exclusions
 */
add_filter('wp_sitemaps_post_types', function( $post_types ) {
    $exclude = array('service_log', 'internal_note');

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

    return $post_types;
});

Такой подход проще сопровождать, чем разбрасывать правки по теме и нескольким плагинам. Если вам нужно больше точечных SEO-правок без ручной возни, можно посмотреть на Clearfy Pro: https://wpshop.ru/plugins/clearfy.

Что делать, если нужен не полный запрет, а частичное исключение

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

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

Как отключить emoji в WordPress и убрать лишние скрипты
03.09.2026
Как отключить XML sitemap для отдельных типов записей в WordPress
07.09.2026
Как исправить 404 и permission error в WordPress REST API
27.08.2026
Как закрыть от индексации страницы поискового фильтра в WordPress
14.08.2026
Как закрыть от индексации технические страницы WordPress без вреда для SEO
17.08.2026