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

Иногда проблема не в самой XML-карте сайта, а в одном конкретном типе записей: тестовые материалы, внутренние заметки, служебные страницы, архивы с пустым или дублирующимся контентом. Отключать sitemap целиком в такой ситуации — грубый и обычно лишний шаг. Гораздо полезнее убрать из карты сайта только тот контент, который не должен попадать в обход поисковых систем.

Ниже разберём, как понять, что именно нужно исключать, какие есть рабочие способы в WordPress и как проверить, что после правки sitemap действительно изменился, а не только «визуально кажется».

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

Сценарий типичный: у сайта есть post, page и, например, кастомный тип news или docs. В sitemap попадает всё подряд, но часть записей не должна индексироваться или не несёт ценности для поиска. Часто это:

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

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

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

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

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

Что проверить вручную

  1. Откройте /wp-sitemap.xml или sitemap, который отдаёт SEO-плагин.
  2. Найдите раздел с нужным типом записей или архивом.
  3. Проверьте, не дублируется ли этот контент в других XML-файлах.
  4. Посмотрите настройки самого типа записей: public, publicly_queryable, exclude_from_search, show_in_rest.

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

Способ 1: отключить тип записей из встроенной XML Sitemap через фильтр

Встроенная карта сайта WordPress позволяет исключить конкретный тип записей через фильтр wp_sitemaps_post_types. Это самый прямой вариант, если sitemap генерирует сам WordPress, а не плагин.

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    // Убираем кастомный тип записей из XML Sitemap.
    unset( $post_types['news'] );

    return $post_types;
} );

Код можно добавить в functions.php дочерней темы или в небольшой mu-plugin. Второй вариант надёжнее: он не зависит от смены темы.

Если нужно исключить не тип, а конкретный архив

Иногда тип записей нужен в sitemap, но его архив — нет. Тогда можно убрать только архивный URL через фильтр wp_sitemaps_post_type_archive_links.

<?php
add_filter( 'wp_sitemaps_post_type_archive_links', function( $archives ) {
    unset( $archives['news'] );

    return $archives;
} );

Это полезно, если отдельные записи должны индексироваться, а архив типа — нет, например когда архив пустой или не несёт самостоятельной ценности.

Способ 2: если sitemap отдаёт SEO-плагин

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

Если используется Yoast SEO, у него есть фильтр wpseo_sitemap_exclude_post_type. Для исключения типа записей он подходит лучше, чем попытка править ядро.

<?php
add_filter( 'wpseo_sitemap_exclude_post_type', function( $exclude, $post_type ) {
    if ( 'news' === $post_type ) {
        return true;
    }

    return $exclude;
}, 10, 2 );

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

Способ 3: отключить тип записей от индексации на уровне регистрации

Если тип записей не должен попадать в sitemap и вообще не должен индексироваться, лучше решить это в момент регистрации post type. Тогда логика будет цельной: WordPress не будет считать этот тип публичным для поиска и карт сайта.

<?php
register_post_type( 'news', array(
    'label'              => 'Новости',
    'public'             => true,
    'publicly_queryable' => true,
    'show_ui'            => true,
    'show_in_rest'       => true,
    'exclude_from_search' => true,
    'has_archive'        => false,
    'rewrite'            => array( 'slug' => 'news' ),
) );

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

Какой способ выбрать: сравнение вариантов

ПодходКогда подходитМинус
Фильтр ядра wp_sitemaps_post_typesЕсли sitemap делает WordPressНе работает, если карту сайта генерирует SEO-плагин
Фильтр плагинаЕсли sitemap отдаёт Yoast SEO или другой SEO-плагинНужно знать конкретный хук плагина
Правка регистрации post typeЕсли тип записей не должен быть публичным вообщеМеняет поведение не только sitemap

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

  1. Определите, кто генерирует sitemap: ядро WordPress или SEO-плагин.
  2. Проверьте, нужно ли исключить весь тип записей или только архив.
  3. Добавьте фильтр в дочернюю тему или mu-plugin.
  4. Очистите кеш сайта и кеш CDN, если он есть.
  5. Откройте sitemap заново и убедитесь, что лишний URL исчез.
  6. Проверьте, не остались ли старые ссылки в индексе через Search Console.

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

Проверка должна быть не только визуальной. Сделайте минимум три шага:

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

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

Быстрая проверка через curl

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

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

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

  • Правят functions.php активной темы. После обновления или смены темы код исчезает. Для постоянной логики лучше использовать mu-plugin.
  • Используют фильтр ядра, хотя sitemap создаёт SEO-плагин. В результате ничего не меняется. Сначала определите источник карты сайта.
  • Путают исключение из sitemap с запретом индексации. Убрать URL из XML — не то же самое, что закрыть его от поиска. Если нужен полный запрет, добавляйте ещё и корректные meta robots или настройку плагина.
  • Не очищают кеш. После правки sitemap продолжает отдавать старую версию из кеша.
  • Скрывают архив, но забывают про отдельные записи. В итоге архив исчез, а сами записи остаются в sitemap и продолжают обходиться поисковиком.

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

Если вы вносите правки в sitemap через код, не разбрасывайте их по нескольким файлам. Один небольшой mu-plugin проще проверить, отключить и перенести между окружениями. Это особенно удобно, если у сайта есть staging и production.

Не стоит ставить отдельный плагин только ради одной настройки, если задача решается фильтром в 5 строк. Лишний плагин — это ещё одна точка обновления и ещё один потенциальный конфликт. Но если у вас уже используется SEO-плагин и он управляет sitemap, логичнее работать через его штатные настройки и хуки, а не пытаться переизобрести генерацию карты сайта.

Если вам нужно регулярно чистить сайт от дублей, служебных архивов и лишних сущностей, иногда удобнее собрать это в одном инструменте, а не держать набор разрозненных правок. Например, у Clearfy Pro есть набор функций для технической чистки WordPress: https://wpshop.ru/plugins/clearfy?utm_source=wpdemo.ru&utm_medium=article&utm_campaign=kak-otklyuchit-xml-sitemap-dlya-otdelnogo-tipa-zapisej-v-wordpress

Когда лучше не трогать sitemap кодом

Если тип записей уже участвует во внешних интеграциях, в REST API, в блоках редактора или в шаблонах темы, ручное исключение может создать побочный эффект. В таких случаях сначала проверьте, можно ли решить задачу настройкой самого типа записей или SEO-плагина. Код — хороший инструмент, но только когда вы понимаете, какой слой системы меняете.

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

Как исключить страницы из поиска в WordPress через noindex и robots meta
17.09.2026
Как настроить robots.txt в WordPress, чтобы не закрыть важный контент
23.08.2026
Как отключить REST API для гостей в WordPress без поломки админки и плагинов
14.09.2026
Как отключить XML-RPC.php в WordPress и не сломать нужные интеграции
29.08.2026
Как закрыть от индексации страницы поискового фильтра в WordPress
19.08.2026