Иногда sitemap в WordPress начинает мешать, а не помогать: в индекс попадают служебные записи, архивы с дублями, черновые типы контента или страницы, которые вы сознательно закрыли от поиска. Если карта сайта генерируется автоматически, но исключить из нее отдельные типы контента штатно не получается, проще всего вмешаться через фильтры ядра или настройки SEO-плагина.
Ниже разберем рабочие сценарии: как понять, что именно попадает в sitemap, как исключить конкретный post type или taxonomy, чем отличается решение для ядра WordPress и для популярных SEO-плагинов, и как проверить, что поисковики больше не видят лишние URL.
Когда sitemap нужно править вручную
Типичный запрос выглядит так: у сайта есть product, portfolio, faq или другой кастомный тип записей, но в sitemap он не нужен. Либо наоборот — в карту сайта попадают страницы, которые закрыты от индексации, и это создает путаницу для поисковых систем и для аналитики.
Сначала стоит понять, кто именно генерирует sitemap:
- ядро WordPress — начиная с версии 5.5, sitemap доступен по адресу
/wp-sitemap.xml; - SEO-плагин — например, Yoast SEO, Rank Math, All in One SEO;
- кастомный код темы или плагина.
От этого зависит способ правки. Если вы отключаете один источник и не замечаете второй, результат будет неполным.
Диагностика: что именно попадает в XML sitemap
Перед изменениями откройте sitemap в браузере и посмотрите структуру. В ядре WordPress обычно есть отдельные индексы для постов, страниц, авторов и таксономий. В SEO-плагинах структура может быть другой, но логика та же: сначала индекс, потом набор URL.
Что проверить в первую очередь
- какие post type вообще присутствуют в sitemap;
- есть ли там архивы таксономий, которые дублируют контент;
- не попадают ли в карту сайта служебные страницы, например результаты поиска или внутренние архивы;
- не включены ли в sitemap записи со статусом
noindexили закрытые в robots.txt — это уже признак несогласованной настройки.
Если у вас установлен SEO-плагин, сначала проверьте его настройки. Часто исключение делается без кода: для конкретного post type можно снять галочку в разделе XML sitemap. Но если нужна точечная логика, удобнее использовать фильтр.
Решение для встроенного sitemap WordPress
Если вы используете именно sitemap ядра WordPress, можно исключить отдельные типы записей через фильтр wp_sitemaps_post_types. Это безопаснее, чем пытаться удалять URL уже после генерации XML.
<?php
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
// Убираем служебный тип записей из sitemap.
unset( $post_types['portfolio'] );
// Можно исключить сразу несколько типов.
unset( $post_types['faq'] );
return $post_types;
} );Этот код можно добавить в functions.php дочерней темы или в небольшой mu-plugin. Если вы правите тему напрямую, обновление может затереть изменения.
Как исключить таксономии
Для таксономий в ядре есть отдельный фильтр — wp_sitemaps_taxonomies. Это полезно, если у вас есть архивы тегов, которые создают дубли или не несут ценности для поиска.
<?php
add_filter( 'wp_sitemaps_taxonomies', function( $taxonomies ) {
unset( $taxonomies['post_tag'] );
unset( $taxonomies['faq_category'] );
return $taxonomies;
} );Важно: не удаляйте таксономию только потому, что она кажется лишней. Если по ней есть живой трафик или она помогает навигации, сначала проверьте статистику и внутреннюю перелинковку.
Если sitemap генерирует SEO-плагин
У SEO-плагинов логика обычно проще: в настройках есть переключатель для каждого типа контента, а иногда и для отдельных архивов. Но если нужен код, ориентируйтесь на документацию конкретного плагина. Универсального фильтра на все случаи нет, и это нормально — у каждого плагина свой набор хуков.
Практически это выглядит так:
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки плагина | Нужно отключить тип контента без кода | Быстро, безопасно | Не всегда хватает точности |
| Фильтры WordPress | Используется встроенный sitemap | Гибко, прозрачно | Нужно править код |
| Кастомный плагин | Нужно сохранить логику после смены темы | Не зависит от темы | Нужно поддерживать отдельно |
Если сайт обслуживается командой, лучше вынести такие правки в отдельный мини-плагин. Тогда при смене темы sitemap не сломается.
Пошаговая схема внедрения
- Определите источник sitemap: ядро WordPress или SEO-плагин.
- Составьте список того, что нужно исключить: post type, taxonomy, архив автора, служебные страницы.
- Добавьте фильтр в дочернюю тему или mu-plugin.
- Очистите кеш страницы, если он есть на сервере, в плагине или на CDN.
- Проверьте XML sitemap в браузере и через Search Console.
Если вы используете несколько уровней кеширования, не ограничивайтесь очисткой только плагина кеша. Иногда sitemap отдается из nginx cache, Cloudflare или другого reverse proxy, и изменения не видны сразу.
Проверка результата после внедрения
После правки откройте sitemap вручную и убедитесь, что исключенный тип больше не присутствует в индексе. Если вы удаляли taxonomy, проверьте, что ее архивы исчезли из XML, а не только из HTML-страниц.
Дополнительно стоит проверить:
- ответ сервера на
/wp-sitemap.xmlили sitemap SEO-плагина; - наличие старых URL в кеше браузера и CDN;
- статус в Google Search Console, если сайт уже отправлял sitemap;
- нет ли внутренних ссылок на удаленные из карты сайта архивы.
Если URL все еще отображаются, проблема обычно не в фильтре, а в том, что вы редактируете не тот источник sitemap или изменения не дошли до публичного ответа сервера.
Частые ошибки и как их исправить
Удалили не тот тип записи
В WordPress название post type должно совпадать с зарегистрированным ключом. Если в коде написано portfolio, а реальный ключ — projects, фильтр ничего не изменит. Проверьте регистрацию типа записи в коде темы или плагина.
Правка сделана в родительской теме
После обновления темы изменения исчезнут. Для таких задач используйте дочернюю тему или отдельный mu-plugin.
Отключили sitemap, но URL остались в индексе
Удаление из sitemap не равно удалению из индекса. Если страница уже проиндексирована, поисковик может держать ее какое-то время. Для закрытия от индексации используйте noindex, а sitemap правьте отдельно.
Путают sitemap и robots.txt
Закрытие URL в robots.txt не убирает их из sitemap автоматически. Это разные механизмы. Если страница не должна индексироваться, нужно согласованно настроить и мета-robots, и карту сайта.
Безопасность и производительность
Такие правки почти не нагружают сайт, если вы используете фильтры ядра и не строите sitemap вручную на каждом запросе. Но есть несколько практических правил:
- не вставляйте код в случайные сниппет-плагины без понимания, как они хранят и выполняют PHP;
- не правьте sitemap через буферизацию HTML-вывода, если можно использовать штатный фильтр;
- после изменений проверьте, не сломались ли XML-ответы для ботов и валидаторов;
- если сайт большой, следите за кешированием sitemap на уровне сервера и CDN.
Для сайтов, где регулярно появляются дубль-архивы, иногда удобнее дополнительно использовать инструменты чистки дублей и SEO-настроек. Например, в Clearfy Pro есть набор функций для технической оптимизации и удаления лишних сущностей, но даже там лучше сначала понять, какой именно URL вы хотите убрать из индекса и из sitemap, а не отключать все подряд.
Когда лучше не трогать sitemap кодом
Если у вас обычный сайт на нескольких страницах и блог без кастомных типов, ручная правка часто не нужна. В этом случае достаточно штатных настроек SEO-плагина. Код оправдан, когда:
- нужно исключить только один тип контента, а не весь блок;
- на сайте несколько источников sitemap;
- настройки плагина не дают нужной точности;
- правка должна пережить смену темы.
Если хотите, можно пойти еще дальше и вынести исключения в отдельный мини-плагин: так логика останется независимой от дизайна и не потеряется при обновлении темы.