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

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

Если у вас уже есть карта из Yoast SEO, Rank Math, All in One SEO или кастомная генерация через код, встроенный механизм WordPress обычно лучше отключить. Ниже — как понять, что это действительно нужно, как сделать это без побочных эффектов и чем заменить стандартный вариант.

Когда встроенные XML sitemaps мешают

С 5.5 WordPress сам отдаёт XML-карты сайта. Для простого блога это нормально. Но в реальных проектах проблемы появляются быстро:

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

Диагностика проблемы

Проверьте три вещи:

  1. Откройте /wp-sitemap.xml. Если карта доступна, значит встроенный генератор активен.
  2. Посмотрите исходный код главной и шаблонов SEO-плагина: нет ли там ссылок на wp-sitemap.xml и отдельные карты плагина.
  3. Проверьте Search Console или Яндекс.Вебмастер: нет ли в отчётах URL из технических разделов, которые попали в карту.

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

Как отключить XML sitemaps в WordPress

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

add_filter( 'wp_sitemaps_enabled', '__return_false' );

Код можно добавить в functions.php дочерней темы, в mu-plugin или в свой небольшой плагин. Для продакшена mu-plugin обычно удобнее: он не зависит от темы и не исчезнет после обновления.

Вариант через mu-plugin

Создайте файл, например wp-content/mu-plugins/disable-wp-sitemaps.php:

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

После этого /wp-sitemap.xml должен отдавать 404 или редирект, если его перехватывает другой плагин или серверная настройка.

Чем заменить стандартную карту сайта

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

ПодходКогда подходитКомпромисс
Оставить встроенную карту WordPressПростой сайт без SEO-плагина и без сложной структурыМало гибкости, сложно исключать отдельные типы контента
Использовать sitemap SEO-плагинаЕсть Yoast SEO, Rank Math или AIOSEOНужно следить, чтобы встроенная карта WordPress была отключена
Сделать кастомную карту кодомНужны точные правила для CPT, таксономий и исключенийПотребуется поддержка и тестирование после обновлений

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

Кастомная XML-карта для отдельных типов записей

Если нужен свой формат, можно зарегистрировать отдельный sitemap endpoint через rewrite и выводить XML вручную. Для большинства проектов это избыточно, но как пример рабочей логики — полезно.

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' );
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

    $posts = get_posts( [
        'post_type'      => [ 'post', 'page' ],
        'post_status'    => 'publish',
        'posts_per_page' => 100,
        'fields'         => 'ids',
        'no_found_rows'  => true,
    ] );

    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;
} );

После добавления такого кода не забудьте обновить правила ЧПУ: зайдите в Настройки → Постоянные ссылки и нажмите сохранить. Без этого новый endpoint может не заработать.

Пошаговое решение без лишнего риска

  1. Определите, какая карта должна остаться: встроенная WordPress, карта SEO-плагина или собственная.
  2. Отключите встроенный генератор через wp_sitemaps_enabled.
  3. Проверьте, не создаёт ли карту другой плагин.
  4. Если нужна своя карта, добавьте отдельный endpoint или используйте возможности SEO-плагина.
  5. Переотправьте карту в Search Console и Яндекс.Вебмастер.

Если сайт большой, делайте изменения на staging-копии. Для sitemap это особенно важно: ошибка в XML может не сломать фронтенд, но легко испортить индексацию на недели.

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

После внедрения проверьте не только сам URL, но и цепочку индексации.

  • Откройте /wp-sitemap.xml — он не должен отдавать рабочую карту WordPress.
  • Проверьте, что ваша новая карта доступна по нужному адресу и возвращает 200 OK.
  • Убедитесь, что в XML нет URL из закрытых разделов.
  • Посмотрите заголовок ответа: Content-Type: application/xml.
  • В Search Console отправьте новую карту и проверьте, нет ли ошибок чтения.

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

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

Если первый запрос всё ещё отдаёт 200 и XML, значит встроенная карта не отключилась или её перехватывает другой слой — плагин, mu-plugin, кэш или кастомный роутинг.

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

Отключили карту, но в индексе ничего не изменилось

Это нормально: поисковики не удаляют URL мгновенно. Нужно дождаться переобхода и убедиться, что сами страницы правильно закрыты или исключены из sitemap.

Остались две карты сайта

Значит, WordPress отключили, но SEO-плагин продолжает отдавать свою карту. Это не всегда плохо, но если вы хотите один источник, проверьте настройки плагина и отключите лишнее там.

Карта стала 404 после обновления

Частая причина — забыли сбросить правила ЧПУ после добавления собственного endpoint. Если карта сделана через rewrite, сохраните Постоянные ссылки ещё раз.

В XML попали лишние URL

Проблема обычно в том, что выборка строится без фильтрации по post_status, типу записи или таксономиям. Для кастомной генерации всегда проверяйте, какие объекты реально должны индексироваться.

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

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

Если вы пишете собственный генератор, следите за тремя вещами:

  • не выводите в карту приватные, черновые и служебные записи;
  • не делайте лишние запросы к базе на каждый URL;
  • не забывайте обновлять карту после публикации и удаления контента.

Для большинства сайтов практичнее не изобретать свой генератор, а либо оставить встроенный WordPress, либо использовать SEO-плагин с нормальной настройкой исключений. Кастомный код оправдан только тогда, когда структура сайта действительно нестандартная и это нельзя решить настройками.

Как отключить XML sitemaps в WordPress и заменить их на свой вариант
01.09.2026
Как настроить Redis Object Cache в WordPress и проверить, что он реально ускоряет сайт
05.09.2026
Как закрыть дубли страниц авторов и архивов в WordPress без потери индексации
15.08.2026
Как настроить canonical в WordPress для страниц фильтра и поиска без потери нужной индексации
09.09.2026
Как отключить XML-RPC в WordPress без поломки входов и интеграций
22.08.2026
×
Quizle
Получите больше лидов и увеличьте продажи!
-15%

на премиум плагин WordPress

Получить скидку ⋙