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

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

Ниже разберём сценарий, когда карта сайта есть, но её состав не совпадает с SEO-логикой сайта: в индексе оказываются служебные архивы, лишние типы записей, черновые разделы или страницы, которые вы не хотите светить поисковикам.

Когда штатная XML-карта сайта становится проблемой

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

Ещё один типичный случай — сайт после миграции или редизайна. Старые URL уже закрыты, но в sitemap они продолжают появляться из-за плагина, темы или кастомного кода. Поисковик видит противоречие: в robots.txt одно, в карте сайта другое, на страницах третье. В итоге диагностика в Search Console становится шумной.

Что проверить до изменений

  • Откройте /wp-sitemap.xml и посмотрите, какие разделы реально попадают в карту.
  • Сверьте список URL с тем, что должно индексироваться по вашей SEO-логике.
  • Проверьте, не генерирует ли карту сайт-плагин SEO, а не ядро WordPress.
  • Убедитесь, что нужные разделы не дублируются в нескольких sitemap одновременно.

Если у вас уже есть SEO-плагин, сначала выясните, кто именно отдаёт sitemap: ядро WordPress или плагин. Иначе можно отключить не тот механизм и получить пустую карту или 404 на нужном адресе.

Как отключить штатный XML Sitemap в WordPress

С точки зрения кода самый прямой способ — отключить встроенный генератор через фильтр wp_sitemaps_enabled. Это безопаснее, чем править ядро или пытаться блокировать URL через редиректы.

add_filter( 'wp_sitemaps_enabled', '__return_false' );

Такой код можно добавить в functions.php дочерней темы или в собственный мини-плагин. Если проект живой и вы не хотите зависеть от темы, мини-плагин предпочтительнее: при смене темы настройка не сломается.

Вариант через мини-плагин

Если нужен более аккуратный способ, создайте файл, например disable-wp-sitemap.php, и положите его в wp-content/plugins/:

<?php
/**
 * Plugin Name: Disable WP Sitemap
 */
add_filter( 'wp_sitemaps_enabled', '__return_false' );

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

Чем заменить карту сайта: плагин, код или гибрид

Выбор зависит от того, насколько сложная у вас структура сайта и кто будет поддерживать решение дальше. Если нужен быстрый и предсказуемый результат, проще использовать SEO-плагин. Если проект кастомный и карта должна собираться по своим правилам, лучше писать генерацию отдельно.

ПодходКогда подходитПлюсыМинусы
SEO-плагинНужна стандартная карта без разработкиБыстро, меньше ручной поддержкиМеньше контроля над логикой
КодНужны свои типы записей и правила отбораПолный контроль, можно исключить лишнееНужно тестировать и поддерживать
ГибридБазовая карта от плагина, часть URL — вручнуюКомпромисс между скоростью и гибкостьюВажно не получить дубли

Если вам нужен не только sitemap, но и чистка лишних SEO-артефактов, иногда проще взять инструмент вроде Clearfy Pro и настроить отключение ненужных сущностей в одном месте. Но даже в этом случае полезно понимать, что именно отключается и какой URL должен остаться доступным для поисковиков.

Как сделать свой sitemap для нужных типов записей

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

Ниже пример упрощённого генератора sitemap для постов. Он не претендует на универсальность, но показывает рабочую схему: берём только опубликованные записи и отдаём XML с правильным content-type.

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( array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 1000,
        'fields'         => 'ids',
        '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_id ) {
        echo '<url>';
        echo '<loc>' . esc_url( get_permalink( $post_id ) ) . '</loc>';
        echo '<lastmod>' . esc_html( get_post_modified_time( 'c', true, $post_id ) ) . '</lastmod>';
        echo '</url>';
    }

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

После добавления такого кода не забудьте обновить правила постоянных ссылок: зайдите в Настройки → Постоянные ссылки и просто нажмите «Сохранить изменения». Это сбросит rewrite rules без ручного вмешательства в базу.

Что важно не забыть в своём варианте

  • Не включайте в sitemap черновики, приватные записи и служебные CPT.
  • Если у записей есть noindex, не добавляйте их в карту сайта.
  • Для больших сайтов делите sitemap на несколько файлов, а не отдавайте один огромный XML.
  • Проверяйте, что URL в sitemap реально открываются без 404 и редиректов.

Как проверить, что решение сработало

После внедрения проверьте не только сам XML-файл, но и поведение сайта в целом. Ошибка здесь часто не в коде, а в конфликте между несколькими источниками sitemap.

  1. Откройте старый адрес /wp-sitemap.xml. Если вы отключали штатную карту, он не должен отдавать рабочий XML WordPress.
  2. Откройте новый адрес, например /custom-sitemap.xml, и убедитесь, что XML валиден.
  3. Проверьте заголовок ответа: должен быть Content-Type: application/xml.
  4. Посмотрите исходный список URL и убедитесь, что там нет лишних архивов, параметров и закрытых страниц.
  5. Если используете Search Console, отправьте новую карту сайта и проверьте отчёт по обработке.

Для быстрой локальной проверки удобно использовать curl:

curl -I https://example.com/custom-sitemap.xml
curl https://example.com/custom-sitemap.xml | head

Если в ответе видите HTML вместо XML, значит запрос перехватывает тема, кэш-плагин или другой обработчик. В таком случае сначала отключайте кэш на время теста и проверяйте, не висит ли на этом URL редирект.

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

Отключили sitemap в коде, но XML всё равно открывается

Значит, карту отдаёт не ядро WordPress, а SEO-плагин. У таких плагинов есть собственные настройки sitemap, и фильтр wp_sitemaps_enabled их не выключает. Нужно искать отдельную опцию в настройках плагина.

В sitemap остались старые URL после удаления записей

Обычно это кэш. Сначала очистите серверный и плагинный кэш, потом проверьте страницу снова. Если URL всё равно есть, значит они генерируются из другой таблицы или другого источника, а не из текущих опубликованных записей.

После добавления кода появился 404

Чаще всего забыли обновить правила постоянных ссылок или не добавили query var. Ещё одна причина — код вставили в тему, а потом переключили шаблон. Для таких задач лучше использовать мини-плагин.

Поисковик видит карту сайта, но не принимает её

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

Безопасность и производительность: что учесть заранее

Генерация sitemap — не тяжёлая операция, пока сайт небольшой. Но на больших проектах лучше не собирать всё на лету без ограничений. Если у вас десятки тысяч записей, делайте пагинацию sitemap и кэшируйте результат хотя бы на уровне объекта или страницы.

Также не стоит отдавать в sitemap URL, которые вы потом закрываете через robots.txt или noindex. Это создаёт лишний шум и усложняет диагностику. Логика должна быть одинаковой: если URL не должен индексироваться, его не должно быть и в карте сайта.

Если проект поддерживается несколькими людьми, зафиксируйте правило: кто отвечает за sitemap, где лежит код и какой URL считается основным. Иначе через месяц можно получить две карты сайта, обе «рабочие», но с разным набором страниц.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как отключить XML-RPC в WordPress и не сломать нужные интеграции
18.09.2026
Как отключить emoji в WordPress и убрать лишние скрипты из шапки
18.09.2026
Как закрыть от индексации архивы по датам и строкам поиска в WordPress
11.09.2026
Как закрыть от индексации страницы автора в WordPress
06.09.2026
Как отключить XML Sitemap в WordPress и заменить его на свой вариант
22.09.2026
×
Сделай WordPress мощнее!

Скидка -20% на топовые премиум плагины

Выбрать плагин сейчас ⋙