Ситуация типичная: на сайте есть служебный или узкоспециализированный тип записей, который не должен попадать в XML sitemap. Например, это могут быть внутренние документы, архивы событий, карточки партнёров, тестовые материалы или контент, который уже закрыт от индексации другим способом. Проблема в том, что многие SEO-плагины по умолчанию добавляют в карту сайта почти всё, что доступно для публичного просмотра.
Если просто убрать ссылки из меню или скрыть раздел на фронтенде, это не решает задачу. Поисковик всё равно может увидеть URL через sitemap и начать обходить его чаще, чем нужно. Ниже — рабочие способы отключить отдельный тип записей из XML sitemap в WordPress и не сломать остальную индексацию.
Когда это действительно нужно
Не стоит вырезать из sitemap всё подряд. Для начала проверьте, что у типа записей есть понятная причина не попадать в карту сайта:
- контент не предназначен для поиска и не приносит трафик;
- страницы создаются автоматически и дублируют структуру сайта;
- тип записей используется только для внутренней логики темы или плагина;
- нужно уменьшить шум в отчётах и упростить обход сайта поисковыми роботами.
Если же записи важны для SEO, но просто плохо оформлены, лучше не убирать их из sitemap, а доработать шаблон, метаданные и внутреннюю перелинковку.
Диагностика: где именно тип записей попадает в sitemap
Сначала определите источник генерации карты сайта. В WordPress это может быть:
- встроенный XML sitemap ядра WordPress;
- SEO-плагин вроде Yoast SEO, Rank Math или аналогичного;
- кастомная реализация в теме или плагине.
Проверка простая: откройте sitemap и найдите нужный post type по URL или по структуре. Если у вас несколько карт сайта, проверьте не только главный индекс, но и вложенные файлы, например /post-sitemap.xml или /custom-post-type-sitemap.xml.
Если тип записей виден только в одном из файлов, значит, отключать его нужно именно на уровне генератора, а не через robots.txt. Robots.txt не убирает URL из sitemap — он только ограничивает обход.
Что проверить до изменений
- какой SEO-плагин активен;
- есть ли у типа записей публичный архив;
- не используется ли этот post type в хлебных крошках, поиске и фильтрах;
- не завязан ли на него другой функционал, который ожидает публичные URL.
Способ 1: отключить тип записей в настройках SEO-плагина
Если sitemap генерирует SEO-плагин, сначала ищите настройку в интерфейсе. Это самый безопасный путь: плагин сам перестроит карту сайта и не потребует ручных правок кода.
Логика обычно такая: для типа записей отключается индексация или отдельный вывод в sitemap. В некоторых плагинах это делается через настройки типа контента, в других — через раздел XML sitemap. Названия пунктов отличаются, поэтому ориентируйтесь не на формулировку, а на результат: после сохранения нужный post type должен исчезнуть из соответствующего sitemap-файла.
Если вы используете Clearfy Pro, его удобно подключать не как замену SEO-плагину, а как инструмент для технической чистки сайта и отключения лишних сущностей, когда стандартных настроек уже не хватает. Но для карты сайта всё равно важно понимать, кто именно её генерирует.
Способ 2: исключить post type через фильтр WordPress
Если карта сайта строится ядром WordPress, можно убрать отдельный тип записей через фильтр wp_sitemaps_post_types. Это рабочий вариант, когда вам нужен точечный контроль без установки дополнительного плагина.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['partner'] );
unset( $post_types['internal_doc'] );
return $post_types;
} );В этом примере из sitemap исключаются два типа записей: partner и internal_doc. Названия должны совпадать с реальными post_type, а не с ярлыком в админке.
Куда вставлять код:
- в дочернюю тему, если вы уверены, что она не будет меняться отдельно;
- в небольшой mu-plugin, если хотите сохранить логику при смене темы;
- в собственный функциональный плагин, если решение должно жить независимо от темы.
Для production-проекта mu-plugin обычно надёжнее: такой код не потеряется после обновления темы.
Способ 3: убрать только отдельные записи, а не весь тип
Иногда тип записей нужен в sitemap, но часть материалов должна быть исключена. Тогда отключать весь post type нельзя. В этом случае используйте фильтр wp_sitemaps_posts_query_args и отфильтруйте записи по метке, статусу или любому другому признаку.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'partner' !== $post_type ) {
return $args;
}
$args['post__not_in'] = array( 123, 456 );
return $args;
}, 10, 2 );Такой подход полезен, если в одном типе записей есть публичные и служебные материалы. Но не злоупотребляйте им: чем сложнее логика исключений, тем выше шанс забыть про новые записи и получить несогласованную индексацию.
Сравнение подходов
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройка в SEO-плагине | Если sitemap генерирует плагин | Без кода, проще поддерживать | Зависит от интерфейса и версии плагина |
Фильтр wp_sitemaps_post_types | Если используется sitemap ядра | Точный контроль, без лишних зависимостей | Нужно править код и следить за обновлениями |
Фильтр wp_sitemaps_posts_query_args | Если нужно исключить отдельные записи | Гибко, можно оставить тип записей в sitemap | Сложнее тестировать и сопровождать |
Пошаговое решение без лишнего риска
- Определите, кто генерирует sitemap: ядро WordPress или SEO-плагин.
- Найдите точное имя post type через код или через настройки регистрации типа записей.
- Сначала попробуйте штатную настройку плагина, если она есть.
- Если настройки нет, добавьте фильтр в mu-plugin или в функциональный плагин.
- Очистите кэш сайта и, если используется серверный кэш, сбросьте и его.
- Проверьте, что URL исчез из нужного sitemap-файла, но остальные разделы остались на месте.
Как проверить, что решение сработало
Проверка должна быть не только визуальной. Сделайте три шага:
- Откройте XML sitemap в браузере и убедитесь, что нужный post type больше не выводится.
- Проверьте ответ сервера для sitemap: он должен отдавать актуальную версию без старого содержимого после очистки кэша.
- Если сайт уже проиндексирован, отправьте sitemap на повторную обработку в панели для вебмастеров и посмотрите, как меняется обход страниц.
Если URL всё ещё виден в кеше CDN или на сервере, проблема не в коде, а в слое кэширования. В таком случае сначала сбрасывайте кэш, а уже потом проверяйте результат.
Частые ошибки и как их исправить
Путают post type и slug архива
В коде нужен именно ключ типа записей, например partner, а не красивый URL или заголовок раздела. Если убрать не тот ключ, фильтр просто не сработает.
Правят robots.txt вместо sitemap
Это разные задачи. Robots.txt может ограничить обход, но не удаляет URL из карты сайта. Если цель — убрать тип записей из XML sitemap, править нужно генератор sitemap.
Забывают про кэш
После изменения фильтра старый sitemap может продолжать отдаваться из page cache, object cache или CDN. Это частая причина ложного ощущения, что код не работает.
Отключают весь тип записей без проверки зависимостей
Если post type участвует в шаблонах, фильтрах, REST API или внутренних связях, его полное исключение может сломать часть функционала. Сначала проверьте, не нужен ли он где-то ещё, кроме sitemap.
Практические советы по безопасности и производительности
Если решение реализуете кодом, не вставляйте его в произвольный файл темы. Лучше использовать mu-plugin или отдельный мини-плагин: так код не потеряется после обновления и проще контролируется в репозитории.
Для сайтов с большим количеством типов записей не делайте тяжёлые запросы внутри фильтров sitemap. Фильтр должен быть быстрым и предсказуемым: чем меньше логики на каждом запросе карты сайта, тем лучше для производительности.
Если вам регулярно приходится чистить сайт от технического мусора, дублирующихся сущностей и лишних элементов индексации, имеет смысл держать под рукой инструмент для технической оптимизации. Например, Clearfy Pro уместен именно как набор точечных настроек для чистки WordPress, а не как замена пониманию того, что и зачем вы отключаете.
Главный критерий здесь простой: после изменений sitemap должен отражать только те URL, которые вы действительно хотите показывать поисковым системам. Всё остальное — уже вопрос конкретной реализации и аккуратной проверки.