wplang.ru wordpress WP Lang

Как убрать лишние ссылки из XML sitemap в WordPress

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

Если задача не в том, чтобы отключить sitemap полностью, а в том, чтобы вычистить конкретные ссылки, лучше идти от диагностики: сначала понять, какие именно URL попали в карту, потом убрать источник этих URL, и только если нужно — фильтровать вывод программно.

Что именно попадает в sitemap и почему это важно

В WordPress XML sitemap формируется ядром, а также может дополняться плагинами SEO и кэша. Если в карту попадают URL, которые не должны индексироваться, это обычно означает одно из трёх:

  • тип записи или таксономия зарегистрированы с публичным архивом, хотя они нужны только внутри сайта;
  • в sitemap попали вложения, черновики, тестовые записи или страницы с техническим содержимым;
  • SEO-плагин и код темы по-разному трактуют доступность контента, из-за чего в карту уезжают лишние адреса.

Важно не путать noindex и исключение из sitemap. Страница может быть закрыта от индексации, но всё равно оставаться в карте сайта. Для поисковика это не ошибка, но для крупного сайта такой список быстро превращается в шум.

Диагностика: где искать лишние URL

Начните с просмотра самой карты сайта в браузере и через исходный XML. Если у вас включён стандартный sitemap WordPress, проверьте основные разделы:

  • /wp-sitemap-posts-post-1.xml — записи;
  • /wp-sitemap-posts-page-1.xml — страницы;
  • /wp-sitemap-taxonomies-category-1.xml — рубрики;
  • /wp-sitemap-users-1.xml — авторы, если они не отключены;
  • отдельные карты для пользовательских типов записей и таксономий.

Если используется SEO-плагин, проверьте его карту сайта отдельно. Частая ошибка — искать проблему в ядре WordPress, когда на самом деле sitemap переопределён плагином.

Быстрая проверка через браузер и консоль

Откройте карту сайта и найдите конкретный URL, который не должен там быть. Если список большой, удобнее выгрузить XML и отфильтровать его по шаблону URL. Для небольших сайтов достаточно ручной проверки, для больших — сравнения с перечнем публичных типов записей и таксономий.

curl -s https://example.com/wp-sitemap.xml | grep -oE '<loc>[^<]+</loc>'

Команда не решает проблему сама по себе, но помогает быстро увидеть, какие ссылки реально отдаются в sitemap.

Как убрать лишние ссылки: рабочие варианты

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

ПодходКогда подходитМинус
Правка регистрации типа записи/таксономииЕсли лишний URL создаёт ваш кодНужно править тему или плагин, где зарегистрирован контент
Фильтр sitemap в кодеЕсли нужно точечно убрать несколько адресовТребует аккуратной поддержки после обновлений
SEO-плагинЕсли карта уже управляется плагином и есть нужные настройкиНе всегда даёт тонкую фильтрацию

Вариант 1. Убрать источник URL на этапе регистрации

Если лишние ссылки идут из пользовательского типа записи, проверьте параметры public, has_archive, show_in_rest и наличие архивов. Для служебного контента часто достаточно сделать тип записи непубличным или скрыть архив.

add_action('init', function () {
    register_post_type('internal_note', [
        'label' => 'Internal notes',
        'public' => false,
        'show_ui' => true,
        'show_in_menu' => true,
        'exclude_from_search' => true,
        'publicly_queryable' => false,
        'show_in_rest' => false,
        'has_archive' => false,
        'rewrite' => false,
    ]);
});

Такой подход лучше, чем потом вычищать URL из sitemap вручную: WordPress просто перестаёт считать этот контент публичным.

Вариант 2. Исключить конкретные записи из sitemap фильтром

Если нужно убрать несколько записей, а тип записи в целом должен остаться в карте, используйте фильтр wp_sitemaps_posts_query_args. Он позволяет изменить аргументы запроса, который собирает ссылки для sitemap.

add_filter('wp_sitemaps_posts_query_args', function ($args, $post_type) {
    if ($post_type !== 'post') {
        return $args;
    }

    $args['post__not_in'] = array(123, 456, 789);
    return $args;
}, 10, 2);

Это рабочий способ, если у вас есть конкретные ID записей, которые не должны попадать в карту. Но не злоупотребляйте им для массовой чистки: если список большой, лучше пересмотреть структуру контента.

Вариант 3. Исключить вложения и служебные страницы

Часто в sitemap попадают attachment-страницы, которые не нужны ни пользователю, ни поиску. Если у вас нет задачи индексировать медиа-страницы отдельно, их лучше убрать на уровне логики сайта.

add_filter('wp_sitemaps_post_types', function ($post_types) {
    if (isset($post_types['attachment'])) {
        unset($post_types['attachment']);
    }
    return $post_types;
});

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

Проверка результата после внедрения

После правки не ограничивайтесь открытием главной карты сайта. Проверьте именно тот раздел, который был источником мусора:

  • откройте XML sitemap в браузере и убедитесь, что лишний URL исчез;
  • проверьте, не остался ли он в отдельной карте для типа записи или таксономии;
  • посмотрите, не генерирует ли его SEO-плагин параллельно с ядром WordPress;
  • если сайт кэшируется, очистите кэш страницы и кэш объекта, если он есть;
  • сделайте повторный запрос через curl или любой XML-валидатор.

Если URL исчез из sitemap, но всё ещё доступен по прямой ссылке, это нормально. Исключение из карты сайта не равно 404. Если нужно именно закрыть страницу, тогда уже отдельно настраивается доступность, редирект или noindex.

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

Отключили sitemap целиком вместо точечной правки

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

Правят robots.txt вместо sitemap

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

Путают noindex и исключение из карты

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

Меняют код в теме, а потом теряют правки

Если фильтр добавлен прямо в functions.php активной темы, при смене темы он исчезнет. Для стабильной настройки лучше использовать мини-плагин или mu-plugin. Это особенно важно, если чистка sitemap — часть постоянной технической политики сайта.

Безопасность и производительность: что учесть заранее

Фильтрация sitemap сама по себе лёгкая операция, но проблемы начинаются, когда в код добавляют тяжёлые запросы на каждом вызове XML. Не делайте выборку через сложные запросы к базе без необходимости. Если список исключений большой, храните его в явном массиве или в настройках, а не собирайте каждый раз через дополнительные запросы.

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

Если нужен более системный контроль дублей, служебных страниц и технической чистки, иногда проще опереться на плагин вроде Clearfy Pro от WPShop: он помогает закрывать часть SEO- и технических хвостов без разбрасывания логики по теме и нескольким сниппетам. Но даже в этом случае полезно понимать, какой именно URL и почему попадает в карту сайта.

Главный критерий простой: после правки в sitemap остаются только те URL, которые вы действительно хотите видеть в поиске и поддерживать в актуальном состоянии. Всё остальное должно быть убрано на уровне источника, а не замазано поверхностным фильтром.

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

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

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