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

Когда в 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.

  1. Откройте sitemap в браузере и проверьте, что нужный тип страниц больше не выводится.
  2. Если используется кэш, очистите его на уровне плагина, сервера и CDN.
  3. Проверьте ответ 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. Иначе легко править не то место и получить ощущение, что решение не работает.

Как создать собственный тип записей (Custom Post Type) в WordPress с примером кода
04.09.2026
Как отключить XML sitemap в WordPress для отдельных типов страниц
28.09.2026
Как закрыть от индексации страницы в разработке в WordPress
13.09.2026
Оптимизация изображений в WordPress: эффективные методы и плагины
04.09.2026
Как убрать дубли страниц в WordPress от пагинации, фильтров и архивов
06.09.2026