Когда в XML sitemap попадают служебные страницы, черновые типы записей, тестовые таксономии или лишние вложения, это не всегда ломает SEO сразу. Но карта сайта начинает шуметь: поисковику сложнее понять, какие URL действительно нужны для индексации, а какие лучше не трогать. В WordPress это обычно решается либо настройкой SEO-плагина, либо точечным кодом через фильтры.
Ниже — практический сценарий: как убрать из sitemap отдельные типы контента, не отключая карту сайта целиком и не ломая остальную индексацию.
Когда проблема действительно в sitemap
Сначала стоит убедиться, что дело не в robots.txt и не в noindex. XML sitemap — это только список URL для обхода, а не запрет на индексацию. Если в карте сайта есть лишние страницы, поисковик может тратить на них обход, но сам факт наличия URL в sitemap еще не означает, что он обязательно попадет в индекс.
Типичные симптомы
- в sitemap видны URL архивов, которые вы не хотите продвигать;
- в карту сайта попадают вложения изображений, хотя они не нужны как отдельные страницы;
- в sitemap есть CPT, который используется только для внутренней логики;
- после удаления контента URL все еще торчит в карте сайта;
- SEO-аудит показывает мусорные URL в XML sitemap.
Проверка простая: откройте карту сайта в браузере и найдите нужный URL. Если он там есть, дальше уже имеет смысл править генерацию sitemap, а не только мета-теги.
Какие есть варианты решения
В WordPress сейчас чаще всего используют встроенный XML sitemap ядра или карту сайта из SEO-плагина. Подход зависит от того, чем именно у вас генерируется sitemap.
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройка SEO-плагина | Если sitemap делает Yoast, Rank Math или другой SEO-плагин | Быстро, без кода | Не всегда хватает для точечной логики |
| Фильтры WordPress | Если нужен контроль на уровне кода | Точно и гибко | Нужно править тему или мини-плагин |
| Отключение типа контента от sitemap | Если CPT вообще не должен попадать в карту | Чистый результат | Нужно проверить, что это не ломает нужную индексацию |
Пошагово: убираем тип записи из встроенного XML sitemap WordPress
Если вы используете встроенный sitemap WordPress, можно отключить конкретный post type через фильтр wp_sitemaps_post_types. Это удобно, когда нужно убрать служебный тип записей, который не должен индексироваться вообще.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['landing'] ); // пример: служебный CPT landing
return $post_types;
} );Код лучше добавлять не в functions.php активной темы, а в мини-плагин или в mu-plugin, если это настройка уровня сайта. Так она не пропадет при смене темы.
Как убрать отдельные записи, но оставить тип в админке
Иногда тип записей нужен в админке, но в sitemap должны попадать только записи с определенным статусом или меткой. Тогда логика сложнее: проще фильтровать список URL на уровне sitemap entries. Для встроенного sitemap WordPress это делается через wp_sitemaps_posts_pre_url_list или похожую логику на стороне генерации, но на практике удобнее решать задачу через исключение ненужных объектов из самого запроса.
Например, если у вас есть записи с меткой noindex_sitemap, можно исключить их из выдачи для sitemap через фильтр запроса:
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' === $post_type ) {
$args['tax_query'] = array(
array(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => array( 'noindex_sitemap' ),
'operator' => 'NOT IN',
),
);
}
return $args;
}, 10, 2 );Этот вариант имеет смысл только если вы понимаете структуру контента и не создаете лишнюю нагрузку на запросы. Для больших сайтов лучше не усложнять sitemap-логику без необходимости.
Если sitemap делает SEO-плагин
У Yoast, Rank Math и похожих плагинов обычно есть интерфейс для отключения типов записей, таксономий и архивов из XML sitemap. Это самый безопасный путь, если задача типовая: убрать медиа-вложения, служебные CPT или целый архив.
Но если нужен точечный контроль, проверьте, есть ли у плагина фильтры. У разных решений они отличаются, и здесь важно не гадать, а смотреть документацию именно вашего плагина и версии. Если фильтр есть, лучше использовать его, чем пытаться править HTML карты сайта вручную.
Что обычно отключают в первую очередь
- attachment pages, если они не нужны как отдельные страницы;
- служебные CPT, которые не должны индексироваться;
- таксономии с пустыми или техническими архивами;
- страницы поиска и внутренние служебные URL;
- дублирующиеся архивы, если они уже закрыты в SEO-настройках.
Проверка результата после внедрения
После изменения кода или настроек не ограничивайтесь визуальной проверкой в админке. Нужно убедиться, что карта сайта реально пересобралась и лишний URL исчез из XML.
- Откройте sitemap в браузере и проверьте, что нужный тип страниц больше не выводится.
- Если используется кэш, очистите его на уровне плагина, сервера и CDN.
- Проверьте ответ URL карты сайта через
curl:
curl -I https://example.com/wp-sitemap-posts-post-1.xmlЕсли карта сайта отдает старую версию, проблема часто не в коде, а в кэше. Это особенно заметно на сайтах с серверным кэшированием и CDN.
Дальше проверьте сам XML:
curl -s https://example.com/wp-sitemap-posts-post-1.xml | grep -n 'landing'Если строка не выводится, нужный тип контента действительно исчез из sitemap. Для SEO-плагинов аналогично можно проверить конкретный sitemap-файл, который генерирует плагин.
Частые ошибки и как их исправить
Отключили не тот тип контента
Частая ошибка — убрать из sitemap весь post type, хотя он нужен для индексации. Перед правкой проверьте, что именно вы исключаете: записи, страницы, вложения или кастомный тип.
Поменяли код, но sitemap не обновился
Обычно причина в кэше. Очистите кэш плагина, объектный кэш, серверный кэш и CDN. Если карта сайта генерируется динамически, старый XML может висеть именно там.
Смешали sitemap и noindex
noindex не убирает URL из sitemap автоматически. И наоборот: отсутствие URL в sitemap не запрещает его индексацию, если на него есть ссылки. Эти механизмы решают разные задачи.
Правили тему вместо мини-плагина
Если настройка относится к сайту, а не к дизайну, не держите ее в теме. При обновлении или смене темы код потеряется. Для таких правок лучше использовать отдельный мини-плагин или mu-plugin.
Практика по безопасности и производительности
Чем меньше лишней логики в генерации sitemap, тем лучше. Не стоит строить тяжелые запросы с несколькими JOIN и сложными условиями, если можно решить задачу через настройки SEO-плагина или исключение целого post type.
Если вы добавляете код вручную, держите его в отдельном файле и комментируйте, какой именно URL или тип контента он исключает. Через полгода это сэкономит время на разборе, почему конкретная страница исчезла из карты сайта.
Для сайтов на WordPress с большим количеством служебных сущностей удобно вынести такие настройки в отдельный mu-plugin. Это снижает риск случайно потерять правку при обновлении темы и упрощает сопровождение.
Когда лучше не трогать sitemap кодом
Если у вас стандартный сайт без кастомных типов, а проблема только в нескольких страницах, сначала проверьте настройки SEO-плагина. Код имеет смысл тогда, когда нужна повторяемая логика: исключить целый тип, убрать технические записи или управлять картой сайта на уровне проекта.
Если же вы не уверены, какой именно генератор sitemap активен, сначала определите источник карты сайта. В WordPress это может быть ядро, SEO-плагин или отдельный плагин для sitemap. Иначе легко править не то место и получить ощущение, что решение не работает.