Ситуация типичная: на сайте есть служебный или полузакрытый контент — например, записи кастомного типа для внутреннего каталога, тестовые материалы, архивы с дублями, страницы партнёров. В админке они нужны, а в XML sitemap — нет. Если оставить их в карте сайта, поисковик будет тратить обход на лишние URL, а иногда ещё и подхватывать то, что вы не планировали продвигать.
Ниже — рабочие способы убрать отдельные типы записей из XML sitemap в WordPress: через настройки плагина, через код и через проверку результата. Без выдуманных хуков и без лишней магии.
Когда это действительно нужно
Не стоит вырезать из sitemap всё подряд. Сначала проверьте, что у вас именно техническая задача, а не попытка спрятать контент от индексации “на всякий случай”. Убирать тип записей из sitemap имеет смысл, если:
- тип записей служебный и не должен попадать в поиск;
- в нём много дублей или почти пустых страниц;
- контент создаётся автоматически и не рассчитан на SEO;
- нужно сократить мусор в карте сайта перед переобходом;
- часть записей уже закрыта через
noindex, но вы хотите убрать их ещё и из sitemap.
Важно: удаление из sitemap не запрещает индексацию само по себе. Если URL уже где-то есть во внутренних ссылках или внешних ссылках, поисковик может найти его и без карты сайта. Поэтому sitemap — это не замена noindex и не замена правильной архитектуре ссылок.
Диагностика: что именно попадает в sitemap
В WordPress XML sitemap генерируется ядром, если вы не отключали его или не заменяли плагином. Сначала откройте карту сайта и посмотрите, какие типы записей там есть. Обычно это что-то вроде /wp-sitemap-posts-post-1.xml, /wp-sitemap-posts-page-1.xml и отдельные карты для кастомных типов.
Если у вас стоит SEO-плагин, логика может быть другой: карта сайта генерируется уже плагином, и править нужно его настройки, а не ядро. Это важно, потому что попытка “починить” не тот источник часто заканчивается тем, что вы меняете код, а sitemap остаётся прежним.
Как понять, кто генерирует sitemap
- Если URL карты начинается с
/wp-sitemap-, это ядро WordPress. - Если карта выглядит как
/sitemap_index.xmlили похожа на индекс плагина, проверьте настройки SEO-плагина. - Если sitemap отдаёт 404 или пустую страницу, сначала проверьте постоянные ссылки и конфликт плагинов.
Способ 1: убрать тип записей через настройки SEO-плагина
Если sitemap генерирует SEO-плагин, самый безопасный путь — отключить нужный тип записей в его интерфейсе. У разных плагинов это делается по-разному, но логика одна: найти раздел XML sitemap и снять галочку с нужного post type.
Плюс этого подхода в том, что вы не завязываетесь на код темы и не рискуете потерять настройку при обновлении. Минус — если плагин сменится, настройку придётся повторять.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройка в плагине | Если sitemap уже генерирует SEO-плагин | Зависимость от интерфейса и конкретного плагина |
Код в functions.php или мини-плагине | Если нужен точечный контроль | Нужно следить за обновлениями и тестировать |
| Отключение типа записей целиком | Если тип не нужен публично | Может сломать архивы и внутренние ссылки |
Способ 2: убрать тип записей из ядра WordPress через код
Если sitemap генерирует именно ядро WordPress, можно отключить вывод конкретного типа записей через фильтр wp_sitemaps_post_types. Это рабочий и штатный способ, без правки ядра.
Добавлять код лучше не в тему, а в мини-плагин или хотя бы в functions.php дочерней темы. Так вы не потеряете настройку при смене темы.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный тип записей из XML sitemap.
unset( $post_types['product'] );
unset( $post_types['portfolio'] );
return $post_types;
} );
В примере product и portfolio — это условные post type. Подставьте свои реальные имена. Их можно посмотреть в коде плагина или темы, которая регистрирует тип записей, либо через get_post_types() в отладочном коде.
Если нужно убрать только часть записей, а не весь тип
Фильтр выше отключает тип целиком. Если задача тоньше — например, убрать только записи со статусом черновика, скрытые записи или записи с определённой меткой — тогда нужен другой подход. Ядро sitemap не даёт удобного публичного фильтра “по одной записи” на уровне постов так же просто, как на уровне типов. В таких случаях обычно проще либо закрыть записи от индексации, либо использовать SEO-плагин с более гибкой логикой, либо исключать записи на уровне генерации карты сайта в плагине.
Способ 3: отключить карту для конкретного типа в SEO-плагине
Если у вас уже стоит плагин для SEO, проверьте его настройки перед тем, как писать код. Часто там есть отдельные переключатели для типов записей, таксономий и архивов. Это особенно удобно, если нужно убрать из sitemap не один тип, а несколько.
Практический плюс: вы сразу видите, что именно выключили. Практический минус: после обновления интерфейс может поменяться, а на больших сайтах легко забыть, что именно было отключено и почему.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием главной страницы сайта. Проверьте именно карту сайта и индексацию.
- Откройте XML sitemap в браузере и убедитесь, что нужного типа записей там больше нет.
- Проверьте исходный код или XML-структуру: в индексе sitemap не должно быть ссылок на удалённый тип.
- Если сайт уже отправлен в Google Search Console, посмотрите, не остались ли старые URL в отчётах по страницам.
- Проверьте, что нужные типы записей всё ещё доступны на сайте, если они должны работать для пользователей.
Если вы убрали тип из sitemap, но URL всё ещё индексируются, это нормально: поисковику нужно время на переобход. Ускорять процесс лучше не повторной отправкой карты, а устранением причин, по которым URL вообще остаются доступными и полезными для обхода.
Быстрая техническая проверка
curl -I https://example.com/wp-sitemap-posts-product-1.xml
Команда не покажет содержимое XML, но поможет быстро понять, отдаётся ли карта вообще. Если у вас SEO-плагин, замените URL на реальный адрес sitemap.
Частые ошибки и как их исправить
- Отключили не тот sitemap. Часто путают карту записей, таксономий и авторов. Сначала посмотрите, какой именно URL содержит лишние ссылки.
- Правят родительскую тему. После обновления изменения исчезают. Для кода используйте дочернюю тему или мини-плагин.
- Ожидают мгновенного удаления из индекса. Sitemap обновляется быстро, а поисковая выдача — нет. Это разные процессы.
- Убирают тип из sitemap, но оставляют на него внутренние ссылки. Поисковик всё равно найдёт URL через сайт.
- Путают
noindexи удаление из sitemap. Это разные механизмы. Иногда нужны оба, иногда достаточно одного.
Что делать, если тип записей нужен в админке, но не нужен в поиске
Это самый частый рабочий сценарий. В таком случае не удаляйте тип записей полностью и не ломайте его публичность без необходимости. Лучше:
- убрать тип из XML sitemap;
- проверить, нужен ли ему архив;
- при необходимости добавить
noindexна отдельные записи или архив; - убрать лишние внутренние ссылки на служебные страницы;
- оставить контент доступным только там, где он реально нужен пользователю.
Если вы хотите навести порядок шире, чем одна карта сайта, имеет смысл посмотреть на комплексную чистку дублей и технических хвостов. В таких задачах иногда удобнее использовать инструменты вроде Clearfy Pro, если вам нужен набор настроек для SEO- и технической гигиены сайта, а не точечный код.
Практические советы по безопасности и производительности
Код для sitemap лучше держать в отдельном мини-плагине или в дочерней теме, а не в основной теме. Так вы не потеряете изменения при обновлении дизайна. Если сайт большой, после правок проверьте кеш: иногда старая версия sitemap продолжает отдаваться из страницы, CDN или серверного кеша.
Ещё один момент — не отключайте типы записей “на глаз”. Сначала убедитесь, что они действительно не нужны в поиске, а не просто кажутся лишними. На проектах с кастомными типами записей ошибка в одном названии может убрать из sitemap важный раздел сайта.
Короткий чек-лист перед публикацией изменений
- Понял, кто генерирует sitemap: ядро WordPress или плагин.
- Проверил точное имя типа записей.
- Убрал тип через настройки или через
wp_sitemaps_post_types. - Очистил кеш сайта и CDN, если они есть.
- Открыл sitemap и убедился, что лишних URL больше нет.
- Проверил, что нужные страницы сайта не сломались и доступны как раньше.
Если задача сводится не только к sitemap, а к общей технической чистке сайта, полезно смотреть на проблему шире: дубли, служебные URL, лишние архивы и мусорные страницы обычно идут пакетом. Но начинать всё равно лучше с точечной проверки конкретного типа записей, а не с массового отключения всего подряд.