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

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

Когда sitemap нужно чистить

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

Типичные признаки

  • в sitemap есть записи из attachment, revision или внутреннего CPT;
  • в Search Console индексируются страницы, которые вы не добавляли в меню и не считаете контентными;
  • в отчётах по сканированию много URL с низкой ценностью;
  • SEO-плагин генерирует карту сайта автоматически, а нужный тип записей не исключается в настройках.

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

Сначала проверьте, какой именно генератор sitemap используется. В WordPress это может быть встроенная карта сайта ядра, Yoast SEO, Rank Math, All in One SEO или другой плагин. От этого зависит способ исключения.

Откройте sitemap в браузере и посмотрите структуру. Если это встроенный sitemap WordPress, обычно адрес выглядит как /wp-sitemap.xml. У SEO-плагинов адрес может быть другим, например /sitemap_index.xml.

Дальше проверьте, какой post type лишний. Это можно сделать прямо в админке или через код, если тип записей кастомный.

<?php
$post_types = get_post_types( array( 'public' => true ), 'names' );
print_r( $post_types );

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

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

Самый надёжный путь — не править ядро и не лезть в файлы плагина. Для WordPress есть рабочие фильтры, а у SEO-плагинов — собственные настройки. Ниже — варианты по ситуации.

Вариант 1: встроенный sitemap WordPress

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

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

    return $post_types;
} );

В этом примере из карты сайта убираются типы portfolio и faq. Названия должны совпадать с реальным slug post type. Если у вас другой slug, подставьте свой.

Вариант 2: Yoast SEO

У Yoast SEO есть фильтр wpseo_sitemap_exclude_post_type. Он подходит, если нужно исключить один или несколько типов записей из sitemap, не трогая остальную SEO-логику.

<?php
add_filter( 'wpseo_sitemap_exclude_post_type', function( $exclude, $post_type ) {
    if ( in_array( $post_type, array( 'portfolio', 'internal_note' ), true ) ) {
        return true;
    }

    return $exclude;
}, 10, 2 );

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

Вариант 3: Rank Math

В Rank Math логика часто решается через настройки типа записи в админке, но если нужен кодовый контроль, проверьте, не отключён ли sitemap для конкретного CPT в настройках самого плагина. Для кастомных решений лучше сначала использовать интерфейс плагина, а код оставлять для точечных исключений, когда настройка недоступна.

СпособКогда подходитМинус
Настройки SEO-плагинаЕсли тип записей виден в интерфейсеНе всегда есть гибкость для точечных исключений
Фильтр в кодеЕсли нужен контроль над конкретным CPTНужно аккуратно поддерживать код в теме или плагине
Отключение sitemap целикомРедкий аварийный случайПотеря полезной карты сайта для всего сайта

Куда вставить код, чтобы не сломать сайт

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

Пример простого mu-plugin:

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

add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    unset( $post_types['portfolio'] );
    return $post_types;
} );

Файл положите в wp-content/mu-plugins/. Если папки нет, создайте её вручную.

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

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

  1. Откройте sitemap заново и убедитесь, что нужный раздел исчез.
  2. Проверьте дочерние sitemap, если карта сайта индексная.
  3. Посмотрите исходный XML и найдите slug исключённого post type.
  4. Если используете Search Console, отправьте sitemap на повторное чтение и дождитесь обновления отчёта.

Для быстрой проверки можно использовать curl:

curl -s https://example.com/wp-sitemap.xml | grep -n "portfolio"

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

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

Неверный slug типа записей

Частая ошибка — исключают не тот идентификатор. В коде нужен именно slug post type, а не его человекочитаемое название из админки. Проверьте его через get_post_types() или в коде регистрации CPT.

Путают sitemap и noindex

Убрать URL из sitemap — не то же самое, что закрыть его от индексации. Если страница должна быть недоступна для поиска, одного исключения из карты сайта мало. В таком случае нужен отдельный контроль индексации: noindex, robots.txt или удаление страницы из публичного доступа.

Правят файлы плагина

После обновления SEO-плагина правка исчезнет. Если решение нужно на постоянной основе, используйте фильтр, mu-plugin или настройки самого плагина.

Отключают весь sitemap ради одного типа

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

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

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

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

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

Что должно получиться после настройки

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

Если хотите, я могу подготовить отдельный вариант статьи для случая, когда sitemap генерирует именно Yoast SEO или Rank Math, с более точными фильтрами и настройками под конкретный плагин.

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

⭐⭐⭐⭐⭐
Как сделать автоматический ответ на комментарии в WordPress
14.09.2026
Как разделить контент на страницах WordPress по условиям: примеры и решения
27.09.2026
Как добавить дополнительные поля в формы регистрации WordPress
14.09.2026
Как создать уникальные метаданные для каждого типа записей WordPress
01.10.2026
Как создать автоматические задачи в WordPress на основе WP-Cron
14.09.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее