Встроенный XML sitemap в WordPress удобен до тех пор, пока не начинается конфликт с SEO-плагином, кастомными типами записей или ручной логикой индексации. Типичный сценарий: в поиске уже есть карта сайта от Yoast, Rank Math или другого плагина, а в корне сайта внезапно появляется ещё и /wp-sitemap.xml. В результате вы получаете дублирующие карты, лишние запросы к краулеру и путаницу в том, какую карту отправлять в Search Console.
Если задача не просто «спрятать файл», а именно убрать стандартный sitemap WordPress и оставить один контролируемый источник, лучше сделать это аккуратно: сначала проверить, кто его отдаёт, потом отключить встроенную генерацию, затем убедиться, что поисковые системы видят только нужную карту.
Когда встроенный sitemap действительно мешает
Сам по себе wp-sitemap.xml не ошибка. Проблема начинается, когда он конфликтует с вашей схемой индексации. Это особенно заметно на сайтах, где:
- уже установлен SEO-плагин со своим sitemap;
- есть закрытые от индексации типы записей, но они всё равно попадают в карту;
- нужно исключить медиа, таксономии или служебные архивы из общей логики;
- в Search Console появляются несколько карт, которые дублируют друг друга;
- сервер отдаёт лишнюю нагрузку на генерацию карты при каждом обходе.
Если у вас маленький сайт без SEO-плагина, встроенная карта может быть вполне достаточной. Но если есть кастомизация, лучше держать sitemap под контролем в одном месте.
Диагностика: кто именно отдаёт карту сайта
Перед изменениями проверьте, откуда берётся sitemap. Это важно, потому что отключение встроенной карты WordPress не отключает карту SEO-плагина, и наоборот.
Что проверить вручную
- Откройте
/wp-sitemap.xmlв браузере. - Проверьте, не редиректит ли он на карту SEO-плагина.
- Посмотрите исходный код страницы карты: там обычно видно, какой генератор её создал.
- Если используете Yoast или Rank Math, проверьте их настройки sitemap отдельно.
Если /wp-sitemap.xml открывается и показывает стандартную структуру WordPress, значит встроенный sitemap активен. Если там уже карта плагина, отключать встроенную генерацию всё равно полезно, чтобы не оставлять лишнюю точку входа.
Как отключить встроенный XML sitemap в WordPress
Самый надёжный способ — через фильтр wp_sitemaps_enabled. Он есть в ядре WordPress и позволяет полностью выключить встроенный генератор.
<?php
add_filter( 'wp_sitemaps_enabled', '__return_false' );Код можно добавить в functions.php дочерней темы, но практичнее вынести его в небольшой mu-plugin, чтобы он не зависел от темы.
<?php
/**
* Plugin Name: Disable Core XML Sitemap
*/
add_filter( 'wp_sitemaps_enabled', '__return_false' );Если вы работаете на продакшене, mu-plugin удобнее: он не отключится случайно при смене темы и не потеряется после обновления.
Когда этого недостаточно
Иногда карта WordPress уже отключена, но URL /wp-sitemap.xml всё ещё отвечает 200. Это обычно означает, что:
- SEO-плагин перехватывает маршрут и отдаёт свою карту;
- на сервере есть кэшированная версия старого ответа;
- включён редирект на другой sitemap через плагин безопасности или правила сервера.
В таком случае сначала очистите кэш, потом проверьте настройки SEO-плагина и только после этого делайте выводы.
Чем заменить стандартный sitemap
Тут есть три рабочих подхода: оставить карту SEO-плагина, собрать свою карту кодом или использовать плагин, который управляет индексируемыми типами контента более тонко. Выбор зависит от того, насколько сложная у вас структура сайта.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Обычный сайт с типовой структурой | Быстро, без кода | Меньше контроля над деталями |
| Свой sitemap кодом | Кастомные типы записей, нестандартная индексация | Полный контроль | Нужно поддерживать код |
| Плагин для SEO-очистки | Нужно убрать дубли и служебные сущности | Меньше ручной работы | Дополнительная зависимость |
Если вам нужно не только отключить карту, но и убрать дубли, служебные архивы и лишние сущности из индексации, имеет смысл посмотреть в сторону инструментов вроде Clearfy Pro. Но даже в этом случае сначала проверьте, не конфликтует ли плагин с уже установленным SEO-решением.
Как сделать свой sitemap для конкретного типа записей
Иногда стандартная карта WordPress не нужна вообще, а нужен отдельный XML для одного типа контента, например для product, portfolio или кастомного справочника. В этом случае лучше не пытаться «допиливать» ядро, а отдать свой XML-ответ через template_redirect или отдельный rewrite endpoint.
Ниже упрощённый пример: отдельный sitemap для записей типа news. Он не заменяет полноценный SEO-плагин, но показывает рабочую схему.
<?php
add_action( 'template_redirect', function () {
if ( ! isset( $_GET['news-sitemap'] ) ) {
return;
}
header( 'Content-Type: application/xml; charset=UTF-8' );
$posts = get_posts( array(
'post_type' => 'news',
'post_status' => 'publish',
'posts_per_page' => 100,
'no_found_rows' => true,
) );
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach ( $posts as $post ) {
echo '<url>';
echo '<loc>' . esc_url( get_permalink( $post ) ) . '</loc>';
echo '<lastmod>' . esc_html( get_post_modified_time( 'c', true, $post ) ) . '</lastmod>';
echo '</url>';
}
echo '</urlset>';
exit;
} );Это не готовая замена полноценному sitemap-решению, но для узкого сценария работает. Если нужен красивый URL без параметра, добавьте rewrite rule и отдельный шаблон ответа.
Пошаговое решение без лишнего риска
- Проверьте, какой sitemap сейчас активен: ядро WordPress, SEO-плагин или оба сразу.
- Если используется SEO-плагин, убедитесь, что его карта остаётся включённой после отключения ядра.
- Добавьте фильтр
wp_sitemaps_enabledчерез mu-plugin или дочернюю тему. - Очистите кэш сайта, CDN и браузера.
- Проверьте
/wp-sitemap.xmlи основной sitemap SEO-плагина. - Отправьте в Search Console только тот sitemap, который вы реально хотите поддерживать.
Проверка результата после внедрения
После отключения встроенной карты важно не ограничиваться открытием URL в браузере. Проверьте несколько уровней:
/wp-sitemap.xmlдолжен отдавать 404, 410 или редирект на ваш основной sitemap — в зависимости от вашей логики;- основной sitemap SEO-плагина должен открываться без ошибок;
- в Search Console не должно быть новых ошибок по карте сайта;
- в логах сервера не должно быть массовых запросов к старому sitemap после очистки кэша;
- если у вас есть кэширующий плагин, убедитесь, что XML не кэшируется как обычная HTML-страница.
Быстрая проверка через консоль:
curl -I https://example.com/wp-sitemap.xml
curl -I https://example.com/sitemap_index.xmlЕсли первый запрос возвращает 404 или редирект на нужный адрес, а второй — валидный XML, значит схема работает как задумано.
Частые ошибки и как их исправить
Отключили sitemap в ядре, но карта всё равно открывается
Это почти всегда означает, что её отдаёт SEO-плагин. Проверьте настройки карты в Yoast, Rank Math или другом плагине и не ищите проблему в WordPress core.
Сайт начал отдавать 404 на все sitemap
Частая причина — вы отключили встроенную карту, но не включили альтернативу. Если SEO-плагин не активен, поисковикам просто нечего читать. В таком случае верните карту либо настройте собственный XML.
В Search Console осталась старая карта
Это не баг WordPress. Search Console хранит отправленные карты отдельно. Удалите старую запись вручную и добавьте актуальную.
XML кэшируется как обычная страница
Некоторые кэширующие плагины и CDN не различают XML и HTML без дополнительных правил. Для sitemap лучше исключить URL из кэша или настроить отдельное правило.
Что учесть для безопасности и производительности
Если sitemap генерируется кодом, не тяните в него тяжёлые запросы. Используйте no_found_rows, ограничивайте поля и не собирайте лишние метаданные без необходимости. Для больших сайтов лучше разбивать карту на несколько файлов, а не отдавать один огромный XML.
С точки зрения безопасности не стоит публиковать в sitemap служебные или приватные сущности, даже если они технически доступны по URL. Карта сайта — это не просто список страниц, а подсказка для поисковиков и сторонних ботов о том, что у вас есть на сайте.
Если вам нужен более широкий контроль над технической чисткой WordPress, удобно держать это в одном месте: отключение дублей, управление архивами, чистка служебных элементов и настройка sitemap не должны жить в случайных кусках кода по разным файлам.