Когда в XML sitemap начинают попадать служебные записи, черновые CPT, архивы с пустым контентом или старые типы материалов после обновления темы, карта сайта перестаёт помогать поисковикам и начинает шуметь. Это частая история после миграции на новый плагин SEO, смены темы или обновления старого решения, где разработчик не учёл publicly_queryable, show_in_rest и настройки sitemap.
Задача здесь не в том, чтобы «выключить sitemap», а в том, чтобы оставить в нём только те типы записей, которые реально должны индексироваться. Ниже — рабочие варианты для WordPress: через SEO-плагин, через фильтры ядра и через точечную правку темы или мини-плагина.
Когда проблема уже видна в индексе и в Search Console
Сначала стоит понять, что именно лишнее. Если в sitemap попали не те URL, это обычно заметно по одному из сценариев:
- в карте сайта есть CPT вроде
reviews,slides,popupилиfaq, которые не должны индексироваться; - в sitemap остаются записи из старого плагина после его удаления или замены;
- в карте сайта дублируются URL из таксономий и архивов, хотя вы хотели оставить только записи и страницы;
- поисковик продолжает обходить технические страницы, потому что они всё ещё перечислены в sitemap.
Проверка простая: откройте /wp-sitemap.xml в ядре WordPress или XML-карту SEO-плагина, найдите нужный тип записи и убедитесь, что он действительно присутствует. Если карта генерируется плагином, смотрите не только главную sitemap, но и вложенные файлы по типам контента.
Что именно нужно исключать
Обычно исключают не отдельные записи, а целые типы записей. Это правильнее и стабильнее: если тип служебный, он не должен появляться в sitemap вообще. Если же нужно убрать только часть контента, лучше решать это через noindex и каноникал, а не через ручное редактирование sitemap.
Как отключить тип записи в XML sitemap через ядро WordPress
Начиная с WordPress 5.5, у ядра есть собственная XML sitemap. Для неё можно отключить конкретный тип записи через фильтр wp_sitemaps_post_types. Это самый чистый вариант, если вы не используете SEO-плагин, который подменяет sitemap своим генератором.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['slides'] );
unset( $post_types['faq'] );
return $post_types;
} );Код можно добавить в мини-плагин или в functions.php дочерней темы. Но для обновляемого сайта мини-плагин надёжнее: при смене темы настройка не потеряется.
Если нужно исключить не только тип записи, но и таксономию из sitemap ядра, используется отдельный фильтр wp_sitemaps_taxonomies. Это полезно, когда в карте сайта остаются пустые или технические рубрики после обновления структуры сайта.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
return $taxonomies;
} );Если sitemap генерирует SEO-плагин: где искать настройку
У популярных SEO-плагинов логика своя. В большинстве случаев нужный тип записи можно отключить в настройках индексации или в настройках конкретного post type. Это лучше, чем пытаться «перебить» плагин кодом, потому что после обновления плагина ваша правка может перестать работать.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройка в SEO-плагине | Если sitemap полностью управляется плагином | Зависит от интерфейса и версии |
| Фильтр ядра WordPress | Если используется встроенная sitemap | Не влияет на sitemap плагина |
| Код в мини-плагине | Если нужна точечная логика для нескольких типов | Нужно сопровождать при обновлениях |
Если вы используете плагин, сначала проверьте его настройки. Например, в Yoast SEO и Rank Math есть управление отображением типов записей в sitemap и индексации архивов. Названия пунктов отличаются по версиям, поэтому ориентируйтесь не на скриншот из старой статьи, а на текущий интерфейс.
Когда лучше не лезть в код
Если сайт ведёт контент-менеджер без доступа к серверу, настройка в админке безопаснее. Код нужен тогда, когда:
- типов записей много и они создаются автоматически;
- нужно исключать их по условию, например только на staging-сайте;
- SEO-плагин не даёт нужной гранулярности;
- после обновления старого решения настройки сбрасываются или исчезают.
Пошаговое решение через мини-плагин
Если задача повторяется на нескольких проектах, удобнее вынести логику в отдельный мини-плагин. Так вы не привязываетесь к теме и не теряете настройку при обновлении.
<?php
/**
* Plugin Name: WPUpdate Sitemap Tweaks
* Description: Исключает служебные типы записей из XML sitemap.
* Version: 1.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
$exclude = array( 'slides', 'faq', 'popup' );
foreach ( $exclude as $post_type ) {
if ( isset( $post_types[ $post_type ] ) ) {
unset( $post_types[ $post_type ] );
}
}
return $post_types;
} );Если нужно отключать тип только на части окружений, добавьте проверку хоста или константы среды. Например, на production оставляете sitemap как есть, а на staging выключаете служебные типы, чтобы они не попадали в тестовую индексацию.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
if ( defined( 'WP_ENVIRONMENT_TYPE' ) && WP_ENVIRONMENT_TYPE !== 'production' ) {
unset( $post_types['slides'] );
unset( $post_types['faq'] );
}
return $post_types;
} );Как проверить, что решение сработало
Проверка должна быть не «на глаз», а по конкретным признакам:
- Откройте
/wp-sitemap.xmlили sitemap SEO-плагина и убедитесь, что нужного типа больше нет в списке. - Проверьте вложенные sitemap-файлы, если карта разбита по типам.
- Очистите кеш, если на сайте есть page cache, объектный кеш или CDN.
- В Google Search Console отправьте sitemap повторно или дождитесь следующего обхода.
- Проверьте, не остались ли старые URL в индексе через поиск по сайту и отчёты об исключённых страницах.
Если URL всё ещё виден в индексе, это не всегда значит, что sitemap не сработал. Поисковик мог сохранить адрес из старой версии карты сайта, из внутренних ссылок или из внешних ссылок. Тогда нужно отдельно убрать ссылки на этот тип записи и, если требуется, поставить noindex.
Частые ошибки и как их исправить
Удалили тип из sitemap, но он всё равно индексируется
Это нормальная ситуация, если на него ведут внутренние ссылки или он уже был в индексе раньше. Уберите ссылки из меню, блоков, виджетов и шаблонов. Если тип больше не нужен пользователю, добавьте noindex на сами страницы, а не только убирайте их из sitemap.
Код добавили в тему, а после обновления всё сломалось
Так бывает, когда правка лежит в родительской теме. Для таких задач лучше мини-плагин или дочерняя тема. Если сайт уже обновляется регулярно, код в теме — плохое место для SEO-логики.
Отключили не тот тип записи
Проверьте slug post type. В админке название может быть одно, а системный ключ — другой. Например, визуально это «Отзывы», а в коде — reviews. Ошибка в ключе означает, что фильтр просто не сработает.
Сломали sitemap после установки нескольких SEO-плагинов
Одновременно активные плагины, которые пытаются управлять sitemap, часто конфликтуют. Должен быть один источник правды: либо ядро WordPress, либо один SEO-плагин. Если два решения генерируют карту сайта, сначала отключите лишнее и проверьте, кто именно отдаёт XML.
Безопасность и производительность: что учесть при обновлениях
При обновлении WordPress, темы или SEO-плагина всегда перепроверяйте sitemap после релиза. Это одна из тех настроек, которые легко ломаются незаметно: сайт визуально работает, а карта сайта уже содержит мусор или, наоборот, потеряла важные URL.
- держите изменения в отдельном мини-плагине или в репозитории;
- после обновления очищайте кеш и проверяйте XML вручную;
- не используйте несколько плагинов, которые одновременно генерируют sitemap;
- если тип записи служебный, ограничьте его доступность не только в sitemap, но и в шаблонах, меню и REST API, если это уместно;
- для старых проектов сначала проверьте, не осталось ли в теме или плагине собственных XML-генераторов.
Если вам нужно одновременно чистить sitemap, убирать дубли и контролировать техничку после обновлений, такие задачи удобно закрывать через один набор настроек, а не россыпью правок по теме. В ряде проектов для этого используют Clearfy Pro: он помогает убрать лишние элементы и сократить количество технического шума, но конкретную настройку всё равно нужно проверять на живом сайте и после обновлений. Ссылка на продукт: Clearfy Pro.
Если после внедрения карта сайта стала короче, это ещё не финальная проверка. Сравните список URL до и после, убедитесь, что из sitemap исчезли только нужные типы, а записи, которые должны индексироваться, остались на месте. Именно это и показывает, что решение работает корректно.