Дубли в XML sitemap обычно появляются не из-за одной ошибки, а из-за набора мелких настроек: в карту попадают архивы, вложения, служебные страницы, старые таксономии, а иногда еще и URL с параметрами. В итоге sitemap разрастается, в Search Console появляются лишние адреса, а поисковику приходится тратить обход на то, что вы не хотите индексировать.
Ниже — рабочий сценарий: сначала находим источник дублей, потом убираем их на уровне настроек и кода, а после проверяем, что карта сайта стала чище и не потеряла нужные URL.
Как понять, что дубли действительно идут из sitemap
Не стоит начинать с правки кода, пока не ясно, откуда именно берутся лишние ссылки. В WordPress дубли в sitemap чаще всего создают:
- вложения медиафайлов, если они открыты как отдельные страницы;
- архивы авторов, дат, тегов и пустых таксономий;
- черновики и приватные записи, если их случайно подхватил плагин;
- кастомные типы записей, для которых карта сайта включена без проверки;
- дубли одного и того же контента в разных форматах URL.
Быстрая диагностика
Откройте sitemap в браузере и посмотрите, какие типы URL повторяются. Если у вас используется стандартный sitemap WordPress, адрес обычно выглядит как /wp-sitemap.xml. У SEO-плагинов путь может быть другим, но логика та же: ищем повторяющиеся шаблоны URL и лишние разделы.
Полезно сверить карту сайта с реальным списком публичных объектов в админке. Если в sitemap есть то, чего не должно быть в индексе, проблема почти всегда в настройке источника, а не в поисковике.
Что именно нужно убрать из XML sitemap
Здесь важно не путать «дубль» и «лишний URL». Дубль — это когда один и тот же контент доступен по нескольким адресам. Лишний URL — это когда страница сама по себе не нужна в индексе, но попала в sitemap. Для чистки карты сайта обычно убирают:
- attachment-страницы вложений;
- пустые или служебные архивы;
- страницы пагинации, если они не несут отдельной ценности;
- таксономии без контента;
- внутренние страницы поиска и служебные шаблоны.
Если вы используете SEO-плагин, часть задач можно решить в интерфейсе. Но когда карта сайта собирается из нескольких источников или нужно точечно исключить типы записей, проще и надежнее сделать это кодом.
Пошаговое решение: убрать лишние URL из sitemap
Ниже два подхода: через фильтры WordPress и через настройки SEO-плагина. Если нужен контроль на уровне темы или небольшого mu-plugin, используйте код. Если сайт ведется редакторами и вам нужно быстро отключать разделы без разработки, часть задач можно закрыть настройками плагина.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки SEO-плагина | Нужно быстро скрыть типы страниц без кода | Просто поддерживать, меньше риска сломать сайт | Не всегда хватает точности |
| Код через фильтры | Нужно убрать конкретные URL или типы объектов | Точный контроль, не зависит от интерфейса | Требует проверки после обновлений |
| Комбинированный вариант | Есть и SEO-плагин, и нестандартные типы записей | Гибкость и управляемость | Нужно следить, чтобы правила не конфликтовали |
1. Убираем вложения и служебные типы записей
Если вы используете стандартный sitemap WordPress, можно отключить отдельные типы объектов через фильтр wp_sitemaps_post_types. Пример ниже убирает вложения из карты сайта и оставляет только нужные типы записей:
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
// Если нужно, можно отключить и другие типы:
// unset( $post_types['revision'] );
// unset( $post_types['nav_menu_item'] );
return $post_types;
} );Этот код лучше размещать в небольшом mu-plugin или в отдельном функциональном плагине, а не в functions.php активной темы. Так он не пропадет при смене темы.
2. Исключаем пустые таксономии
Если в sitemap попадают архивы рубрик, тегов или кастомных таксономий без записей, их можно отфильтровать через wp_sitemaps_taxonomies. Это полезно, когда на сайте много служебных таксономий, которые создают шум.
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
foreach ( $taxonomies as $taxonomy => $object ) {
if ( in_array( $taxonomy, array( 'post_tag', 'post_format' ), true ) ) {
unset( $taxonomies[ $taxonomy ] );
}
}
return $taxonomies;
} );Не отключайте таксономии вслепую. Если рубрики или теги реально дают трафик и у них есть уникальный контент, лучше оставить их в sitemap и отдельно поработать с качеством страниц.
3. Если используется SEO-плагин
В популярных SEO-плагинах обычно есть отдельные переключатели для типов записей, таксономий и архивов. Логика простая: если раздел не должен индексироваться, он не должен попадать и в sitemap. Но после изменения настроек обязательно проверьте, что плагин не оставил старые URL в кеше sitemap.
Если у вас включен кеш страницы или серверный кеш, обновление sitemap может не отразиться сразу. В таком случае очистите кеш плагина, кеш сервера и, если используется CDN, его тоже.
Проверка результата после внедрения
После правок важно не ограничиваться визуальной проверкой в браузере. Нужно убедиться, что sitemap действительно отдает новый список URL и что поисковик видит именно его.
- Откройте sitemap в режиме инкогнито и проверьте, исчезли ли лишние разделы.
- Сравните количество URL до и после изменения.
- Проверьте, что важные страницы, записи и нужные таксономии остались в карте сайта.
- Если есть Search Console, отправьте sitemap повторно и посмотрите, не растет ли число исключенных URL по старым причинам.
Для быстрой проверки можно использовать простой запрос к sitemap из командной строки:
curl -I https://example.com/wp-sitemap.xmlВ ответе важно увидеть 200 OK. Если у вас sitemap генерируется SEO-плагином, проверьте его адрес отдельно. Иногда проблема не в содержимом, а в редиректе, который ломает обход.
Частые ошибки и как их исправить
Отключили не тот тип записей
Самая частая ошибка — убрать из sitemap тип записи, который реально нужен для индексации. Например, кастомный тип с полезными страницами. Исправление простое: верните тип обратно и проверьте, есть ли у него публичные одиночные страницы и корректные canonical.
Удалили URL из sitemap, но не закрыли дубли
Если одна и та же страница доступна по нескольким адресам, одного удаления из sitemap мало. Нужно проверить canonical, редиректы и внутренние ссылки. Иначе поисковик все равно найдет альтернативный URL.
Кеш отдает старую карту сайта
После правок sitemap может выглядеть старым из-за кеша. Очистите кеш плагина, объектный кеш, серверный кеш и CDN. Если sitemap генерируется динамически, убедитесь, что его не кэширует внешняя система слишком агрессивно.
Сломали sitemap на уровне темы
Если код добавлен в functions.php, он может перестать работать после обновления темы или переезда на другую. Для таких задач надежнее использовать mu-plugin. Это особенно важно, если сайт обслуживает несколько человек и изменения в теме не контролируются разработчиком.
Как не создать новые проблемы с индексацией
Чистка sitemap не должна превращаться в хаотичное отключение всего подряд. Если задача — уменьшить шум в индексации, держите несколько правил:
- не убирайте из sitemap страницы, которые должны получать переходы из поиска;
- не отключайте архивы только потому, что они «кажутся лишними»;
- проверяйте связку sitemap + canonical + robots.txt, а не только один файл;
- после изменений смотрите логи обхода и отчеты Search Console, если они доступны;
- не смешивайте в одном месте логику SEO и логику шаблона темы без необходимости.
Если на сайте много дублей из-за архивов, фильтров и служебных страниц, иногда удобнее сначала навести порядок в структуре URL и только потом чистить sitemap. Иначе вы уберете симптомы, но не причину.
Для сайтов, где нужно регулярно чистить дубли, служебные архивы и мусорные страницы, можно рассмотреть инструменты вроде Clearfy Pro: он помогает закрывать типовые SEO-дубли и упрощает техническую чистку сайта. Но даже с плагином базовую проверку sitemap все равно лучше делать вручную.
После внедрения изменений проверьте три вещи: sitemap открывается без ошибок, в нем остались только нужные URL, а Search Console больше не показывает лишние разделы как новые источники обхода. Если хотя бы один пункт не выполняется, значит, проблема еще не закрыта и нужно искать источник дублей глубже — в настройках, кеше или генераторе sitemap.