wplang.ru wordpress WP Lang

Как отключить XML sitemap для отдельных типов записей в WordPress

Если в sitemap попадают записи, которые не должны индексироваться, проблема обычно не в поисковике, а в настройках темы, SEO-плагина или кастомного кода. Чаще всего это служебные типы записей, черновые разделы, дубли страниц архивов или контент, который уже закрыт от индексации, но продолжает светиться в карте сайта. В результате поисковый робот тратит обход на лишние URL, а в Search Console появляются страницы, которые вы не планировали продвигать.

Ниже — практический разбор: как понять, откуда берутся лишние URL в sitemap, как убрать их через SEO-плагин или код, и как проверить, что после правки карта сайта стала чище.

Когда sitemap начинает мешать, а не помогать

XML sitemap сам по себе не вреден. Проблемы начинаются, когда в него попадают URL, которые не должны участвовать в индексации. Это особенно заметно на сайтах с кастомными типами записей, где разработчик добавил CPT для внутренних задач, но не отключил его от публичной карты сайта.

Типичные сценарии:

  • в sitemap есть /wp-sitemap-posts-attachment-1.xml или отдельные медиа-URL, хотя они не нужны в поиске;
  • в карту сайта попадают служебные CPT вроде portfolio, team, docs, которые должны быть закрыты;
  • в sitemap остаются таксономии с пустыми или почти пустыми архивами;
  • плагин SEO генерирует отдельный sitemap для типа записей, который вы уже закрыли через noindex;
  • после миграции старые URL продолжают висеть в карте сайта из-за кэша или неверной конфигурации.

Диагностика: откуда именно берутся лишние URL

Сначала нужно понять, кто формирует sitemap: ядро WordPress, SEO-плагин или кастомный код темы/плагина. Это важно, потому что отключать карту сайта нужно в том слое, где она создается, а не поверх нее.

Проверьте, какой sitemap открыт на сайте

В WordPress 5.5+ базовый sitemap генерируется ядром и обычно доступен по адресу /wp-sitemap.xml. Если у вас установлен SEO-плагин, он может подменять или дополнять карту сайта своими URL. Откройте sitemap в браузере и посмотрите, какие именно разделы там есть.

Если видите отдельные файлы для записей, страниц, вложений, категорий или кастомных типов, запомните их названия. Дальше это поможет понять, что отключать.

Проверьте настройки SEO-плагина

В Yoast SEO, Rank Math и похожих плагинах обычно есть отдельные переключатели для типов записей и таксономий. Если тип записей выключен для индексации, но продолжает попадать в sitemap, значит, настройки не синхронизированы или sitemap кэшируется.

Если SEO-плагина нет, а sitemap все равно есть, значит, его генерирует ядро WordPress или код темы/плагина через фильтры wp_sitemaps_post_types, wp_sitemaps_taxonomies и связанные хуки.

Как отключить лишние типы записей в sitemap через код

Если вам нужен точный контроль, код надежнее, чем ручные переключатели в админке. Это особенно полезно для проектов, где часть контента создается автоматически или где sitemap должен быть стабильным независимо от настроек плагина.

Ниже пример для functions.php дочерней темы или собственного мини-плагина. Он убирает из sitemap выбранные типы записей и таксономии на уровне ядра WordPress.

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    // Убираем служебные типы записей из sitemap.
    unset( $post_types['portfolio'] );
    unset( $post_types['team'] );
    unset( $post_types['docs'] );

    return $post_types;
} );

add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
    // Убираем таксономии, которые не должны участвовать в индексации.
    unset( $taxonomies['project_category'] );
    unset( $taxonomies['internal_tag'] );

    return $taxonomies;
} );

Этот вариант работает, если sitemap генерирует именно ядро WordPress. Если SEO-плагин подменяет карту сайта, его собственные настройки или фильтры могут иметь приоритет.

Если нужно убрать только один тип записей

Иногда проще не трогать все sitemap, а убрать только конкретный CPT. Например, у вас есть публичные статьи и отдельный тип news, который нужен на сайте, но не должен индексироваться. Тогда достаточно точечной правки.

<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
    if ( isset( $post_types['news'] ) ) {
        unset( $post_types['news'] );
    }

    return $post_types;
} );

Такой подход удобен, когда вы не хотите ломать остальную структуру sitemap и оставляете в нем только действительно полезные URL.

Сравнение подходов: плагин, код или настройка SEO-плагина

ПодходКогда подходитПлюсыМинусы
Настройки SEO-плагинаЕсли sitemap управляется Yoast SEO, Rank Math и аналогамиБыстро, без кодаЗависит от плагина и его кэша
Фильтры WordPressЕсли нужен контроль на уровне ядраПредсказуемо, можно версионироватьНужно аккуратно вносить код
Отключение через robots.txtЕсли нужно только ограничить обходПросто добавить правилаНе убирает URL из sitemap и не решает индексацию полностью

Важно: robots.txt не заменяет корректную настройку sitemap. Если URL уже попал в карту сайта, лучше убрать его там же, а не надеяться только на запрет обхода.

Пошаговое решение без лишних рисков

1. Определите, какие URL должны остаться

Составьте короткий список: какие типы записей, таксономии и архивы действительно нужны в поиске. Не ориентируйтесь на то, что “так было всегда”. Если раздел не приносит трафик и не должен индексироваться, его лучше убрать из sitemap сразу.

2. Отключите лишнее в SEO-плагине или кодом

Если у вас есть SEO-плагин, сначала проверьте его интерфейс. Если он не дает нужной точности, используйте фильтры WordPress из примера выше. Для кастомных решений лучше вынести код в отдельный мини-плагин, а не держать его в теме.

3. Очистите кэш

После изменения sitemap обязательно сбросьте кэш страницы, объектный кэш и кэш CDN, если он есть. Иначе вы можете смотреть на старую версию XML и думать, что правка не сработала.

4. Проверьте, не генерируется ли альтернативный sitemap

На некоторых сайтах одновременно живут sitemap ядра, sitemap SEO-плагина и отдельные XML-файлы от сторонних модулей. В таком случае нужно отключать источник, а не только один из адресов.

Как проверить, что решение сработало

Проверка должна быть не визуальной, а технической. После внедрения откройте sitemap в браузере и убедитесь, что в нем больше нет лишних URL и разделов.

  • Проверьте /wp-sitemap.xml или sitemap SEO-плагина.
  • Откройте конкретный файл, например /wp-sitemap-posts-post-1.xml, и убедитесь, что нужные типы записей остались, а лишние исчезли.
  • Сравните список URL до и после правки.
  • Если используете Search Console, проверьте раздел с файлами sitemap и статусом обработки.

Полезно также проверить заголовок ответа:

curl -I https://example.com/wp-sitemap.xml

Если sitemap отдается с кодом 200 OK и обновленным содержимым, значит, правка применена. Если вы видите старую версию, ищите кэш на уровне плагина, сервера или CDN.

Частые ошибки и как их исправить

Отключили тип записей, но он остался в sitemap

Чаще всего причина в том, что sitemap генерирует не ядро WordPress, а SEO-плагин. Тогда фильтры wp_sitemaps_post_types могут не повлиять на итоговый XML. Проверьте настройки плагина и его документацию по sitemap.

Убрали URL из sitemap, но они все равно индексируются

Это нормально для уже известных поисковику страниц. Sitemap — это подсказка, а не жесткий запрет. Если URL больше не нужен в индексе, дополнительно проверьте noindex, внутренние ссылки и канонический URL.

Сломали sitemap для нужных страниц

Так бывает, если вы удалили слишком широкий массив или не проверили ключи в фильтре. Не отключайте все подряд. Меняйте только конкретные элементы массива и тестируйте результат на staging-среде.

После правки sitemap пустой или отдает ошибку

Обычно это синтаксическая ошибка в коде, конфликт с другим плагином или неверное место вставки. Если добавляете код в functions.php, проверьте, что файл не содержит лишних символов и что код не вставлен внутрь другой функции.

Практические советы по безопасности и производительности

Если sitemap меняется часто, не держите логику в ручных правках темы. Лучше оформить это как небольшой mu-plugin или отдельный плагин проекта. Тогда изменения не потеряются после обновления темы.

Для крупных сайтов полезно избегать лишних генераций sitemap на каждом запросе. Если у вас тяжелая конфигурация с большим количеством CPT и таксономий, проверьте, не создает ли сторонний плагин дополнительную нагрузку. В некоторых случаях проще использовать встроенный sitemap WordPress и точечно отключить ненужные разделы, чем держать несколько слоев генерации одновременно.

Если вы используете Clearfy Pro, его инструменты по чистке и отключению лишних элементов могут помочь убрать часть технического шума вокруг индексации и дублей, но сам sitemap все равно лучше проверять отдельно по факту, а не по названию опции.

Когда лучше не трогать sitemap вручную

Если сайт уже находится в активной SEO-работе и sitemap управляется агентством или отдельным SEO-плагином с тонкой логикой, не вносите правки в тему без согласования. На таких проектах лучше сначала зафиксировать текущую структуру sitemap, затем менять только один параметр за раз и сразу проверять результат в Search Console и в исходном XML.

Для большинства типовых задач схема простая: найти источник лишних URL, убрать их на уровне генератора sitemap, очистить кэш и перепроверить XML. Если сделать это аккуратно, карта сайта перестает мешать индексации и начинает работать как нормальный технический инструмент, а не как склад всего подряд.

×
C Днём программиста!
-20%

Ваша скидка
на премиум-темы и
плагины WordPress

Купить со скидкой сейчас ⋙