WordPress Notes Hueman

Как отключить открытые XML sitemap в WordPress и закрыть их от индексации

Если XML sitemap в WordPress открывается как обычная страница, а в поиске появляются сами карты сайта или их служебные URL, проблема обычно не в «плохом SEO», а в настройках генератора карты, конфликте плагинов или неверной отдаче заголовков. На практике это встречается после установки SEO-плагина, миграции сайта или включения кастомного sitemap через код.

Ниже разберём, как понять, что именно у вас сломано, как закрыть sitemap от индексации без лишних побочных эффектов и как проверить результат после правок.

Когда sitemap действительно нужно закрывать

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

  • страница-индекс sitemap, открытая для людей и поисковиков;
  • служебные страницы генератора, например отдельные карты для авторов, тегов или медиа;
  • дубли sitemap, которые создают одновременно плагин и тема или кастомный код;
  • HTML-страница, которая маскируется под sitemap.xml, но отдаёт не тот content-type.

В таких случаях задача не «запретить sitemap вообще», а убрать лишнюю публичность и оставить только один корректный источник карты сайта.

Диагностика: что именно индексируется

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

1. Посмотрите заголовки ответа

Для sitemap.xml и его дочерних файлов должен быть XML-ответ, а не HTML-страница с редиректами и лишней разметкой. Удобно проверить через curl:

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

Что важно увидеть:

  • 200 OK для самого sitemap;
  • Content-Type: application/xml или похожий XML-тип;
  • отсутствие цепочки редиректов на HTML-страницу;
  • нет случайного noindex на самом sitemap, если он должен быть доступен роботам.

2. Проверьте, не создали ли вы дубликат карты сайта

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

Смотрите:

  • есть ли /sitemap_index.xml и одновременно /sitemap.xml;
  • не отдают ли плагины отдельные карты для записей, страниц и таксономий параллельно;
  • не прописан ли кастомный rewrite для sitemap в functions.php.

3. Проверьте индекс через поиск и Search Console

Если sitemap уже попал в индекс, в Search Console обычно видно, что в выдаче есть именно служебный URL. Это значит, что закрывать нужно не только robots.txt, но и саму страницу через корректный ответ сервера или мета-роботы, если это HTML-обёртка.

Как исправить: рабочая схема без лишних дублей

Самый надёжный путь — оставить один генератор sitemap и убрать всё остальное. Если у вас SEO-плагин уже умеет создавать карту сайта, не дублируйте её кодом в теме.

Шаг 1. Отключите лишний генератор sitemap

Если sitemap создаёт плагин, отключите кастомный код в теме. Если карту создаёт тема или mu-plugin, а SEO-плагин тоже генерирует карту, оставьте только один источник. Это не вопрос вкуса: два sitemap-источника почти всегда создают путаницу.

Если вы используете Yoast SEO, проверьте, не включён ли дополнительный sitemap в другом плагине. Если нужен именно один sitemap, проще убрать лишний генератор, чем пытаться склеивать их правилами robots.txt.

Шаг 2. Закройте служебные HTML-страницы через noindex

Если у вас не XML, а HTML-страница с картой сайта, её можно закрыть от индексации. Для WordPress это делается через wp_robots:

add_filter( 'wp_robots', function( array $robots ) {
    if ( is_page( 'sitemap' ) ) {
        $robots['noindex'] = true;
        $robots['nofollow'] = true;
    }

    return $robots;
} );

Этот вариант подходит только для обычной страницы WordPress. Для настоящего XML sitemap он не нужен и обычно не применяется.

Шаг 3. Для XML sitemap не ставьте noindex, а проверьте доступность

XML sitemap должен быть доступен роботам. Если вы закроете его через noindex или запретите в robots.txt, поисковик может перестать использовать карту как источник URL. Правильнее убрать лишние копии и оставить одну рабочую карту.

Если у вас кастомный sitemap, убедитесь, что он отдаёт XML и не подмешивает HTML-шаблон темы. Пример простого обработчика:

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

add_action( 'template_redirect', function() {
    if ( get_query_var( 'custom_sitemap' ) ) {
        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-правил не забудьте сбросить постоянные ссылки в админке или программно обновить правила, иначе URL не начнёт работать.

Шаг 4. Если sitemap не должен быть публичным, отдавайте 404 или 410

Иногда старый sitemap больше не нужен, но URL всё ещё живёт в индексе. Тогда лучше вернуть 410 Gone, если страница удалена окончательно, или 404 Not Found, если вы пока не уверены. Это честнее, чем оставлять пустую HTML-страницу с noindex.

add_action( 'template_redirect', function() {
    if ( is_page( 'old-sitemap' ) ) {
        status_header( 410 );
        nocache_headers();
        exit;
    }
} );

Что проверить после внедрения

После правок не ограничивайтесь открытием URL в браузере. Проверьте именно технические признаки, по которым поисковик понимает страницу.

  • URL sitemap отдаёт 200 и XML, если он должен работать;
  • служебная HTML-страница отдаёт noindex или удалена через 404/410;
  • в robots.txt нет случайного запрета на сам sitemap;
  • в Search Console нет новых ошибок по карте сайта;
  • в индексе не осталось дублей старых sitemap-URL.

Для быстрой проверки можно открыть исходный ответ через curl и посмотреть заголовки:

curl -I https://example.com/sitemap.xml
curl -I https://example.com/old-sitemap/

Если на первом URL видите XML и 200, а на втором — 404 или 410, схема работает корректно.

Сравнение подходов: что выбрать на практике

ПодходКогда подходитМинус
Оставить sitemap в SEO-плагинеЕсли нужен стандартный sitemap без кастомной логикиНельзя одновременно держать второй генератор
Кастомный sitemap через кодЕсли нужен узкий набор URL или особая структураНужно следить за rewrite и заголовками
Удалить старый sitemap через 404/410Если URL устарел и больше не должен житьПотребуется время на вычищение из индекса

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

Закрывают XML sitemap через robots.txt

Это типичная ошибка. Если запретить сам sitemap в robots.txt, поисковик может не увидеть карту вообще. Для XML sitemap лучше не ставить запрет на доступ, а убрать дубли и оставить один корректный файл.

Ставят noindex на XML-файл

Для XML это обычно бессмысленно. noindex работает для HTML-страниц, а не как универсальная «кнопка скрыть всё». Если sitemap — это XML, решайте проблему на уровне генерации и доступности.

Оставляют два источника карты сайта

Например, один sitemap создаёт Yoast SEO, второй — кастомный код в теме. В результате в индексе появляются разные URL, а в Search Console начинается путаница. Оставьте один источник и удалите второй.

Меняют код, но не сбрасывают rewrite rules

Если sitemap построен на rewrite-правилах, после изменения структуры нужно обновить постоянные ссылки. Иначе WordPress продолжит отдавать старый маршрут или 404.

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

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

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

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

Когда правки завершены, сохраните список всех sitemap-адресов и проверьте их вручную после обновлений темы и SEO-плагина. Именно после апдейтов такие конфликты всплывают чаще всего.

×
-15%
на премиум-тему
Reboot

Создай сайт мечты
на WordPress!

Купить со скидкой »