Ситуация типовая: сайт уже отдает XML sitemap через ядро WordPress, но в карту попадают служебные записи, архивы, черновые CPT или контент, который не должен индексироваться. Удалять sitemap целиком не нужно — достаточно точечно исключить лишние типы записей или отдельные элементы.
Ниже разберем, как понять, что именно попадает в карту, какие есть рабочие способы отключения, и как проверить результат без догадок.
Когда это действительно нужно
Не каждый тип записи должен быть в sitemap. На практике исключают:
- служебные CPT, которые нужны только внутри админки;
- дублирующиеся записи, если контент уже доступен в другой структуре URL;
- черновики и записи с неполным наполнением;
- страницы с техническим содержимым, которые не должны попадать в поиск;
- архивы таксономий или CPT, если они создают лишний индексируемый шум.
Важно не путать sitemap с robots.txt. Запрет в robots не удаляет URL из карты сайта и не решает проблему индексации сам по себе.
Диагностика: что именно попадает в sitemap
Сначала проверьте, какой механизм генерирует карту сайта. В WordPress 5.5+ базовый XML sitemap делает ядро, но плагины SEO могут подменять его своим вариантом. Если у вас установлен SEO-плагин, сначала смотрите его настройки, а не код темы.
Как быстро понять источник sitemap
Откройте:
/wp-sitemap.xml— карта сайта ядра WordPress;/sitemap_index.xml— часто карта SEO-плагина;- исходный код страницы и заголовки ответа, если нужно понять, какой URL реально отдается поисковикам.
Если в sitemap есть лишние записи, проверьте, к какому post type они относятся. Это можно сделать через админку или напрямую в базе, если нужно быстро найти источник проблемы.
Способы решения: плагин, код или компромисс
Для точечной задачи есть три подхода. Если нужен быстрый и безопасный вариант без разработки, используйте настройки SEO-плагина. Если нужен контроль на уровне темы или mu-plugin, лучше отключать элементы через фильтры WordPress. Полностью править XML руками не стоит: карта должна оставаться динамической.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Если sitemap уже генерирует Yoast, Rank Math или аналог | Зависит от интерфейса плагина |
| Код через фильтры WordPress | Если нужен точный контроль без лишних зависимостей | Нужно аккуратно тестировать после обновлений |
| Отключить sitemap целиком | Редкий случай, когда карта вообще не нужна | Потеря удобного источника для обхода поисковиками |
Пошаговое решение через код
Если используется встроенный sitemap WordPress, можно исключить конкретный тип записей через фильтр wp_sitemaps_post_types. Это рабочий способ, если вы хотите убрать, например, portfolio или docs из карты сайта.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['portfolio'] );
unset( $post_types['docs'] );
return $post_types;
} );Код лучше размещать в небольшом плагине или в mu-plugins, а не в functions.php темы. Так вы не потеряете настройку при смене темы.
Если нужно убрать только отдельные записи
Иногда тип записи нужен в sitemap, но отдельные элементы — нет. Тогда используйте фильтр wp_sitemaps_posts_query_args и исключайте записи по ID, статусу или другим признакам.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' !== $post_type ) {
return $args;
}
$args['post__not_in'] = array( 123, 456 );
return $args;
}, 10, 2 );Такой вариант полезен, если в sitemap попали тестовые материалы, служебные страницы или записи, которые уже закрыты от индексации другим способом.
Если sitemap генерирует SEO-плагин
У SEO-плагинов логика отличается. У Yoast и Rank Math есть собственные настройки для типов записей, таксономий и отдельных URL. В этом случае сначала отключайте нужный post type в интерфейсе плагина. Если плагин не дает нужной гибкости, уже тогда имеет смысл смотреть в документацию по его фильтрам.
Не смешивайте два источника sitemap одновременно без необходимости. Если у вас и ядро, и SEO-плагин отдают карты, поисковик может видеть дублирующиеся наборы URL.
Проверка результата после внедрения
После изменения кода или настроек проверьте не только страницу sitemap, но и фактический список URL.
- Откройте
/wp-sitemap.xmlили/sitemap_index.xml. - Проверьте, исчез ли нужный post type из индекса карты.
- Перейдите в конкретный sitemap-файл и убедитесь, что лишние URL больше не выводятся.
- Если используется кэш, очистите его на уровне плагина, сервера и CDN.
- Проверьте HTTP-ответ страницы sitemap: должен быть
200 OK, без редиректов и ошибок.
Дополнительно можно отправить URL sitemap в Google Search Console и посмотреть, не осталось ли старых ссылок в отчетах. Но обновление там не мгновенное, поэтому ориентируйтесь прежде всего на сам XML-файл.
Частые ошибки и как их исправить
Отключили post type, но URL все равно видны
Чаще всего причина в том, что sitemap генерирует не ядро WordPress, а SEO-плагин. Тогда фильтр wp_sitemaps_post_types не сработает. Проверьте источник карты и отключайте тип записи в настройках плагина или его фильтрах.
Сайт отдает старую версию sitemap
Это почти всегда кэш. Очистите кэш плагина, серверный кэш и CDN. Если карта сайта лежит за кэшем, поисковик будет получать устаревший XML даже после исправления кода.
Сломали sitemap целиком
Обычно это происходит, когда в фильтр возвращают не массив, а null или случайно удаляют обязательные элементы. Проверяйте, что функция всегда возвращает массив и не вызывает фатальных ошибок.
Пытаются закрыть URL только через robots.txt
Это не убирает записи из sitemap. Если URL не должен попадать в карту, его нужно исключать на уровне генерации sitemap, а не только запрещать обход.
Практические советы по безопасности и производительности
Если вы вносите правки кодом, храните их в отдельном мини-плагине или mu-plugin. Это проще сопровождать и безопаснее для обновлений темы. Для сайтов с большим количеством CPT не стоит строить логику на ручной правке XML: при каждом обновлении контента карта должна пересобираться автоматически.
Если у вас много служебных типов записей и дублирующихся архивов, имеет смысл дополнительно проверить, не создают ли они лишние страницы в индексе. Для таких задач часто используют комплексную чистку технических дублей и SEO-настроек, например через Clearfy Pro: https://wpshop.ru/plugins/clearfy.
Короткий чек-лист перед публикацией изменений
- понятно, какой именно sitemap генерируется на сайте;
- исключаемый post type или URL определены точно;
- код добавлен не в тему, а в отдельный слой, который не потеряется при обновлении;
- кэш очищен на всех уровнях;
- в sitemap больше нет лишних URL;
- страница sitemap отвечает
200 OK; - в Search Console отправлен актуальный sitemap.
Если задача сводится к удалению дублей, чистке технических страниц и управлению индексируемостью, лучше решать ее системно, а не точечными правками в нескольких местах. Тогда sitemap, robots, noindex и архивы не будут конфликтовать друг с другом.