Ситуация типовая: сайт уже в проде, а в XML Sitemap внезапно оказываются URL со staging-домена, тестовых каталогов или служебных страниц. Поисковик не обязан их игнорировать только потому, что они «не для людей». Если такие адреса доступны по HTTP и попали в карту сайта, вы сами подсказываете роботам, что их стоит обойти.
Ниже — практический сценарий: как найти источник лишних URL, убрать их из sitemap, не сломать индексацию основного сайта и проверить, что изменения реально сработали.
Когда проблема действительно в sitemap
Не каждый лишний URL в отчёте Search Console означает, что виновата именно карта сайта. Но если в sitemap.xml или в дочерних sitemap появляются тестовые адреса, это уже прямой сигнал к проверке. Обычно проблема возникает после миграции, клонирования сайта, работы через staging-поддомен или при использовании плагинов, которые автоматически добавляют в карту сайта всё опубликованное и доступное.
Что обычно попадает лишним
- staging-домен или поддомен, если сайт копировали без чистки настроек;
- тестовые страницы и записи, которые случайно получили статус
publish; - служебные таксономии, архивы автора, вложения, если они не нужны в индексации;
- дубли URL с параметрами или альтернативными путями после переезда.
Быстрая диагностика
Сначала не трогайте код. Посмотрите, откуда именно берутся адреса.
- Откройте
/sitemap.xmlи дочерние sitemap. - Проверьте, есть ли там staging-домен, тестовые поддиректории или старые пути.
- Сравните список URL с тем, что реально должно индексироваться.
- Если используете SEO-плагин, проверьте его настройки для типов записей, таксономий и архивов.
Если лишние URL видны только в отчёте поисковой системы, а в sitemap их нет, значит источник может быть в старых ссылках, внешних упоминаниях или внутренних переходах. Тогда задача уже другая. Но если URL есть в sitemap, исправлять нужно именно генерацию карты сайта.
Какой способ выбрать: плагин, настройки или код
Универсального решения нет. Всё зависит от того, где именно формируется sitemap и насколько у вас контролируемая сборка сайта.
| Подход | Когда подходит | Минус |
|---|---|---|
| Настройки SEO-плагина | Если sitemap генерирует Yoast SEO, Rank Math или похожий плагин | Не всегда можно убрать нестандартные URL |
| Код через фильтры WordPress | Если нужен точечный контроль над типами записей и таксономиями | Нужно аккуратно тестировать после обновлений |
| Отключение лишних типов контента | Если тестовые записи создаются как отдельный post type | Может затронуть админские сценарии |
Если задача простая, начните с настроек плагина. Если нужен контроль над конкретными URL или типами записей, надёжнее использовать код.
Пошаговое решение через код
Ниже пример для стандартного XML Sitemap WordPress, который появился в ядре начиная с WordPress 5.5. Он позволяет точечно исключать типы записей и таксономии из карты сайта через фильтры.
1. Исключаем тестовый тип записей из sitemap
Если у вас есть отдельный post type для тестов, черновиков контента или внутренних материалов, его лучше не отдавать в sitemap вообще.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
if ( isset( $post_types['test_page'] ) ) {
unset( $post_types['test_page'] );
}
return $post_types;
} );Здесь test_page — пример названия post type. Подставьте свой реальный slug. Проверить его можно в коде регистрации типа записи или в админке, если он отображается в URL.
2. Убираем ненужную таксономию
Если в sitemap попадают архивы тестовой рубрики или служебной таксономии, отключите её через фильтр wp_sitemaps_taxonomies.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
if ( isset( $taxonomies['internal_tag'] ) ) {
unset( $taxonomies['internal_tag'] );
}
return $taxonomies;
} );Это не удаляет саму таксономию и не ломает контент. Она просто перестаёт попадать в XML Sitemap.
3. Исключаем конкретные записи по ID
Если нужно убрать несколько страниц вручную, используйте фильтр wp_sitemaps_posts_query_args. Это полезно, когда тестовые страницы уже опубликованы, но вы не хотите переписывать их статус прямо сейчас.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'page' === $post_type ) {
$args['post__not_in'] = array( 123, 456 );
}
return $args;
}, 10, 2 );Минус этого подхода очевиден: список ID нужно поддерживать вручную. Для пары страниц это нормально, для десятков — уже нет.
Если sitemap генерирует SEO-плагин
У Yoast SEO, Rank Math и похожих решений логика может отличаться. Обычно сначала стоит проверить интерфейс плагина: какие post type, таксономии и архивы включены в sitemap. Часто лишний URL появляется не из-за бага, а потому что тип записи сам по себе отмечен как доступный для индексации.
Практика такая:
- уберите из sitemap тестовые post type и таксономии в настройках плагина;
- проверьте, не включены ли архивы автора, если они не нужны;
- после изменений очистите кеш плагина и серверный кеш;
- пересоберите sitemap, если плагин хранит его в кеше.
Если плагин не даёт нужной точности, лучше не пытаться «додавить» его костылями в админке. Проще и безопаснее вынести исключения в код или заменить генерацию карты сайта на более предсказуемую.
Что делать со staging-доменом
Если в sitemap попал именно staging-сайт, проблема обычно шире, чем одна карта сайта. Значит, staging либо не закрыт от индексации, либо его адреса остались в базе и шаблонах. В такой ситуации одной правкой sitemap не обойтись.
Минимальный набор действий
- убрать staging из публичного sitemap;
- проверить
robots.txtи мета-теги на staging; - убедиться, что staging не отдаёт канонические ссылки на прод;
- заменить старые URL в базе, если они уже встроены в контент;
- закрыть доступ к staging на уровне авторизации или IP, если это возможно.
Важно: если staging уже проиндексирован, просто удалить его из sitemap недостаточно. Поисковик может знать эти URL из старых обходов, внешних ссылок или истории сканирования. Тогда нужно дождаться переобхода и при необходимости удалить проблемные адреса через инструменты вебмастера.
Как проверить, что решение сработало
После правок не ограничивайтесь открытием главной sitemap. Проверка должна быть предметной.
- Откройте XML Sitemap и убедитесь, что лишних URL там больше нет.
- Проверьте дочерние sitemap, если они есть: записи, страницы, таксономии, авторы.
- Посмотрите HTTP-ответ sitemap: он должен отдавать
200 OK, а не редиректить на старый домен. - В Search Console отправьте sitemap на повторную обработку и сравните список обнаруженных URL позже.
- Очистите кеш страниц, object cache и CDN, если они используются.
Если у вас есть доступ к серверу, полезно проверить ответ через консоль:
curl -I https://example.com/sitemap.xmlИ отдельно посмотреть содержимое:
curl -s https://example.com/sitemap.xml | head -n 20Так вы быстро поймёте, не отдаёт ли сервер старую версию файла из кеша.
Частые ошибки и как их исправить
Удалили URL из sitemap, но они всё равно индексируются
Это нормально для уже известных поисковику адресов. Sitemap — это сигнал, а не кнопка удаления. Если URL уже в индексе, нужно дождаться переобхода или явно закрыть их от индексации через noindex и корректные редиректы, если страница больше не нужна.
Поставили noindex, но URL остался в sitemap
Это плохая комбинация. Поисковик видит противоречие: вы одновременно просите не индексировать страницу и продолжаете показывать её в карте сайта. Лучше убрать такие URL из sitemap, а затем уже решать, нужен ли им редирект, 410-ответ или временное сохранение без индексации.
Сломали sitemap после обновления плагина
Так бывает, если вы завязались на внутренние структуры плагина вместо официальных фильтров WordPress. Используйте только публичные хуки и проверяйте, не меняется ли логика генерации после обновлений.
Забыли про кеш
Очень частая причина ложных срабатываний. Вы уже убрали URL в коде, но CDN или серверный кеш продолжает отдавать старую sitemap. Если проверяете только в браузере, можно долго искать несуществующую ошибку.
Практические советы по безопасности и производительности
Если staging и тестовые разделы вообще не должны быть доступны извне, не ограничивайтесь SEO-настройками. Закрывайте их на уровне сервера или авторизации. Это надёжнее, чем надеяться на noindex и «не добавлять в sitemap».
Для производительности полезно помнить ещё одну вещь: слишком большая sitemap и лишние URL увеличивают объём обхода. Это не катастрофа, но на больших сайтах лишний шум мешает роботам быстрее находить важные страницы. Чем чище карта сайта, тем проще контролировать индексацию.
Если вы ведёте сайт через несколько окружений, заведите простое правило: staging не публикуется в sitemap, не получает каноникалы на прод и не хранит в базе старые абсолютные ссылки без необходимости. Это экономит время на каждом следующем релизе.
Для сайтов на WordPress, где регулярно чистят дубли, служебные архивы и лишние элементы индексации, удобно использовать Clearfy Pro как набор точечных настроек, если вам нужен не один флажок, а несколько связанных правок по SEO и чистке сайта. Но даже в этом случае сначала проверьте, какой именно URL источник проблемы: плагин не заменяет диагностику.
Если после правок sitemap стал чище, но в индексе остались старые адреса, следующий шаг — отдельно разбирать каноникал, редиректы и ответ сервера для каждого спорного URL. Именно там обычно находится причина, почему поисковик продолжает держать в базе то, что вы уже убрали из карты сайта.