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

Когда в XML-карте сайта начинают появляться служебные записи, черновые CPT, тестовые таксономии или контент, который не должен попадать в поиск, проблема обычно не в самой карте сайта, а в настройках генерации и регистрации типов контента. В WordPress это решается по-разному: через параметры register_post_type(), через фильтры ядра или через SEO-плагины. Ниже — рабочие варианты без лишней магии.

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

Отключать отдельные типы записей из XML-карты стоит не «на всякий случай», а когда есть понятная причина:

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

Диагностика: что именно попало в карту сайта

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

Как быстро понять источник

  • Откройте /wp-sitemap.xml. Если там стандартная структура WordPress, работает ядро.
  • Если у вас есть Yoast SEO, Rank Math или другой SEO-плагин, у него может быть свой sitemap и отдельные настройки.
  • Проверьте исходный код страницы sitemap: иногда плагин подменяет стандартный URL через rewrite.

Если в карте сайта виден нужный тип записей, но вы не уверены, откуда он берется, сначала проверьте регистрацию CPT и настройки SEO-плагина. Часто проблема не в sitemap, а в том, что тип записей зарегистрирован с publicly_queryable и show_in_rest, а потом автоматически подхватывается генератором карты.

Пошаговое решение через регистрацию типа записей

Если тип записей вы регистрируете сами, самый чистый способ — сразу исключить его из sitemap на уровне register_post_type(). Это лучше, чем потом «вычищать» уже сгенерированную карту.

add_action('init', function () {
    register_post_type('internal_note', [
        'label'           => 'Внутренние заметки',
        'public'          => false,
        'show_ui'         => true,
        'show_in_menu'    => true,
        'show_in_rest'    => false,
        'has_archive'     => false,
        'rewrite'        => false,
        'exclude_from_search' => true,
        'publicly_queryable'  => false,
        'show_in_nav_menus'   => false,
        'show_in_sitemap'     => false,
        'supports'        => ['title', 'editor'],
    ]);
});

Ключевой момент здесь — 'show_in_sitemap' => false. Для встроенной карты сайта WordPress это корректный и понятный способ убрать тип записей из XML. При этом сам CPT может оставаться в админке, если он нужен редакторам или для внутренних процессов.

Если тип записей уже существует: фильтр для sitemap

Когда CPT уже зарегистрирован в теме или плагине, менять его регистрацию не всегда удобно. Тогда используйте фильтр wp_sitemaps_post_types. Он позволяет убрать конкретный тип записей из списка, который попадет в карту сайта.

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

    return $post_types;
});

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

Как убрать только отдельные записи, а не весь тип

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

Для встроенной карты сайта можно использовать фильтр wp_sitemaps_posts_query_args и исключить нужные записи через post__not_in.

add_filter('wp_sitemaps_posts_query_args', function ($args, $post_type) {
    if ($post_type === 'post') {
        $args['post__not_in'] = [123, 456, 789];
    }

    return $args;
}, 10, 2);

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

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

СпособКогда подходитПлюсыМинусы
show_in_sitemap => falseВы сами регистрируете CPTЧисто, прозрачно, без лишних фильтровНужно менять код регистрации
wp_sitemaps_post_typesТип уже существуетНе трогает исходный CPTРаботает только для встроенного sitemap
wp_sitemaps_posts_query_argsНужно скрыть отдельные записиТочечное исключениеНужно поддерживать список ID

Если используется SEO-плагин

У плагинов логика может отличаться. Обычно есть отдельные настройки для включения или отключения типов записей в XML-карте сайта. Это предпочтительнее, чем писать код, если sitemap генерируется не ядром WordPress.

Проверьте:

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

Если вы используете Clearfy Pro, там есть инструменты для чистки сайта и управления SEO-элементами, но сам принцип тот же: сначала определите, кто именно генерирует карту, а потом отключайте лишнее в одном месте, а не сразу в трех.

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

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

  1. Откройте /wp-sitemap.xml и проверьте, что нужный тип записей больше не отображается.
  2. Если используется кэш, очистите его на уровне плагина, сервера и CDN.
  3. Проверьте исходный XML в браузере или через curl.
curl -s https://example.com/wp-sitemap.xml | grep -n "internal_note"

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

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

Отключили тип записей, но он все равно в sitemap

Обычно причина в том, что sitemap генерирует не ядро WordPress, а SEO-плагин. В этом случае фильтры wp_sitemaps_post_types и show_in_sitemap могут не сработать. Ищите настройку в самом плагине или его фильтры.

Сломали доступ к архиву или одиночным страницам

Такое бывает, если вместе с исключением из sitemap вы поставили public => false или publicly_queryable => false, хотя тип записей должен быть доступен на фронтенде. Если задача только в sitemap, не отключайте публичность без необходимости.

После изменений карта сайта не обновилась

Причина почти всегда в кэше. Очистите объектный кэш, page cache и CDN. Если карта сайта отдается через reverse proxy, старый XML может жить там дольше, чем в админке.

Записи исчезли из sitemap, но остались в индексе

Это нормально: исключение из sitemap не удаляет URL из поиска мгновенно. Если страница должна исчезнуть из индекса, нужен отдельный план: noindex, редирект, удаление контента или статус 410 Gone — в зависимости от сценария.

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

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

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

<?php
/**
 * Plugin Name: Sitemap Exclusions
 */

add_filter('wp_sitemaps_posts_query_args', function ($args, $post_type) {
    $excluded = [123, 456, 789];

    if ($post_type === 'post') {
        $args['post__not_in'] = $excluded;
    }

    return $args;
}, 10, 2);

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

Что проверить перед публикацией изменений

  • какой sitemap реально используется: ядро WordPress или SEO-плагин;
  • не отключили ли вы публичность там, где она нужна;
  • исчез ли нужный тип записей из XML-карты;
  • очищен ли кэш;
  • не осталось ли дублирующего sitemap от другого плагина;
  • не нужно ли дополнительно закрыть страницы от индексации через noindex или редирект.

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как закрыть от индексации страницы поисковой выдачи WordPress без поломки поиска
14.08.2026
Как отключить архивные страницы таксономий в WordPress без потери индексации записей
24.08.2026
Как отключить XML-RPC в WordPress без потери доступа к сайту
09.09.2026
Как убрать дубли страниц авторов в WordPress без потери SEO
18.08.2026
Как отключить XML-RSS карты сайта в WordPress без потери индексации важных страниц
28.08.2026
×
Сделай WordPress мощнее!

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

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