Встроенный XML Sitemap в WordPress часто включают «по умолчанию», а потом удивляются дублям, лишним URL в индексе или конфликтам с SEO-плагином. Проблема обычно не в самой карте сайта, а в том, что одновременно работают две системы: ядро WordPress и плагин, который тоже генерирует sitemap.
Если у вас уже есть Yoast SEO, Rank Math, All in One SEO или другой SEO-плагин, сначала проверьте, кто именно отдаёт sitemap. Дальше решение зависит от задачи: полностью отключить встроенный sitemap, оставить только нужные типы записей или собрать свой файл с ограниченным набором URL.
Когда встроенный sitemap лучше отключить
Отключение имеет смысл, если:
- SEO-плагин уже генерирует собственный sitemap;
- в sitemap попадают служебные страницы, которые не должны индексироваться;
- после обновления сайта появились дубли карт сайта или конфликт адресов;
- нужно отдать поисковикам только часть контента, а не весь публичный набор URL.
Если sitemap нужен только как базовый механизм, а вы хотите контролировать состав вручную, лучше не полагаться на стандартную генерацию ядра.
Диагностика: кто отдаёт sitemap и где возникает дубль
Сначала откройте в браузере /wp-sitemap.xml. Если страница открывается, это встроенный sitemap WordPress. Если вместо него вы видите sitemap от SEO-плагина, значит ядро уже переопределено или маршрут перехвачен плагином.
Проверьте ещё три вещи:
- есть ли в robots.txt ссылка на sitemap;
- не отдают ли SEO-плагин и ядро разные карты сайта одновременно;
- не индексируются ли страницы архивов, меток и вложений, которые вы не хотите видеть в поиске.
Если sitemap открывается, но в нём есть лишние URL, сначала убедитесь, что проблема не в настройках публичности типов записей. Иногда причина не в sitemap, а в том, что лишний контент вообще доступен для индексации.
Быстрая проверка через браузер и исходный код
Посмотрите, какой URL указан в robots.txt. Если там есть несколько строк Sitemap, это уже повод проверить, не дублируются ли карты сайта. Также полезно открыть исходный код главной страницы и найти ссылки на sitemap, если их добавляет плагин или тема.
Как отключить встроенный XML Sitemap в WordPress
В WordPress есть фильтр wp_sitemaps_enabled. Он позволяет выключить встроенную генерацию без правки ядра. Это самый безопасный способ, если sitemap должен полностью контролироваться плагином или вашим кодом.
<?php
add_filter( 'wp_sitemaps_enabled', '__return_false' );
Добавьте этот код в functions.php дочерней темы или в небольшой mu-plugin. Если вы работаете на живом сайте, 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' );
После этого встроенный /wp-sitemap.xml перестанет работать. Если SEO-плагин уже генерирует свой sitemap, он продолжит работать отдельно.
Как заменить sitemap своим решением
Если нужен не просто выключатель, а контролируемая карта сайта, можно сделать отдельный XML-эндпоинт. Это полезно, когда нужно включить только записи, страницы и, например, одну кастомную таксономию.
Ниже пример простого sitemap-файла для записей и страниц. Он не претендует на полноценную замену SEO-плагина, но показывает рабочий принцип.
<?php
add_action( 'init', function () {
add_rewrite_rule( '^custom-sitemap\.xml$', 'index.php?custom_sitemap=1', 'top' );
} );
add_filter( 'query_vars', function ( $vars ) {
$vars[] = 'custom_sitemap';
return $vars;
} );
add_action( 'template_redirect', function () {
if ( (int) get_query_var( 'custom_sitemap' ) !== 1 ) {
return;
}
header( 'Content-Type: application/xml; charset=UTF-8' );
$posts = get_posts( [
'post_type' => [ 'post', 'page' ],
'post_status' => 'publish',
'posts_per_page' => 1000,
'fields' => 'ids',
'no_found_rows' => true,
] );
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
foreach ( $posts as $post_id ) {
echo " <url>\n";
echo ' <loc>' . esc_url( get_permalink( $post_id ) ) . "</loc>\n";
echo ' <lastmod>' . esc_html( get_post_modified_time( 'c', true, $post_id ) ) . "</lastmod>\n";
echo " </url>\n";
}
echo '</urlset>';
exit;
} );
После добавления кода нужно обновить правила постоянных ссылок. Самый простой способ — зайти в Настройки → Постоянные ссылки и нажать «Сохранить изменения» без правок. Это сбросит rewrite rules.
Что учесть в таком решении
Если сайт большой, не выводите тысячи URL одним запросом без ограничений. Для реального проекта лучше разбить sitemap на несколько файлов по типам контента или страницам. Иначе файл будет тяжёлым, а генерация — медленной.
Сравнение подходов: плагин, код или встроенный sitemap
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Встроенный sitemap WordPress | Простой сайт без SEO-плагина | Не требует установки плагинов | Мало гибкости, сложно исключать отдельные URL |
| SEO-плагин | Нужен контроль индексации и типов контента | Удобные настройки, фильтры, исключения | Может конфликтовать с ядром или другими плагинами |
| Свой sitemap на коде | Нужен точный состав URL | Полный контроль | Нужно поддерживать вручную |
Пошаговое решение без лишнего риска
- Проверьте, какой sitemap сейчас активен: ядро или SEO-плагин.
- Если sitemap дублируется, отключите встроенный вариант через
wp_sitemaps_enabled. - Убедитесь, что SEO-плагин или ваш код отдают только один sitemap-источник.
- Обновите robots.txt, если там остались старые ссылки.
- Проверьте, что в sitemap нет страниц с
noindexили служебных URL.
Если вы используете Clearfy Pro, там есть инструменты для чистки сайта и управления SEO-деталями. Но сам принцип остаётся тем же: сначала убираете конфликт источников, потом проверяете состав sitemap. Подробности смотрите на странице плагина: https://wpshop.ru/plugins/clearfy.
Как проверить, что решение сработало
После внедрения откройте несколько адресов вручную:
/wp-sitemap.xml— должен быть недоступен, если вы отключали встроенный sitemap;- ваш новый sitemap, например
/custom-sitemap.xml— должен отдавать XML с корректнымContent-Type; - robots.txt — должен содержать только актуальную ссылку на sitemap;
- страницы в поисковой консоли — не должно быть новых ошибок по недоступным URL или дубликатам карт сайта.
Дополнительно проверьте заголовки ответа через DevTools или curl:
curl -I https://example.com/custom-sitemap.xmlВ ответе должен быть статус 200 OK и MIME-тип XML. Если вместо этого приходит HTML, значит сработал шаблон темы или редирект, и sitemap нужно доработать.
Частые ошибки и как их исправить
Отключили sitemap, но старый URL всё ещё открывается
Чаще всего это кэш. Очистите серверный кэш, кэш плагина и CDN, если он есть. Затем проверьте адрес в режиме инкогнито. Если URL всё ещё доступен, значит sitemap отдаёт не ядро, а SEO-плагин или кастомный код.
После добавления своего sitemap появился 404
Обычно забывают обновить rewrite rules. Зайдите в настройки постоянных ссылок и сохраните их заново. Если это mu-plugin, убедитесь, что код загружается до запроса и что query var зарегистрирован.
В sitemap попали страницы, которые закрыты от индексации
Это уже ошибка логики генерации. Перед добавлением URL проверяйте статус записи, тип контента и, если нужно, мета-данные SEO-плагина. Не стоит слепо выводить все опубликованные записи.
Сайт начал отдавать два sitemap одновременно
Так бывает, когда выключили только ядро, но забыли про плагин, или наоборот. В итоге поисковик видит несколько источников и может обходить их по-разному. Оставьте один источник истины и уберите остальные ссылки из robots.txt.
Безопасность и производительность
Не редактируйте ядро WordPress ради sitemap. Это ломается при обновлении и усложняет поддержку. Используйте фильтры, mu-plugin или настройки SEO-плагина.
Если sitemap генерируется динамически на большом сайте, следите за нагрузкой. Для тяжёлых проектов лучше:
- кэшировать XML-файл на стороне сервера или плагина;
- разбивать sitemap по типам контента;
- не тянуть лишние поля и метаданные в запросах;
- не генерировать файл на каждом хите без необходимости.
В реальной поддержке самый надёжный сценарий такой: один источник sitemap, понятный список включённых URL и регулярная проверка в поисковой консоли. Тогда карта сайта помогает индексации, а не создаёт лишние проблемы.