Встроенная XML-карта сайта в WordPress удобна ровно до тех пор, пока на проекте не появляется своя логика индексации: отдельные типы записей, служебные страницы, фильтры, мультиязычность или SEO-плагин, который уже генерирует sitemap. В этот момент часто возникает дублирование карт сайта, лишние URL в индексе и путаница в Google Search Console.
Ниже — практический сценарий: как понять, что именно мешает, как отключить стандартный sitemap WordPress, чем его заменить и как проверить, что после изменений поисковики видят только нужные URL.
Когда встроенный sitemap становится проблемой
С 5.5 WordPress сам отдаёт XML-карту сайта по адресу /wp-sitemap.xml. Для простого сайта это нормально. Но на реальных проектах часто уже есть Yoast SEO, Rank Math, All in One SEO или собственная генерация карт сайта через код. Тогда поисковик может увидеть несколько источников одной и той же структуры, а вы — лишние уведомления об ошибках в Search Console.
Типичные симптомы:
- в индексе появляются URL, которые вы не планировали отдавать через sitemap;
- в Search Console есть несколько sitemap с пересекающимися URL;
- в логике robots.txt и sitemap разные списки страниц;
- встроенный sitemap WordPress отдаёт служебные типы записей, которые нужно скрыть;
- SEO-плагин уже создаёт собственный sitemap, а стандартный только мешает.
Что проверить в первую очередь
Сначала убедитесь, что проблема именно в дублировании или лишних URL, а не в настройках индексации. Откройте:
/wp-sitemap.xml;- сайтмап SEO-плагина, если он установлен;
robots.txt;- отчёт Sitemaps в Google Search Console.
Если в sitemap есть страницы, которые вы не хотите индексировать, но они уже доступны поисковику, отключение карты сайта само по себе не решит задачу. Нужно сначала понять, откуда URL вообще попали в индекс.
Как отключить стандартный XML Sitemap в WordPress
Самый надёжный способ — отключить генерацию через фильтр wp_sitemaps_enabled. Это штатный механизм WordPress, без подмены файлов ядра и без правок плагинов.
add_filter( 'wp_sitemaps_enabled', '__return_false' );Код можно добавить в functions.php дочерней темы, в собственный мини-плагин или в mu-plugin, если нужно зафиксировать поведение независимо от темы.
Вариант через mu-plugin
Если сайт обслуживается несколькими людьми или тема может меняться, лучше не держать такую настройку в теме. Создайте файл, например wp-content/mu-plugins/disable-wp-sitemap.php:
<?php
/**
* Plugin Name: Disable WP Sitemap
*/
add_filter( 'wp_sitemaps_enabled', '__return_false' );Mu-plugin загружается автоматически и не зависит от активации в админке. Это удобно для технических настроек, которые не должны исчезать после обновления темы.
Если нужен не полный запрет, а только частичное отключение
Иногда стандартный sitemap нужен, но вы хотите убрать только отдельные типы данных. В этом случае можно фильтровать объекты, которые WordPress добавляет в карту сайта. Например, убрать медиа-вложения:
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
return $post_types;
} );Это полезно, если вложения создают мусорный индекс, а SEO-плагин не используется или не покрывает ваш сценарий полностью.
Чем заменить встроенный sitemap
Замена зависит от того, что уже стоит на сайте. Если SEO-плагин уже генерирует sitemap, обычно достаточно оставить его и отключить стандартный WordPress sitemap. Если SEO-плагина нет, лучше не собирать карту сайта вручную из подручных решений без необходимости.
| Подход | Когда подходит | Минус |
|---|---|---|
| Отключить встроенный sitemap и оставить SEO-плагин | На сайте уже есть Yoast SEO, Rank Math или аналог | Нужно следить, чтобы не было второй карты сайта |
| Отключить встроенный sitemap и сделать свой генератор | Есть нестандартная логика URL и разработчик на проекте | Нужно поддерживать код и тестировать его после обновлений |
| Оставить стандартный sitemap WordPress | Простой сайт без SEO-плагина и без сложной структуры | Меньше контроля над составом URL |
Если нужен именно технический контроль над SEO-обвязкой сайта, иногда проще использовать набор точечных инструментов, чем собирать всё вручную. Например, в Clearfy Pro есть функции для чистки сайта и удаления лишних технических дублей, но применять такие решения стоит только там, где они реально закрывают задачу, а не заменяют диагностику.
Свой sitemap: минимальный рабочий пример
Если вы действительно хотите отдать поисковикам только нужные URL, можно сделать собственный endpoint через rewrite и вывод XML. Ниже упрощённый пример для статей и страниц. Это не полноценная замена SEO-плагину, но рабочая база для небольшого проекта.
add_action( 'init', function() {
add_rewrite_rule( '^sitemap\.xml$', 'index.php?sitemap=1', 'top' );
add_rewrite_tag( '%sitemap%', '1' );
} );
add_action( 'template_redirect', function() {
if ( get_query_var( 'sitemap' ) !== '1' ) {
return;
}
header( 'Content-Type: application/xml; charset=UTF-8' );
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
$q = new WP_Query([
'post_type' => [ 'post', 'page' ],
'post_status' => 'publish',
'posts_per_page' => 1000,
'no_found_rows' => true,
]);
while ( $q->have_posts() ) {
$q->the_post();
echo '<url>';
echo '<loc>' . esc_url( get_permalink() ) . '</loc>';
echo '<lastmod>' . esc_html( get_the_modified_date( 'c' ) ) . '</lastmod>';
echo '</url>';
}
wp_reset_postdata();
echo '</urlset>';
exit;
} );После добавления такого кода не забудьте обновить правила постоянных ссылок: зайдите в Настройки → Постоянные ссылки и нажмите Сохранить. Без этого новый URL может не заработать.
Пошаговое решение без лишнего риска
- Проверьте, кто сейчас генерирует sitemap: WordPress, SEO-плагин или кастомный код.
- Если есть SEO-плагин, оставьте один источник sitemap и отключите остальные.
- Добавьте фильтр
wp_sitemaps_enabledили точечное исключение нужных типов записей. - Если нужен собственный sitemap, сначала отключите стандартный, потом включайте свой endpoint.
- Обновите постоянные ссылки, если добавляли rewrite rule.
- Проверьте ответ сервера и содержимое XML.
Как проверить, что всё сработало
Проверка должна быть не только визуальной. Смотрите и код ответа, и содержимое страницы.
- Откройте
/wp-sitemap.xml: если вы отключали встроенный sitemap, должен быть 404 или ответ вашего нового endpoint. - Проверьте заголовки через
curl -I https://example.com/wp-sitemap.xml. - Если сделали свой sitemap, откройте его в браузере и убедитесь, что XML валиден и содержит только нужные URL.
- В Google Search Console отправьте только один sitemap-источник и посмотрите, нет ли дублирующихся карт сайта.
- Проверьте, что в sitemap нет
noindex-страниц, архивов и служебных URL.
Для быстрой серверной проверки можно использовать:
curl -I https://example.com/wp-sitemap.xml
curl -I https://example.com/sitemap.xmlЕсли один URL отдаёт 200, а второй 404, это уже хороший признак: у поисковика не будет двух равноправных источников карты сайта.
Частые ошибки и как их исправить
Отключили sitemap, но Search Console всё ещё показывает старые URL
Это нормально на короткой дистанции. Поисковик не удаляет данные мгновенно. Проверьте, не остались ли старые ссылки в robots.txt, внутренних ссылках и внешних XML-картах.
Сайтмап SEO-плагина и WordPress открываются одновременно
Значит, встроенный sitemap не отключён или плагин не перехватывает его полностью. Проверьте, нет ли кода в теме, который снова включает генерацию, и убедитесь, что фильтр wp_sitemaps_enabled реально выполняется.
После добавления rewrite rule sitemap даёт 404
Чаще всего забывают обновить постоянные ссылки или неправильно пишут правило. Ещё одна причина — конфликт с другим плагином, который использует тот же путь.
В sitemap попали вложения и служебные записи
Это не баг, а следствие того, что WordPress по умолчанию может включать больше типов данных, чем нужно проекту. Исключайте их на уровне генерации, а не после индексации.
Безопасность и производительность
С технической точки зрения sitemap не должен нагружать сайт, но самодельные решения легко превращаются в лишний запрос к базе на каждом открытии. Если делаете свой XML, не собирайте тяжёлые выборки без необходимости и не выводите тысячи URL без пагинации, если сайт крупный.
Для больших проектов лучше:
- разбивать sitemap на несколько файлов;
- кешировать готовый XML;
- не генерировать карту сайта на каждом запросе заново;
- не хранить логику в активной теме, если она должна переживать редизайн.
Если задача не требует кастомной разработки, иногда разумнее использовать готовый SEO-инструмент и точечно отключить лишнее. Это проще сопровождать, чем поддерживать собственный генератор XML после каждого обновления ядра или темы.
Практический ориентир простой: если у вас один источник sitemap, в нём только нужные URL, а Search Console не показывает дублирующиеся карты сайта, задача решена. Если же после отключения встроенного sitemap сайт начал терять нужные страницы из индекса, значит, проблема была не в карте сайта, а в общей схеме индексации и внутренних ссылках.