Как отключить XML sitemaps в WordPress и заменить их на ручную карту сайта

Встроенные XML sitemaps в WordPress удобны, пока сайт живёт по стандартной схеме: записи, страницы, рубрики, без сложной логики публикации и без лишних типов контента. Но на практике они часто начинают мешать: в карту попадают служебные архивы, черновые таксономии, не те CPT, дубли медиа-страниц или разделы, которые вы сознательно закрыли от индексации. В такой ситуации проще не «допиливать» стандартную карту, а отключить её и собрать управляемую альтернативу.

Когда встроенные sitemap действительно лучше выключить

Речь не о том, чтобы отключать XML sitemaps «на всякий случай». Это имеет смысл, если вы видите хотя бы один из типичных сценариев:

  • в sitemap попадают URL, которые вы не хотите отдавать поисковикам;
  • карта сайта содержит слишком много технических или дублирующих страниц;
  • у проекта уже есть отдельная генерация sitemap через SEO-плагин или серверную логику;
  • нужно вручную контролировать, какие URL считаются каноническими и приоритетными;
  • после обновлений WordPress карта стала конфликтовать с правилами кеша или с плагином безопасности.

Что именно проверять перед отключением

Сначала откройте текущую карту сайта и посмотрите, что в ней реально есть. В WordPress это обычно /wp-sitemap.xml. Если там уже видны лишние разделы, проблема не в самой карте, а в том, что ядро автоматически публикует структуру, которую вы не до конца контролируете. Для технически сложных сайтов это нормальный повод перейти на ручной вариант.

Диагностика: почему sitemap мешает, а не помогает

Самая частая ошибка — отключать карту сайта, не понимая, чем её заменить. В результате поисковик теряет удобный список URL, а вы получаете просадку по переобходу. Поэтому сначала нужно зафиксировать проблему.

Проверьте, какие URL сейчас отдаются в sitemap

Откройте XML в браузере или через curl и посмотрите, какие типы записей туда попадают:

curl -I https://example.com/wp-sitemap.xml
curl https://example.com/wp-sitemap.xml | head -n 40

Если карта отдаёт 200 OK, но в ней есть разделы, которые вы не хотите индексировать, это уже сигнал к ручному управлению. Дополнительно проверьте, не генерирует ли карту SEO-плагин параллельно с ядром WordPress. Две карты сайта на одном проекте — частая причина путаницы в Search Console.

Сравните варианты управления картой сайта

Подход Плюсы Минусы
Оставить встроенную sitemap Не нужен код, работает из коробки Слабый контроль над составом URL
Отключить и собрать вручную Полный контроль, можно исключить всё лишнее Нужно поддерживать актуальность списка
Использовать SEO-плагин Удобно для типовых сайтов Зависимость от настроек плагина и его логики

Пошаговое решение: отключаем встроенные XML sitemaps

В WordPress есть фильтр wp_sitemaps_enabled. Через него можно отключить встроенную генерацию карты сайта без вмешательства в ядро.

Вариант через functions.php или mu-plugin

Если у вас есть дочерняя тема или отдельный must-use плагин, добавьте такой код:

<?php
add_filter( 'wp_sitemaps_enabled', '__return_false' );

После этого WordPress перестанет отдавать стандартную XML sitemap по адресу /wp-sitemap.xml. Это самый прямой и проверяемый способ. Если сайт уже использует SEO-плагин, сначала убедитесь, что он не создаёт собственную карту сайта. Иначе вы просто отключите одну карту и оставите вторую.

Если нужен более аккуратный контроль

Иногда полезно отключить карту только на части окружений, например на staging, а на production оставить отдельную генерацию. Тогда условие можно завязать на домен или константу окружения:

<?php
add_filter( 'wp_sitemaps_enabled', function( $enabled ) {
    if ( defined( 'WP_ENVIRONMENT_TYPE' ) && WP_ENVIRONMENT_TYPE !== 'production' ) {
        return false;
    }

    return $enabled;
} );

Такой подход полезен, если на тестовом домене не нужно светить структуру сайта поисковикам и вы не хотите плодить лишние URL в индексе.

Чем заменить sitemap, если стандартная карта отключена

Если карта сайта нужна поисковикам, но встроенный вариант не подходит, у вас есть три рабочих сценария.

1. Оставить sitemap в SEO-плагине

Это самый простой путь для типовых проектов. Если вы уже используете Yoast SEO, Rank Math или похожий плагин, проверьте, не дублирует ли он карту ядра. В таком случае отключение встроенной sitemap как раз и нужно, чтобы остался один источник правды.

2. Сгенерировать статический XML-файл

Подходит для небольших сайтов, где список URL меняется редко. Вы можете хранить готовый sitemap.xml в корне сайта и обновлять его по cron или вручную после публикаций. Это удобно, если нужно исключить сложную логику WordPress из процесса генерации.

3. Сделать собственный endpoint

Если проект нестандартный, можно отдать XML через rewrite и шаблонный файл. Это уже разработческий вариант, но он даёт полный контроль над составом URL. Важно только не забыть про корректный Content-Type: application/xml и валидную структуру XML.

Пример: простая ручная sitemap для выбранных URL

Ниже пример, который отдаёт XML с ограниченным набором URL. Это не универсальная замена для больших сайтов, но для небольшого проекта или отдельного раздела — рабочая схема.

<?php
add_action( 'init', function() {
    add_rewrite_rule( '^sitemap-custom\.xml$', 'index.php?sitemap_custom=1', 'top' );
} );

add_filter( 'query_vars', function( $vars ) {
    $vars[] = 'sitemap_custom';
    return $vars;
} );

add_action( 'template_redirect', function() {
    if ( (int) get_query_var( 'sitemap_custom' ) !== 1 ) {
        return;
    }

    $urls = [
        home_url( '/' ),
        home_url( '/blog/' ),
        home_url( '/contacts/' ),
    ];

    nocache_headers();
    header( 'Content-Type: application/xml; charset=UTF-8' );

    echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";

    foreach ( $urls as $url ) {
        echo "  <url><loc>" . esc_url( $url ) . "</loc></url>\n";
    }

    echo '</urlset>';
    exit;
} );

После добавления такого кода не забудьте сбросить правила перезаписи: зайдите в Настройки → Постоянные ссылки и просто сохраните форму. Это безопаснее, чем лезть в базу или править .htaccess вручную без необходимости.

Проверка результата после внедрения

После отключения встроенной sitemap важно проверить не только отсутствие страницы, но и то, как сайт отвечает на запросы поисковиков и браузера.

  • откройте /wp-sitemap.xml и убедитесь, что он отдаёт 404 или пустой ответ, если вы отключали именно ядро;
  • проверьте новый sitemap-адрес, если вы сделали ручную замену;
  • посмотрите заголовки ответа через curl -I;
  • валидируйте XML на отсутствие битых тегов и лишних символов;
  • в Search Console отправьте новую карту сайта и проверьте, нет ли ошибок чтения.
curl -I https://example.com/sitemap-custom.xml
curl https://example.com/sitemap-custom.xml | xmllint --noout -

Если xmllint у вас не установлен, можно хотя бы открыть файл в браузере и проверить, что XML не ломается из-за лишнего HTML, BOM или предупреждений PHP.

Частые ошибки и как их исправить

Отключили sitemap, но забыли про SEO-плагин

В итоге в индексе остаётся другая карта, а вы думаете, что всё выключили. Проверьте настройки плагина и убедитесь, что он не генерирует отдельный XML-файл.

Сделали ручную карту, но не обновляете её

Статический файл быстро устаревает. Если URL меняются часто, нужен либо автоматический генератор, либо плагин, который умеет исключать лишнее без ручной правки.

Забыли сбросить rewrite rules

После добавления собственного endpoint адрес может не открываться, пока не обновятся правила постоянных ссылок. Это типичная мелочь, из-за которой кажется, что код не работает.

Отдали XML с HTML-ошибками

Любой notice, warning или лишний пробел до XML-декларации может сломать карту. На production это особенно неприятно, если включён вывод ошибок. Для таких endpoint лучше отключать display_errors и логировать ошибки в файл.

Практика безопасности и производительности

Если вы генерируете sitemap вручную, не делайте тяжёлые запросы на каждый хит. Для больших сайтов лучше кешировать готовый XML в transient или в файл и обновлять его по событию публикации. Иначе карта сама станет лишней нагрузкой.

Ещё один момент — не публикуйте в sitemap URL, которые закрыты от индексации или требуют авторизации. Карта сайта должна быть списком того, что вы действительно хотите видеть в поиске, а не выгрузкой всех доступных адресов.

Если вам нужен более широкий набор технических настроек для чистки WordPress, отключения лишнего и контроля SEO-деталей, посмотрите Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, что именно он меняет в ядре и какие URL остаются в индексе.

Как добавить автоматический отзыв на страницу товара WooCommerce
02.10.2026
Удаление редко используемых полей продукта WooCommerce
26.09.2026
Автоматическое удаление товаров WooCommerce после отмены заказа: пошаговое решение
24.09.2026
Как использовать WooCommerce хуки для автоматизации изменения стоимости товаров
09.09.2026
Как правильно удалить оставшиеся заказы WooCommerce без ошибок
29.09.2026