Ситуация типовая: в sitemap попадают служебные страницы, черновые шаблоны, дубли пагинации или URL, которые вы не хотите подталкивать к индексации. Сам по себе XML sitemap не запрещает индексацию, но он сильно влияет на то, какие страницы поисковик увидит в первую очередь. Если в карту сайта попадает мусор, вы тратите краулинговый бюджет и усложняете диагностику SEO.
Ниже разберём, как убрать конкретные страницы из XML sitemap в WordPress так, чтобы не задеть нужные URL, и как проверить, что всё действительно сработало.
Когда проблема действительно в sitemap
Не каждая SEO-проблема связана именно с картой сайта. Сначала проверьте, что у вас именно этот сценарий:
- страница есть в XML sitemap, но не должна там быть;
- в Search Console она помечается как обнаруженная через sitemap;
- URL технический: архив, служебная страница, тестовый материал, дубль;
- страница уже закрыта от индексации, но всё равно остаётся в карте сайта;
- после удаления из sitemap поисковик всё ещё держит URL в индексе — это нормально, если не было других сигналов.
Важно не путать sitemap и robots.txt. Если вы просто закроете URL в robots.txt, но оставите его в sitemap, вы получите конфликт сигналов: поисковик видит URL в карте сайта, но не может его нормально обойти. Для чистки sitemap лучше убирать URL именно из генерации карты сайта, а не маскировать проблему.
Какие варианты есть и что выбрать
В WordPress обычно есть три рабочих подхода: настройки SEO-плагина, фильтр в коде темы или мини-плагин, а также исключение целого типа контента, если он технический. Выбор зависит от того, насколько точечно нужно убрать URL.
| Способ | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Нужно убрать записи, страницы, таксономии или отдельные типы контента | Без кода, быстро проверить | Не всегда хватает для точечного исключения одного URL |
| Фильтр в коде | Нужно убрать конкретные ID, посты или URL | Точно и прозрачно | Нужен доступ к коду и аккуратность |
| Отключение типа контента из sitemap | Технический CPT не должен попадать в карту сайта вообще | Чистое решение | Можно случайно скрыть полезные URL, если тип контента используется шире |
Пошаговое решение через SEO-плагин
Если у вас установлен плагин с управлением sitemap, начните с него. В большинстве случаев это самый безопасный путь: вы не трогаете код и можете быстро откатить изменения.
1. Найдите источник sitemap
Проверьте, кто именно генерирует карту сайта. В WordPress это обычно один из SEO-плагинов. У каждого свой интерфейс, но логика одинаковая: есть раздел с XML sitemap и список типов контента, которые можно исключить.
2. Уберите ненужный тип контента или таксономию
Если проблема не в одной странице, а в целом разделе, исключите его на уровне типа записи или таксономии. Например, если у вас есть технический CPT для временных страниц, лучше убрать его целиком, чем вручную вычищать каждый URL.
3. Для одной страницы используйте исключение по ID или настройку noindex
Если нужно убрать только один URL, проверьте, поддерживает ли ваш SEO-плагин исключение конкретной записи из sitemap. Иногда это делается через метабокс на странице редактирования, иногда через список исключений в настройках.
Если плагин не умеет исключать точечно, можно оставить страницу с noindex, но это не заменяет удаление из sitemap. Лучше добиться, чтобы URL вообще не попадал в карту сайта.
Точечное исключение через код
Когда нужен контроль над конкретными страницами, удобнее сделать это фильтром. Ниже пример для sitemap, который генерируется SEO-плагином с поддержкой фильтрации списка URL. Логика простая: вы получаете массив ссылок и удаляете из него ненужные элементы по ID.
<?php
add_filter( 'wpseo_sitemap_post_url_list', function( $url_list, $post_type ) {
if ( 'post' !== $post_type ) {
return $url_list;
}
$exclude_ids = array( 12, 34, 56 );
foreach ( $url_list as $key => $url ) {
if ( isset( $url['id'] ) && in_array( (int) $url['id'], $exclude_ids, true ) ) {
unset( $url_list[ $key ] );
}
}
return array_values( $url_list );
}, 10, 2 );Этот пример подходит, если ваш SEO-плагин использует похожий фильтр для списка URL. Перед внедрением обязательно проверьте документацию конкретного плагина: названия фильтров отличаются. Смысл кода — показать рабочую схему, а не универсальный хук для всех случаев.
Если нужно исключить не записи, а, например, страницы определённого шаблона, лучше отфильтровать их по метаданным или по шаблону страницы. Тогда вы не будете держать список ID вручную.
<?php
add_filter( 'wpseo_sitemap_post_url_list', function( $url_list, $post_type ) {
if ( 'page' !== $post_type ) {
return $url_list;
}
foreach ( $url_list as $key => $url ) {
$post_id = isset( $url['id'] ) ? (int) $url['id'] : 0;
if ( ! $post_id ) {
continue;
}
$template = get_page_template_slug( $post_id );
if ( 'templates/landing.php' === $template ) {
unset( $url_list[ $key ] );
}
}
return array_values( $url_list );
}, 10, 2 );Если sitemap генерирует не SEO-плагин
В WordPress есть встроенная XML-карта сайта, начиная с 5.5. Если вы не используете SEO-плагин, исключение делается через фильтры ядра. Это полезно, когда нужно убрать целый тип записи или конкретный объект из стандартного sitemap.
Например, можно исключить запись по ID из стандартной карты сайта через фильтр wp_sitemaps_posts_query_args, чтобы WordPress не включал её в выборку.
<?php
add_filter( 'wp_sitemaps_posts_query_args', function( $args, $post_type ) {
if ( 'post' !== $post_type ) {
return $args;
}
$args['post__not_in'] = array( 12, 34, 56 );
return $args;
}, 10, 2 );Если нужно убрать целый тип записи, можно отключить его из sitemap через фильтр wp_sitemaps_post_types. Это уже хороший вариант для технических CPT, которые не должны попадать в карту сайта вообще.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['landing'] );
unset( $post_types['popup'] );
return $post_types;
} );Как проверить, что решение сработало
После изменения не ограничивайтесь открытием главной sitemap. Проверять нужно именно тот URL, который вы исключали.
- Откройте sitemap вручную и убедитесь, что нужного URL там больше нет.
- Проверьте вложенные sitemap, если карта разбита по типам контента.
- В Search Console откройте отчёт по страницам и убедитесь, что URL больше не обнаруживается через sitemap.
- Если страница уже была в индексе, дождитесь повторного обхода: удаление из sitemap не удаляет URL мгновенно.
Полезно также проверить HTTP-ответ самой sitemap. Она должна отдавать 200 OK, а не редиректить на другой адрес. Иначе поисковик может видеть старую версию карты сайта или вообще не обновлять её вовремя.
Частые ошибки и как их исправить
URL убрали из sitemap, но он всё ещё индексируется
Это нормально, если страница доступна по прямой ссылке и не закрыта от индексации. Sitemap — это сигнал, а не запрет. Если URL нужно убрать из индекса, дополнительно проверьте noindex, каноникал и внутренние ссылки.
Страница исчезла из sitemap, но вместе с ней пропали и нужные URL
Обычно это случается, когда исключают не одну запись, а целый тип контента или шаблон слишком широким условием. Перепроверьте, по какому признаку вы фильтруете: ID, шаблон, метаполе, статус записи.
Изменения не видны сразу
Причина часто в кэше. Если на сайте есть page cache, объектный кэш или CDN, очистите их после правки. Иначе вы смотрите старую версию sitemap и делаете ложный вывод, что код не работает.
Фильтр добавили в тему, а после обновления он пропал
Код для sitemap лучше держать в дочерней теме или в небольшом mu-plugin. Так вы не потеряете правку при обновлении темы и не будете искать её по файлам через полгода.
Что проверить перед публикацией изменений
- исключаемый URL действительно не нужен в поиске;
- он не участвует во внутренней навигации и перелинковке;
- для него не нужен отдельный трафик из поиска;
- если это служебная страница, она закрыта и от индексации, и от попадания в sitemap;
- после правки sitemap отдаёт актуальную версию без кэша;
- в Search Console нет новых ошибок по карте сайта.
Практические советы по безопасности и поддержке
Не редактируйте ядро WordPress и файлы SEO-плагина напрямую. Любое обновление затрёт изменения. Если нужен код, используйте mu-plugin или дочернюю тему. Для точечных исключений это самый надёжный вариант.
Если у вас много технических URL, имеет смысл сначала навести порядок в структуре контента: убрать лишние CPT, закрыть тестовые разделы, отключить генерацию пустых архивов. В таких случаях полезно смотреть на sitemap как на итоговую витрину, а не как на единственное место исправления.
Если нужен более широкий набор инструментов для чистки дублей и технической оптимизации, можно посмотреть в сторону Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpcourse.ru&utm_medium=article&utm_campaign=isklyuchit-stranitsy-iz-xml-sitemap-v-wordpress. Но даже с плагином всё равно полезно понимать, что именно вы исключаете и почему.
Главный критерий успеха простой: в sitemap остаются только те URL, которые вы реально хотите показывать поисковику. Всё остальное должно быть убрано точечно, без побочных эффектов для индексации и навигации.