Встроенная XML-карта сайта в WordPress полезна ровно до тех пор, пока вы не начинаете управлять индексацией точнее: прячете часть архивов, отдаёте sitemap из SEO-плагина, разделяете карты по типам контента или хотите убрать лишние URL из выдачи поисковиков. В этот момент часто появляется дублирование sitemap, лишние запросы к /wp-sitemap.xml и путаница, какой файл вообще должен быть основным.
Ниже — рабочий сценарий: как отключить стандартный sitemap WordPress, чем его заменить и как проверить, что поисковики видят именно нужный вариант.
Когда встроенный sitemap становится проблемой
Стандартный XML Sitemap появился в WordPress ядре, и для простых сайтов его обычно достаточно. Но на практике проблемы возникают в нескольких типовых сценариях:
- у вас уже работает sitemap из SEO-плагина, а ядро WordPress продолжает отдавать
/wp-sitemap.xml; - в карте появляются URL, которые вы не хотите индексировать, например служебные архивы или нестабильные страницы;
- после миграции на новый плагин остаются старые sitemap-адреса, и поисковик видит несколько источников;
- нужно отдать sitemap из внешнего генератора или из собственной логики, а стандартный файл только мешает.
Если сайт небольшой и вы не используете отдельный SEO-плагин, трогать встроенный sitemap не обязательно. Но если у вас уже есть управляемая карта сайта, лучше оставить один источник правды.
Диагностика: какой sitemap сейчас отдаёт сайт
Сначала проверьте, что именно открывается по адресу /wp-sitemap.xml и какие sitemap уже подключены в robots.txt или в SEO-плагине. Не полагайтесь на интерфейс админки: важно посмотреть фактический ответ сервера.
Что проверить вручную
- открывается ли
https://site.ru/wp-sitemap.xml; - есть ли в ответе XML со списком sitemap;
- не дублируется ли этот адрес в
robots.txt; - не отдаёт ли SEO-плагин собственный sitemap по другому пути, например
/sitemap_index.xml.
Если есть доступ к консоли, удобно быстро посмотреть заголовки и код ответа:
curl -I https://site.ru/wp-sitemap.xmlДля проверки содержимого можно открыть сам файл в браузере или запросить его через curl. Если там виден индекс sitemap WordPress, значит ядро ещё активно.
Как отключить XML Sitemap в WordPress
Самый надёжный способ — отключить генерацию через фильтр wp_sitemaps_enabled. Это штатный фильтр ядра, он не требует правки файлов WordPress и не ломает обновления.
<?php
add_filter( 'wp_sitemaps_enabled', '__return_false' );Код можно добавить в functions.php дочерней темы, но на практике безопаснее вынести его в небольшой mu-plugin, чтобы он не зависел от темы.
Вариант через mu-plugin
Создайте файл wp-content/mu-plugins/disable-core-sitemap.php и поместите туда:
<?php
/**
* Plugin Name: Disable Core Sitemap
*/
add_filter( 'wp_sitemaps_enabled', '__return_false' );После этого стандартный /wp-sitemap.xml должен перестать открываться как XML-карта. В зависимости от конфигурации сервера вы увидите 404 или пустой ответ — это нормально, если другой sitemap уже подключён отдельно.
Если нужен не полный запрет, а точечная настройка
Иногда достаточно не отключать sitemap целиком, а убрать из него конкретные типы данных. Для этого у ядра есть фильтры на провайдеры, но здесь важно не усложнять без необходимости. Если вы уже используете SEO-плагин, проще управлять исключениями в нём, чем собирать собственную логику на фильтрах ядра.
| Подход | Когда подходит | Минус |
|---|---|---|
Фильтр wp_sitemaps_enabled | Нужно отключить встроенный sitemap полностью | Нельзя оставить часть ядра и часть своей логики |
| SEO-плагин с собственным sitemap | Уже есть индексная карта и настройки исключений | Нужно следить, чтобы не было дубля с ядром |
| Собственный генератор sitemap | Нестандартная структура сайта или интеграция с внешней системой | Потребуется поддержка и тестирование |
Как заменить sitemap на свой вариант
Если вы отключили встроенную карту, следующий шаг — убедиться, что сайт всё ещё отдаёт корректный sitemap по одному стабильному адресу. Самый частый вариант — использовать SEO-плагин. Если же нужен собственный файл, его можно подключить через rewrite и шаблонный вывод, но это имеет смысл только когда у вас действительно есть своя логика формирования URL.
Для большинства проектов практичнее не писать генератор с нуля, а использовать готовый инструмент и просто убрать конфликтующий sitemap ядра. Например, если у вас уже настроен sitemap в SEO-плагине, оставьте только его и проверьте, что в robots.txt указан именно он.
Пример: отдача собственного XML-файла
Ниже упрощённый пример, если вам нужен отдельный endpoint. Это не полноценный генератор сайта, а только каркас для вывода XML:
<?php
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;
}
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">';
echo '<url><loc>' . esc_url( home_url( '/' ) ) . '</loc></url>';
echo '</urlset>';
exit;
} );После добавления rewrite-правил не забудьте сбросить постоянные ссылки в админке или программно обновить правила. Иначе endpoint может не заработать сразу.
Пошаговое решение без лишних рисков
- Проверьте, какой sitemap сейчас открыт по
/wp-sitemap.xml. - Если используется SEO-плагин, убедитесь, что он уже генерирует собственный sitemap.
- Отключите встроенный sitemap через
wp_sitemaps_enabled. - Проверьте, что старый адрес больше не отдаёт XML-карту.
- Обновите
robots.txt, если там указан старый путь. - Прогоните sitemap через валидатор и убедитесь, что в нём только нужные URL.
Проверка результата после внедрения
После отключения встроенного sitemap важно не ограничиться открытием страницы в браузере. Проверьте три вещи: код ответа, содержимое и связку с robots.txt.
- Код ответа:
curl -I https://site.ru/wp-sitemap.xmlне должен показывать рабочий XML sitemap WordPress. - Основной sitemap: ваш новый адрес должен открываться и содержать актуальные URL.
- Robots.txt: в файле должен быть указан только тот sitemap, который вы реально используете.
Если вы пользуетесь Google Search Console или аналогичным инструментом, отправьте новый sitemap на повторную проверку. Это особенно важно после миграции с одного плагина на другой.
Частые ошибки и как их исправить
Отключили sitemap, но старый адрес всё ещё открывается
Чаще всего причина в том, что код добавили не туда: в неактивную тему, в файл, который не загружается, или в плагин, который отключён. Для такого кода лучше использовать mu-plugin.
В robots.txt осталась старая ссылка
Поисковик может продолжать ходить по старому адресу, даже если сам sitemap уже отключён. Проверьте, не прописан ли там /wp-sitemap.xml вручную или через SEO-плагин.
Появился 404, но вы ожидали редирект
Отключение sitemap не обязано делать редирект. Если вам нужен другой адрес, настройте его отдельно. Не стоит автоматически перенаправлять старый sitemap на HTML-страницу или на случайный URL.
Сломался sitemap из SEO-плагина
Иногда отключают не только ядро, но и сам плагин, который должен был остаться основным источником sitemap. Сначала убедитесь, что новый sitemap реально работает, и только потом убирайте старый.
Практические советы по безопасности и производительности
Если sitemap генерируется на лету, следите за тем, чтобы он не создавал лишнюю нагрузку на сайт. Для больших проектов лучше использовать кэширование на уровне плагина или сервера, а не собирать XML на каждом запросе без необходимости.
Не храните логику генерации sitemap в активной теме, если она критична для SEO. Тема меняется чаще, чем инфраструктура сайта, а sitemap должен оставаться стабильным. Для таких задач mu-plugin обычно надёжнее.
Если вам нужно не только отключить дубли, но и почистить сайт от лишних SEO-артефактов, удобно смотреть в сторону инструментов вроде Clearfy Pro: он помогает убрать часть типовых дублей и технического шума без ручного разбрасывания кода по теме. Подробности есть на странице плагина.
Если после внедрения у вас остался только один sitemap, он открывается без ошибок и в нём нет лишних URL, задача решена. Дальше уже имеет смысл проверять отдельные типы страниц, которые должны или не должны попадать в индекс, а не возвращаться к проблеме дубля sitemap.