Встроенная XML-карта сайта в WordPress удобна, пока не появляется задача тонкой настройки: исключить часть архивов, отдать отдельный sitemap для медиа, убрать служебные URL или вообще передать генерацию карты сайта внешнему плагину. В таких случаях важно не просто «выключить sitemap», а сделать это так, чтобы поисковики не получили пустой файл, дубли или цепочку редиректов.
Ниже — рабочий сценарий: как понять, что именно мешает, чем отключать встроенный sitemap, как подключить свой вариант и что проверить после внедрения.
Когда встроенный sitemap WordPress действительно мешает
С 5.5 WordPress умеет отдавать XML sitemap из коробки. Для небольших сайтов это нормально, но на практике проблемы возникают в нескольких типовых ситуациях:
- нужно исключить из карты сайта служебные типы записей, которые не должны индексироваться;
- у сайта уже есть sitemap от SEO-плагина, и оба варианта доступны одновременно;
- нужно разделить sitemap по логике проекта: записи, страницы, таксономии, изображения, видео;
- карта сайта отдаёт URL, которые потом закрыты robots.txt или noindex, и это создаёт шум для обхода;
- после миграции остались старые sitemap-адреса, а новые уже генерируются другим инструментом.
Диагностика: что именно проверить перед изменениями
Сначала убедитесь, что проблема не в дублирующемся источнике sitemap. Откройте в браузере:
/wp-sitemap.xml— встроенный sitemap WordPress;/sitemap_index.xml— часто это SEO-плагин;/robots.txt— там может быть указан только один из вариантов;- логи ответа сервера, если sitemap отдаёт 404, 403 или редирект.
Если у вас одновременно доступны /wp-sitemap.xml и /sitemap_index.xml, это уже повод выбрать один источник и убрать второй из поля зрения поисковиков.
Как отключить встроенный XML sitemap в WordPress
Самый надёжный способ — отключить генерацию через фильтр wp_sitemaps_enabled. Это лучше, чем пытаться блокировать URL на уровне robots.txt: robots.txt не отключает сам endpoint, а только просит роботов не ходить по нему.
<?php
add_filter( 'wp_sitemaps_enabled', '__return_false' );Код можно добавить в functions.php дочерней темы или в небольшой mu-plugin, если решение должно переживать смену темы. Для production mu-plugin обычно надёжнее: меньше шансов потерять настройку после обновления темы.
Вариант через mu-plugin
Создайте файл, например wp-content/mu-plugins/disable-wp-sitemap.php:
<?php
/**
* Plugin Name: Disable WP Sitemap
*/
add_filter( 'wp_sitemaps_enabled', '__return_false' );После этого встроенный /wp-sitemap.xml должен перестать открываться. Если он всё ещё доступен, проверьте кэш на сервере или CDN: иногда старый ответ продолжает отдаваться из кэша.
Чем заменить sitemap: сравнение вариантов
Выбор зависит от того, кто должен управлять картой сайта и насколько сложная у вас структура.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Встроенный sitemap WordPress | Простой сайт без тонкой SEO-логики | Не нужен плагин, минимум настроек | Слабый контроль над исключениями и структурой |
| SEO-плагин | Нужны правила индексации, исключения и отдельные sitemap | Удобно управлять типами контента и таксономиями | Нужно следить, чтобы не было второго sitemap |
| Свой генератор через код | Нужен нестандартный формат или интеграция с внешней системой | Полный контроль | Нужно поддерживать код и тестировать обновления |
Если у вас уже стоит SEO-плагин, обычно логичнее использовать его sitemap, а встроенный WordPress отключить. Если нужен более широкий контроль над дублями и служебными страницами, иногда удобнее собрать это через Clearfy Pro, но только если его логика совпадает с вашей структурой сайта и не конфликтует с текущим SEO-плагином.
Как подключить свой sitemap и не сломать индексацию
Если вы отключили встроенный вариант, у поисковиков должен остаться один понятный адрес карты сайта. Обычно это либо sitemap от SEO-плагина, либо собственный endpoint. Важно не просто создать файл, а правильно указать его в robots.txt и в панели для вебмастеров.
Минимальный сценарий выглядит так:
- отключаете встроенный sitemap WordPress;
- включаете sitemap в SEO-плагине или своём коде;
- проверяете, что старый адрес отдаёт 404 или 410, а не дублирует контент;
- обновляете ссылку на sitemap в
robots.txt; - проверяете, что в карте нет URL, закрытых от индексации.
Пример: добавить ссылку на sitemap в robots.txt
Если robots.txt у вас формируется вручную, достаточно оставить один актуальный адрес:
User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://example.com/sitemap_index.xmlНе нужно перечислять туда сразу несколько sitemap «на всякий случай», если они дублируют друг друга. Поисковику достаточно одного входного файла, который уже ссылается на остальные.
Проверка результата после внедрения
После отключения и замены sitemap проверьте не только открытие URL в браузере, но и фактический ответ сервера.
/wp-sitemap.xmlдолжен быть недоступен или отдавать 404/410, если вы сознательно убрали встроенный вариант;- новый sitemap должен открываться без редиректов;
- внутри карты не должно быть URL с noindex, 404 или редиректами;
- в
robots.txtдолжен быть указан только актуальный sitemap; - в Search Console или Яндекс Вебмастере не должно быть ошибок чтения карты сайта.
Проверить код ответа можно через curl:
curl -I https://example.com/wp-sitemap.xml
curl -I https://example.com/sitemap_index.xmlЕсли старый адрес отвечает 200 OK, значит отключение не сработало или ответ кэшируется. Если новый sitemap отдаёт 301 или 302, лучше убрать редирект и отдавать конечный URL сразу.
Частые ошибки и как их исправить
Отключили sitemap, но поисковик всё ещё видит старый адрес
Чаще всего причина в кэше на сервере, CDN или в том, что sitemap уже был отправлен в Search Console и ещё не переобходился. Сначала проверьте реальный HTTP-ответ, а потом уже смотрите в панели вебмастера.
Оставили два sitemap одновременно
Это типичная ошибка после установки SEO-плагина поверх встроенной функции WordPress. В итоге поисковик видит два источника, а часть URL дублируется. Решение простое: отключить встроенный sitemap через wp_sitemaps_enabled и оставить только один генератор.
Закрыли sitemap в robots.txt вместо отключения
Так делать можно только как временную меру. Robots.txt не убирает endpoint из сайта, а лишь ограничивает обход. Если нужен чистый результат, отключайте генерацию на уровне WordPress или плагина.
Сломали sitemap после обновления темы
Если код лежал в functions.php активной темы, он мог исчезнуть при смене темы или обновлении кастомной сборки. Для таких задач лучше использовать mu-plugin или отдельный мини-плагин.
Практические советы по безопасности и производительности
XML sitemap сам по себе не тяжёлый, но на больших сайтах его генерация может быть заметной, если в карту попадают сложные запросы или внешние фильтры. Поэтому:
- не добавляйте в sitemap всё подряд, особенно служебные архивы и технические страницы;
- не генерируйте карту на каждом запросе, если пишете свой вариант — используйте кэширование;
- следите, чтобы sitemap не раскрывал закрытые разделы сайта;
- после миграций удаляйте старые sitemap-адреса и проверяйте редиректы;
- не полагайтесь только на robots.txt для управления индексацией.
Если задача шире, чем просто sitemap, и нужно одновременно чистить дубли, управлять мета-тегами и служебными страницами, удобнее решать это в одном SEO-слое, а не разносить по нескольким разрозненным сниппетам.
Что должно получиться в итоге
После внедрения у вас должен остаться один понятный sitemap-источник, без дублей и лишних URL. Старый встроенный /wp-sitemap.xml либо отключён, либо намеренно недоступен, а новый sitemap открывается напрямую и соответствует реальной структуре сайта. Это легко проверить вручную, через curl и в панели вебмастера — и именно на этом этапе чаще всего всплывают ошибки, которые не видны в админке WordPress.