Ситуация типовая: сайт уже живой, контент публикуется в нескольких типах записей, а в sitemap начинают попадать служебные или малополезные разделы. В результате поисковик видит лишние URL, а вы тратите время на разбор того, что вообще должно индексироваться. Если задача не в том, чтобы «спрятать всё», а в том, чтобы оставить в карте сайта только нужные страницы, это лучше решать точечно.
Ниже разберём, как отключить XML sitemap для отдельных типов записей в WordPress: через настройки плагина, через код и через проверку результата. Отдельно покажу, где чаще всего ошибаются, когда после правки карта сайта либо пустеет, либо продолжает отдавать старые URL.
Когда это действительно нужно
Отключать тип записи из sitemap имеет смысл не потому, что он «не нравится», а когда у него нет самостоятельной ценности для поиска. Например:
- служебные CPT для внутренней логики сайта;
- архивы с дублирующимся или слабым контентом;
- контент, который должен быть доступен пользователю, но не нужен в поиске;
- старые типы записей, которые уже не поддерживаются, но ещё присутствуют в базе.
Если тип записи нужен для трафика, но у него плохая структура, сначала лучше исправить шаблон, заголовки и внутреннюю перелинковку. Убирать его из sitemap — это уже более жёсткое решение.
Диагностика: что именно попадает в sitemap
Перед изменениями проверьте, какой механизм генерирует карту сайта. В WordPress 5.5+ есть встроенный XML sitemap, но многие сайты используют SEO-плагины, которые подменяют его своим вариантом. Это важно: править нужно тот источник, который реально отдаёт XML.
Как быстро понять источник
- Откройте
/wp-sitemap.xml— это встроенная карта WordPress. - Если у вас SEO-плагин, проверьте его sitemap URL, например
/sitemap_index.xml. - Посмотрите, какие URL внутри карты сайта повторяются и к какому post type они относятся.
Если в sitemap есть разделы, которые вы не ожидаете, сначала убедитесь, что они не приходят из темы или плагина. Иногда CPT регистрируют с publicly_queryable и show_in_rest, но забывают про SEO-логику, и тип автоматически попадает в карту сайта.
Пошаговое решение через код
Самый надёжный способ — отключить нужный тип записи на уровне фильтра. Для встроенного sitemap WordPress есть фильтр wp_sitemaps_post_types. Он позволяет убрать конкретный post type из списка, который попадает в XML.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный тип записей из XML sitemap.
unset( $post_types['portfolio'] );
unset( $post_types['internal_note'] );
return $post_types;
} );Этот код можно добавить в дочернюю тему или в небольшой mu-plugin, если не хотите зависеть от темы. Для production-окружения mu-plugin обычно удобнее: он не отключится случайно после обновления темы.
Если sitemap генерирует SEO-плагин
У разных плагинов свои фильтры и настройки. Универсального кода здесь нет, поэтому сначала проверьте интерфейс плагина. У многих SEO-плагинов можно отключить тип записи в настройках индексации или в настройках sitemap для конкретного post type.
Если плагин не даёт нужной гранулярности, ищите его документацию по фильтрам для sitemap. Но не смешивайте встроенный sitemap WordPress и sitemap плагина в одном решении: сначала отключите один источник, потом настраивайте второй.
Пример для регистрации CPT
Если вы сами регистрируете тип записи, можно заранее не включать его в sitemap через логику регистрации и последующего фильтра. Сам register_post_type() не управляет sitemap напрямую, но помогает не плодить лишние публичные сущности.
<?php
register_post_type( 'internal_note', array(
'label' => 'Internal notes',
'public' => false,
'show_ui' => true,
'show_in_rest' => false,
'supports' => array( 'title', 'editor' ),
) );Если тип не должен быть публичным, не делайте его публичным «на всякий случай». Это уменьшает риск того, что он случайно попадёт и в sitemap, и в поиск, и в навигацию.
Сравнение подходов
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Если sitemap уже управляется плагином | Быстро, без кода | Зависит от конкретного плагина |
Фильтр wp_sitemaps_post_types | Для встроенного sitemap WordPress | Точечно и предсказуемо | Нужен код и место для его хранения |
| Отключение публичности CPT | Если тип вообще не должен быть видимым | Убирает лишнюю поверхность | Может сломать нужные шаблоны и ссылки |
Проверка результата после внедрения
После правки не ограничивайтесь визуальным просмотром страницы. Проверьте XML как обычный URL и убедитесь, что нужный тип записи исчез из карты сайта.
- Откройте sitemap в браузере или через
curl. - Проверьте, что удалённый post type больше не присутствует в списке.
- Сделайте поиск по XML по имени типа записи или по его URL.
- Если используется кэш, очистите его на уровне плагина, сервера и CDN.
- Проверьте sitemap в Google Search Console после переобхода.
curl -s https://example.com/wp-sitemap.xml | grep -n "portfolio"Если команда ничего не возвращает, а в браузере вы всё ещё видите старый вариант, почти наверняка мешает кэш. Для sitemap это частая история: XML отдают через page cache, и правка кода уже есть, но поисковик и браузер видят старую версию.
Частые ошибки и как их исправить
Отключили не тот sitemap
Самая частая путаница — встроенный sitemap WordPress и sitemap от SEO-плагина. Если у вас в индексе фигурирует /sitemap_index.xml, а вы правите wp-sitemap.xml, результат не изменится. Сначала определите источник, потом вносите правку.
Скрыли тип записи, но не убрали старые URL
Если URL уже были в индексе, их удаление из sitemap не означает мгновенное исчезновение из поиска. Поисковик должен переобойти страницы. Иногда нужно дополнительно настроить noindex или вернуть корректный 404/410 для ненужных страниц, если они больше не должны существовать.
Сломали архивы и внутренние ссылки
Когда тип записи делают непубличным, могут перестать работать архивы, хлебные крошки и ссылки из шаблонов. Если задача только в sitemap, не трогайте публичность без необходимости. Для точечного отключения достаточно фильтра sitemap.
Забыли про кэш
XML sitemap часто кэшируется незаметно. После изменений очистите:
- кэш плагина;
- объектный кэш, если он есть;
- серверный кэш;
- CDN, если sitemap проксируется через него.
Практические советы по безопасности и производительности
Если вы вносите код вручную, не вставляйте его в functions.php основной темы на боевом сайте без резервной копии. Лучше использовать дочернюю тему или mu-plugin. Так правка не потеряется после обновления и не сломает сайт при смене темы.
Для сайтов с большим количеством типов записей полезно держать sitemap в чистом виде: это упрощает аудит, снижает шум в Search Console и помогает быстрее замечать реальные проблемы. Если вам нужно регулярно управлять дублями, служебными страницами и индексацией, имеет смысл посмотреть в сторону инструментов вроде Clearfy Pro: у него есть функции для технической чистки сайта и управления SEO-деталями, которые часто приходится делать вручную. Ссылка для проверки: Clearfy Pro.
Как понять, что решение сработало
Результат считается нормальным, если одновременно выполняются три условия: нужный тип записи исчез из XML, sitemap открывается без ошибок, а в Search Console нет новых технических проблем, связанных с картой сайта. Если тип записи всё ещё виден в XML, проверьте источник генерации и кэш. Если XML пустой или отдает 500, значит, код вставлен с ошибкой или конфликтует с другим фильтром.
Для WPCommunity-проектов это особенно полезно, когда на сайте есть закрытые разделы, внутренние материалы, служебные записи модерации или отдельные типы контента для участников. В таких сценариях sitemap должен помогать поиску, а не раскрывать структуру, которая не должна индексироваться.