Стандартная XML sitemap в WordPress обычно не мешает, но в реальных проектах она начинает конфликтовать с кастомной логикой: отдельным sitemap от SEO-плагина, нестандартными типами записей, закрытыми разделами, мультиязычностью или генерацией карт сайта на уровне сервера. В таких случаях важно не просто «выключить карту», а сделать это так, чтобы поисковые системы не потеряли актуальный источник URL.
Когда стандартная sitemap действительно лишняя
В WordPress с версии 5.5 встроенная XML-карта сайта включена по умолчанию. Если на сайте уже работает Yoast SEO, Rank Math, All in One SEO или другой SEO-плагин с собственной генерацией sitemap, вы получаете дублирование. Это не всегда критично, но часто создаёт лишний шум: в индексе появляются разные URL карт, а в логах и Search Console сложнее отслеживать, какая версия sitemap реально используется.
Есть и более практичные сценарии:
- нужно полностью управлять списком URL через SEO-плагин или серверную генерацию;
- часть контента закрыта от индексации, а встроенная sitemap продолжает отдавать эти URL;
- на проекте есть кастомные post type и таксономии, которые удобнее собирать отдельной логикой;
- высокая нагрузка на сайт, и вы хотите убрать лишнюю генерацию XML на лету.
Диагностика: что именно сейчас отдаёт sitemap
Перед изменениями проверьте, кто формирует карту сайта. У WordPress по умолчанию это адрес /wp-sitemap.xml. Если SEO-плагин активен, у него обычно свой набор URL, например /sitemap_index.xml у Yoast SEO или похожий индекс у других решений.
Проверка простая:
- Откройте
/wp-sitemap.xmlв браузере. - Проверьте, отдаётся ли XML и какие разделы внутри перечислены.
- Сравните с sitemap SEO-плагина.
- Посмотрите, нет ли в Search Console нескольких карт сайта, которые ведут к одному и тому же набору URL.
Если /wp-sitemap.xml доступен, а вы используете отдельную sitemap от SEO-плагина, встроенную карту лучше отключить или хотя бы убрать из публичного доступа.
Как отключить встроенную XML sitemap в WordPress
Самый безопасный способ — отключить генерацию через фильтр wp_sitemaps_enabled. Это штатный механизм WordPress, без правки ядра.
add_filter( 'wp_sitemaps_enabled', '__return_false' );Код можно добавить в functions.php дочерней темы, в небольшой mu-plugin или в собственный плагин. Для продакшена mu-plugin обычно удобнее: он не зависит от темы и не исчезнет при обновлении.
Вариант через mu-plugin
Создайте файл, например wp-content/mu-plugins/disable-wp-sitemaps.php, и добавьте туда:
<?php
/**
* Disable WordPress core XML sitemaps.
*/
add_filter( 'wp_sitemaps_enabled', '__return_false' );После этого /wp-sitemap.xml должен отдавать 404 или пустой ответ в зависимости от конфигурации и кэша. Если страница продолжает открываться, проверьте кэш плагина, серверный кэш и CDN.
Чем заменить встроенную sitemap
Если у вас уже есть SEO-плагин, обычно лучше оставить только его sitemap. Это проще для поддержки: одна точка управления, один индекс, один набор правил исключения.
Если SEO-плагина нет, а sitemap нужна, можно собрать собственную генерацию, но это имеет смысл только когда есть чёткая причина. Например, вы хотите отдавать в sitemap только определённые типы записей, исключать архивы и закрытые разделы, а также контролировать приоритеты на уровне проекта.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Отключить core sitemap и оставить SEO-плагин | На сайте уже есть Yoast SEO, Rank Math или аналог | Просто, предсказуемо, меньше дублей | Нужно следить за настройками плагина |
| Отключить core sitemap и сделать свою | Есть кастомная логика индексации | Полный контроль над URL | Нужно поддерживать код |
| Оставить обе карты | Почти никогда не нужно | Ничего не менять | Дубли, путаница, лишняя нагрузка |
Если нужен свой sitemap index
Когда проекту нужна отдельная карта сайта, лучше не пытаться «допилить» core sitemap, а отдать свой XML-ответ через rewrite и шаблонный вывод. Ниже упрощённый пример для отдельного URL /custom-sitemap.xml. Он не заменяет полноценный sitemap-плагин, но показывает рабочий принцип.
add_action( 'init', function () {
add_rewrite_rule( '^custom-sitemap\.xml$', 'index.php?custom_sitemap=1', 'top' );
add_rewrite_tag( '%custom_sitemap%', '([0-1])' );
} );
add_action( 'template_redirect', function () {
if ( (int) get_query_var( 'custom_sitemap' ) !== 1 ) {
return;
}
$posts = get_posts( array(
'post_type' => array( 'post', 'page' ),
'post_status' => 'publish',
'posts_per_page' => 200,
'fields' => 'ids',
'no_found_rows' => true,
) );
nocache_headers();
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">';
foreach ( $posts as $post_id ) {
echo '<url>';
echo '<loc>' . esc_url( get_permalink( $post_id ) ) . '</loc>';
echo '</url>';
}
echo '</urlset>';
exit;
} );После добавления rewrite-правила не забудьте обновить постоянные ссылки в админке или вручную сбросить правила. Иначе новый URL не начнёт работать.
Проверка результата после внедрения
Отключение sitemap считается успешным только тогда, когда это подтверждается не одним, а несколькими способами.
- Откройте
/wp-sitemap.xmlи проверьте, что он больше не отдаёт XML. - Если вы оставили sitemap SEO-плагина, убедитесь, что именно она доступна и содержит нужные URL.
- Проверьте исходный код страниц и robots.txt: там не должно быть старых ссылок на отключённую карту.
- В Search Console посмотрите, что в отчётах по sitemap осталась только актуальная карта.
Если сайт за CDN или с агрессивным кэшем, очистите кэш после изменений. Иначе вы можете увидеть старую XML ещё несколько часов, хотя на сервере она уже отключена.
Частые ошибки и как их исправить
Отключили sitemap, но она всё ещё открывается
Чаще всего виноват кэш: плагин кэширования, серверный reverse proxy или CDN. Очистите все уровни кэша и проверьте ответ напрямую, минуя браузерный кэш.
Выключили core sitemap, а SEO-плагин тоже перестал отдавать XML
Такое бывает, если вы добавили код не туда или отключили не тот механизм. Убедитесь, что фильтр wp_sitemaps_enabled влияет только на встроенную карту WordPress, а не на плагин. У SEO-плагинов обычно свой генератор и свой URL.
После добавления rewrite-правила URL даёт 404
Нужно сбросить правила постоянных ссылок. В админке откройте Настройки → Постоянные ссылки и сохраните их без изменений. Если используете код, проверьте, что query var зарегистрирован корректно.
В sitemap попадают закрытые страницы
Это уже не проблема отключения, а проблема генератора. Проверьте настройки SEO-плагина, статусы записей и логику исключений. Если страницы закрыты от индексации, они не должны попадать в публичную sitemap.
Что учесть по безопасности и производительности
Если sitemap генерируется на лету, не делайте тяжёлые запросы без необходимости. Для больших сайтов лучше разбивать карту на несколько файлов и не вытаскивать лишние поля. В примерах выше использован fields => 'ids' и no_found_rows => true — это снижает нагрузку на запрос.
Для проектов, где важна чистка технических дублей и контроль индексации, удобно держать логику в одном месте. Например, часть задач по удалению дублей, отключению лишних функций WordPress и управлению SEO-настройками можно закрывать через Clearfy Pro, если он уже используется в проекте. Но даже в этом случае полезно понимать, какой именно механизм отключает sitemap и где он живёт — в ядре, теме или плагине.
Если вы меняете sitemap на рабочем сайте, делайте это в такой последовательности: сначала подготовьте замену, потом отключите встроенную карту, затем проверьте ответ сервера и только после этого обновляйте Search Console. Так проще поймать ошибку, если что-то пошло не так.