В WordPress часто путают две разные вещи: саму XML-карту сайта и строку с адресом sitemap в robots.txt. На практике проблема обычно не в карте как таковой, а в том, что в файле для поисковых роботов появляется ссылка на sitemap, которую нужно убрать из публичного доступа или заменить на другой источник. Это бывает после миграции, при использовании SEO-плагина, на тестовом сайте или когда sitemap отдает лишние URL.
Если задача именно в robots.txt, а не в полном отключении sitemap, решение должно быть точечным. Иначе легко сломать индексацию, особенно если поисковики уже используют эту карту как основной источник новых страниц.
Когда это нужно и что именно вы отключаете
WordPress сам по себе с версии 5.5 умеет отдавать базовую XML-карту сайта. Плагины SEO часто добавляют свою карту и могут прописывать ее адрес в robots.txt. В результате в файле появляется строка вида Sitemap: https://example.com/wp-sitemap.xml или адрес от SEO-плагина.
Отключать эту строку имеет смысл, если:
- вы переносите сайт и временно не хотите светить sitemap старого окружения;
- у вас несколько карт, и в robots.txt должен остаться только один актуальный адрес;
- нужно скрыть sitemap для служебных разделов, но не отключать саму карту полностью;
- SEO-плагин уже управляет картой, а WordPress-добавка создает дубль.
Если же вы хотите убрать саму карту из сайта, это отдельная задача. Здесь речь именно о записи в robots.txt.
Диагностика: где именно появляется sitemap
Сначала проверьте, кто добавляет строку в robots. Это можно сделать без правок кода.
- Откройте
/robots.txtв браузере. - Посмотрите, есть ли там строка
Sitemap:и какой у нее адрес. - Сравните адрес с настройками SEO-плагина и с адресом стандартной карты WordPress.
- Если robots.txt виртуальный, проверьте, не генерирует ли его плагин безопасности или SEO-плагин.
Полезно также проверить, не отдает ли сервер статический robots.txt из корня сайта. Если файл существует физически, WordPress его уже не подменит, и править нужно именно его.
Что искать в настройках
- в SEO-плагине — раздел sitemap или XML sitemaps;
- в плагинах кеша и безопасности — опции для robots.txt;
- в теме — кастомный код, который фильтрует robots;
- в корне сайта — реальный файл
robots.txt.
Как отключить строку Sitemap в robots.txt кодом
Самый надежный способ — использовать фильтр robots_txt. Он позволяет изменить содержимое виртуального robots.txt до вывода в браузер. Это безопаснее, чем редактировать ядро или надеяться на настройки плагина, которые могут сброситься после обновления.
Добавьте код в functions.php дочерней темы или в небольшой mu-plugin:
add_filter( 'robots_txt', function( $output, $public ) {
$lines = explode( "\n", $output );
$lines = array_filter( $lines, function( $line ) {
return stripos( $line, 'sitemap:' ) !== 0;
} );
return implode( "\n", $lines );
}, 10, 2 );Этот вариант убирает все строки, которые начинаются с Sitemap:. Если у вас в robots несколько карт и нужно удалить только одну, фильтр лучше сделать точнее.
Удалить только одну конкретную карту
Если нужно оставить, например, карту от SEO-плагина, но убрать стандартную WordPress-карту, можно отфильтровать по адресу:
add_filter( 'robots_txt', function( $output ) {
$remove = home_url( '/wp-sitemap.xml' );
$lines = explode( "\n", $output );
$result = array();
foreach ( $lines as $line ) {
if ( stripos( $line, 'sitemap:' ) === 0 && strpos( $line, $remove ) !== false ) {
continue;
}
$result[] = $line;
}
return implode( "\n", $result );
} );Такой подход удобен, если вы точно знаете, какой адрес должен исчезнуть. Для нескольких окружений лучше не хардкодить домен, а собирать его через home_url().
Если robots.txt статический, править нужно файл, а не фильтр
На некоторых сайтах в корне лежит физический robots.txt. В этом случае WordPress не участвует в генерации, и фильтр robots_txt не сработает. Тогда откройте файл и удалите строку вручную.
Пример типичного содержимого:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/wp-sitemap.xmlЕсли вы удаляете строку с sitemap, не трогайте остальные директивы без необходимости. Ошибка здесь обычно не в самой карте, а в том, что вместе с ней случайно удаляют правила для /wp-admin/ или закрывают лишние разделы.
Сравнение подходов
| Способ | Когда подходит | Минус |
|---|---|---|
Фильтр robots_txt | Виртуальный robots.txt, нужен контроль из кода | Не работает при физическом файле |
Редактирование файла robots.txt | Файл лежит в корне сайта | Можно перезаписать при деплое или обновлении |
| Настройки SEO-плагина | Плагин сам управляет sitemap | Не всегда можно убрать только одну строку |
Проверка результата после внедрения
После правки не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что robots отдает именно то, что вы ожидаете.
- Откройте
/robots.txtв инкогнито-режиме. - Проверьте, что строка
Sitemap:исчезла или изменилась. - Если используется кеш, очистите его на сайте и на CDN.
- Проверьте ответ сервера:
200 OK, а не редирект на другую версию домена. - Если sitemap убирали временно, убедитесь, что поисковик все еще видит нужные URL через Search Console или аналогичный инструмент.
Для быстрой проверки можно использовать curl:
curl -s https://example.com/robots.txtЕсли строка все еще есть, значит, ее добавляет не WordPress-фильтр, а другой источник: статический файл, SEO-плагин или кеш/CDN.
Частые ошибки и как их исправить
Удалили не ту карту
Иногда в robots.txt есть несколько строк Sitemap:. Если убрать все подряд, можно случайно отключить нужную карту для новостей, изображений или кастомных типов записей. Сначала определите, какой адрес реально используется поисковиками, и только потом удаляйте лишнее.
Правили functions.php в родительской теме
После обновления тема может перезаписаться. Для постоянного решения используйте дочернюю тему или mu-plugin. Это особенно важно на продакшене, где такие правки должны переживать обновления.
Оставили кеш старого robots.txt
Если сайт отдает кешированную версию, изменения не видны сразу. Очистите кеш плагина, серверный кеш и CDN. На некоторых конфигурациях robots.txt кешируется отдельно от обычных страниц.
Ожидали, что фильтр сработает на физический файл
Фильтр robots_txt работает только для виртуальной генерации. Если в корне есть реальный файл, WordPress его не подменяет. В этом случае правка должна быть в самом файле или в процессе деплоя.
Практика безопасности и поддержки
Если вы часто меняете sitemap на разных окружениях, не редактируйте robots вручную на боевом сайте. Лучше держать правило в коде или в деплой-скрипте, чтобы не ловить расхождения между staging и production.
Еще один полезный момент: не скрывайте sitemap без причины. Для SEO это не «защита», а просто техническая настройка. Если карта нужна поисковикам, убирайте только лишние дубли, а не весь механизм целиком.
Если вам нужно не только убрать строку из robots.txt, но и почистить сайт от лишних SEO-дублей, удобно использовать инструменты уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=wpnotes.ru&utm_medium=article&utm_campaign=otklyuchit-xml-sitemap-v-robots-txt-v-wordpress. Но даже в этом случае полезно понимать, что именно меняется в robots и где это хранится.
Если после правки robots.txt поисковики продолжают видеть старую карту, проверьте не только код, но и ответ сервера, кеш и наличие физического файла в корне. В WordPress такие вещи чаще ломаются на стыке плагинов и инфраструктуры, а не в одном конкретном хуке.