Ситуация знакомая: sitemap есть, Search Console его читает, но в индексацию уезжают не те URL. Чаще всего проблема не в самом файле карты сайта, а в том, что WordPress и плагины SEO одновременно отдают разные наборы ссылок: архивы, служебные страницы, вложения, дубли таксономий или нестандартные типы записей. В итоге карта сайта выглядит «полной», но для поисковика она шумная.
Ниже разберём, как убрать дубли из XML sitemap в WordPress без грубого отключения нужных сущностей. Подход подойдёт, если вы не хотите ломать генерацию карты сайта целиком и предпочитаете точечно исключить только проблемные URL.
Когда sitemap начинает раздуваться лишними URL
Проверять надо не только сам файл /sitemap.xml, но и то, что в него реально попадает. В WordPress это может быть:
- архивы авторов и дат;
- вложения с отдельными URL;
- служебные страницы плагинов;
- дубли записей из нескольких таксономий;
- нестандартные типы записей, которые не должны индексироваться;
- URL с параметрами, если их кто-то ошибочно добавил в генератор.
Если карта сайта строится через SEO-плагин, а часть URL ещё и добавляется темой или кастомным кодом, дубли появляются незаметно. На стороне поисковика это выглядит как лишние обходы и размывание приоритета важных страниц.
Что именно нужно проверить в первую очередь
Перед правками откройте сам sitemap и проверьте, какие типы URL там повторяются. Если вы используете Yoast SEO, Rank Math или другой SEO-плагин, посмотрите его настройки индексации и исключений. Если карта сайта генерируется ядром WordPress, проверьте фильтры, которые могли добавить тему или mu-plugin.
Минимальный чек-лист диагностики:
- есть ли в sitemap архивы, которые вы не хотите индексировать;
- попадают ли туда вложения с отдельной страницей;
- не дублируются ли записи через несколько sitemap-файлов;
- совпадают ли URL в sitemap с каноническими адресами на сайте;
- не добавляет ли кастомный код лишние типы записей в XML.
Как убрать дубли: сравнение подходов
Есть три рабочих пути. Выбор зависит от того, где именно рождается проблема.
| Подход | Когда подходит | Плюс | Минус |
|---|---|---|---|
| Настройки SEO-плагина | Если лишние URL добавляет Yoast, Rank Math или аналог | Без кода, быстро | Не решает кастомные дубли из темы |
| Фильтры WordPress sitemap | Если нужно точечно убрать типы записей, таксономии или вложения | Точный контроль | Нужен код и тестирование |
| Кастомный sitemap-слой | Если сайт сильно доработан и стандартная логика мешает | Можно собрать карту под свою структуру | Больше поддержки и риск ошибок |
Для большинства проектов достаточно настроек плагина и одного-двух фильтров. Полностью переписывать генерацию карты сайта обычно не нужно.
Пошаговое решение через фильтры WordPress
Если карта сайта строится ядром WordPress, у него есть фильтры для исключения типов записей и таксономий. Это самый предсказуемый способ убрать дубли без отключения всего sitemap.
1. Исключите ненужные типы записей из sitemap
Например, если у вас есть служебный тип записи promo_banner, который не должен попадать в XML-карту, его можно скрыть так:
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['promo_banner'] );
unset( $post_types['attachment'] );
return $post_types;
} );Здесь важно не удалять всё подряд. Если вы уберёте post или page по ошибке, sitemap станет неполным. Сначала проверьте, какие типы реально зарегистрированы на сайте.
2. Уберите лишние таксономии
Если в карте сайта появляются архивы таксономий, которые не должны индексироваться, используйте фильтр для таксономий:
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['product_cat'] );
return $taxonomies;
} );Этот приём полезен, когда теги или вспомогательные рубрики создают много слабых страниц. Но если таксономия даёт трафик и у неё есть нормальная структура, отключать её только ради «чистоты» не стоит.
3. Если проблема в вложениях, отключите их отдельно
Вложения часто создают мусорные URL, особенно если медиафайлы индексируются как отдельные страницы без полезного контента. В таком случае их лучше убрать из sitemap и отдельно проверить, не открыты ли они для индексации через SEO-плагин или robots/noindex.
Для ядра WordPress достаточно исключить attachment из списка типов записей, как в примере выше. Если вложения нужны в медиатеке, это не мешает их хранению в админке — речь только о sitemap.
Если sitemap генерирует SEO-плагин
У плагинов логика отличается. В Yoast SEO и Rank Math исключения обычно настраиваются в интерфейсе: типы записей, таксономии, архивы, медиа. Это предпочтительнее кода, если проблема типовая и не требует тонкой логики.
Но если плагин не даёт нужной гранулярности, лучше не смешивать несколько способов сразу. Сначала отключите лишнее в настройках плагина, затем проверьте, не добавляет ли тему или кастомный код дополнительные sitemap-эндпоинты.
Если вы используете Clearfy Pro, его удобно подключать именно как инструмент для чистки лишних сущностей и дублей на техническом уровне. Но даже в этом случае сначала стоит понять, откуда берётся лишний URL, а не просто скрывать его наугад. Подробности о плагине есть здесь: Clearfy Pro.
Как проверить, что решение сработало
После правок не ограничивайтесь визуальной проверкой sitemap в браузере. Нужна проверка по факту, что URL исчезли из карты сайта и не возвращаются через другие источники.
- Откройте sitemap и убедитесь, что лишний тип записей больше не присутствует.
- Проверьте вложенные sitemap-файлы, если карта разбита на несколько частей.
- Посмотрите исходный XML, а не только страницу-обёртку.
- Сравните список URL с тем, что уже отправлено в Search Console.
- Проверьте, не остались ли старые ссылки в кеше плагина или CDN.
Если вы используете кеширование страниц, sitemap может отдаваться из кеша даже после правки кода. В таком случае очистите кеш плагина, серверный кеш и, если есть, кеш CDN. Иначе вы будете смотреть на старую версию карты сайта и думать, что фильтр не работает.
Частые ошибки и как их исправить
Удалили не тот тип записи
Самая частая ошибка — убрать из sitemap нужный post type, потому что его название похоже на служебный. Перед правкой проверьте регистрацию типа записи в коде темы или плагина через register_post_type().
Отключили sitemap, а дубли остались
Это бывает, если дубли идут не из XML-карты, а из архивов, пагинации или параметров URL. В этом случае проблема уже не в sitemap, а в общей индексации сайта. Нужно отдельно разбирать каноникал, robots и noindex.
Правки внесли в тему, а потом потеряли после обновления
Код для фильтров лучше держать в дочерней теме, mu-plugin или отдельном мини-плагине. Иначе при обновлении темы вы снова получите старую карту сайта.
Смешали несколько SEO-плагинов
Если на сайте одновременно активны два плагина, которые умеют генерировать sitemap, результат часто непредсказуем: один скрывает URL, другой добавляет его обратно. Оставьте один источник sitemap и отключите лишнюю генерацию в остальных инструментах.
Практические советы по безопасности и производительности
Техническая чистка sitemap не должна превращаться в бесконечную ручную поддержку. Чем меньше кастомной логики вы добавляете в тему, тем проще сопровождать сайт. Если правок много, вынесите их в отдельный mu-plugin и зафиксируйте список исключений в комментариях к коду.
Ещё один полезный момент: не пытайтесь скрыть проблему только на уровне sitemap, если страница всё равно доступна и индексируется через внутренние ссылки. Сначала определите, нужна ли эта страница вообще. Если нет — уберите её из навигации, архивов и генерации ссылок, а не только из XML.
Для сайтов с большим количеством контента имеет смысл периодически сверять sitemap с реальной структурой: какие типы записей живые, какие архивы полезны, а какие только создают шум. Это дешевле, чем потом разбирать тысячи лишних URL в отчётах поисковиков.
Если нужен более широкий инструмент для технической чистки WordPress, можно посмотреть и на Clearfy Pro, но использовать его стоит как часть понятной схемы, а не как замену диагностике.