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

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

Типичный сценарий: в индексе начинают светиться страницы фильтров, служебные записи, тестовые CPT, а в Search Console появляются URL, которые вы вообще не планировали продвигать. Вручную чистить sitemap бессмысленно, если источник мусора остаётся в настройках темы, плагина или регистрации post type.

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

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

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

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

Диагностика: откуда именно берётся лишний URL

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

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

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

Для быстрой проверки в коде полезно посмотреть аргументы регистрации post type. Если тип создаётся через register_post_type(), ищите параметры public, publicly_queryable, show_in_rest, exclude_from_search, has_archive и show_in_sitemap — последний параметр поддерживается не во всех сценариях и зависит от того, кто генерирует sitemap.

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

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

Как отключить тип записи из XML-карты сайта кодом

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

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['service'] );
    unset( $post_types['portfolio_item'] );

    return $post_types;
} );

В примере service и portfolio_item — это реальные с точки зрения WordPress slug'и типов записей. Подставьте свои значения. После этого соответствующий тип исчезнет из XML-карты, но сам контент останется доступным по прямым ссылкам, если вы его не закрывали отдельно.

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

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

Если sitemap делает SEO-плагин

У популярных SEO-плагинов логика может отличаться от ядра. В таком случае правильнее отключать тип записи в настройках самого плагина, а не пытаться перехватывать генерацию на уровне WordPress. Иначе получите конфликт: в одном месте тип скрыт, в другом — снова появляется.

Практически это выглядит так: находите раздел XML sitemap в настройках плагина, открываете список post type и снимаете галочку с ненужного типа. После сохранения проверьте не только sitemap, но и robots.txt, если плагин добавляет туда ссылки на карту автоматически.

СпособКогда подходитПлюсМинус
Код через фильтр WordPressВстроенный sitemap ядраТочечно и прозрачноНужно править код
Настройки SEO-плагинаSitemap генерирует плагинБез кодаЗависит от интерфейса плагина
Отключение регистрации CPTТип записи не нужен вообщеУбирает источник проблемыМожет сломать шаблоны и ссылки

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

  1. Определите, кто генерирует sitemap: ядро WordPress или SEO-плагин.
  2. Найдите точный slug типа записи, который нужно убрать.
  3. Решите, нужен ли этот тип пользователю по прямой ссылке.
  4. Если тип нужен, исключайте его только из sitemap.
  5. Если тип не нужен совсем, отключайте его регистрацию или переводите в noindex и убирайте внутренние ссылки.
  6. После правки очистите кеш сайта и кеш CDN, если он есть.
  7. Проверьте sitemap и статус URL в Search Console.

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

Проверка должна быть не «страница открылась», а именно по цепочке индексации и генерации карты.

  • Откройте /wp-sitemap.xml и убедитесь, что лишнего типа там больше нет.
  • Если используется SEO-плагин, проверьте его sitemap-URL отдельно.
  • Посмотрите исходный код страницы sitemap и убедитесь, что ссылки на ненужный тип исчезли.
  • В Search Console отправьте sitemap на повторную обработку и проверьте отчёт по страницам.
  • Если URL уже был в индексе, отслеживайте его статус отдельно: удаление из sitemap не всегда даёт мгновенный эффект.

Если после правки тип всё ещё появляется, почти всегда причина одна из трёх: кеш, второй генератор sitemap или неверный slug post type.

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

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

Это нормально. Sitemap — не кнопка удаления из индекса. Если URL уже известен поисковику, дополнительно проверьте noindex, канонический URL и внутренние ссылки. Иногда нужно ещё убрать страницы из меню и блоков, чтобы не подкармливать обход.

Сломали sitemap, потому что удалили не тот ключ

В фильтре нужно указывать именно slug типа записи, а не его название в админке. Например, визуально это может быть «Портфолио», а в коде — portfolio_item. Если сомневаетесь, посмотрите регистрацию CPT в теме или плагине.

Отключили тип в одном месте, а он вернулся после обновления

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

Убрали тип из sitemap, но оставили тяжёлые архивы открытыми

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

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

Любые правки sitemap и регистрации post type лучше держать в отдельном мини-плагине или в дочерней теме, а не в functions.php основной темы. Это снижает риск потерять настройку после обновления и упрощает откат.

Если на сайте много кастомных типов записей, не делайте «глобальные» исключения без проверки. Иногда тип нужен не для SEO, а для внутренней навигации, REST API или интеграции с другим плагином. В таком случае безопаснее скрыть его только из sitemap и отдельно закрыть от индексации, если это действительно требуется.

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

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

Как использовать WPRemark для автоматического отзыва на WordPress
13.09.2026
Как использовать REST API в WordPress для создания пользовательских настроек
13.09.2026
Как отключить архивы рубрик в WordPress
06.10.2026
Автоматическое удаление спама в комментариях WordPress
03.10.2026
Как создать автоматический импорт постов в WordPress
13.09.2026