Штатный XML sitemap в WordPress удобен до тех пор, пока в него не начинают попадать лишние URL: служебные архивы, тестовые таксономии, страницы с параметрами, дубли из плагинов или контент, который вы не хотите отдавать в индекс. В такой ситуации лучше не спорить с генератором карты сайта, а взять её под контроль: отключить встроенный sitemap и отдать поисковикам свой файл, где есть только нужные разделы.
Ниже — рабочий сценарий для обычного сайта на WordPress: как понять, что проблема именно в карте сайта, как безопасно отключить штатную генерацию, как собрать свой sitemap и как проверить, что поисковики видят именно его.
Когда штатный sitemap становится проблемой
Проверять карту сайта имеет смысл не «на всякий случай», а если вы видите конкретные симптомы:
- в
/wp-sitemap.xmlпопадают URL, которые вы не хотите индексировать; - в Search Console есть страницы, отправленные через sitemap, но исключённые из индекса по техническим причинам;
- после установки SEO-плагина у вас одновременно работают два генератора sitemap;
- в карте сайта появляются архивы, вложения, авторы, теги или таксономии, которые не несут ценности;
- нужно отдать поисковикам отдельный sitemap для статей, страниц и медиа, а не общий список.
Что именно проверить в первую очередь
Откройте /wp-sitemap.xml в браузере и посмотрите, какие разделы там есть. Если вы видите несколько источников sitemap одновременно, это уже повод для диагностики. Частая ошибка — отключать карту сайта в одном плагине, но оставлять её в другом, а потом удивляться дублированию.
Дополнительно проверьте исходный код страницы sitemap и заголовки ответа. Если карта отдается с кодом 200 OK, а по адресу SEO-плагина лежит другая карта, поисковик может выбрать не тот файл, который вы ожидали.
Как отключить встроенный XML sitemap в WordPress
Начиная с WordPress 5.5, базовая генерация sitemap встроена в ядро. Её можно отключить через фильтр wp_sitemaps_enabled. Это безопаснее, чем править ядро или удалять файлы вручную.
<?php
add_filter( 'wp_sitemaps_enabled', '__return_false' );Такой код можно добавить в functions.php дочерней темы или в собственный мини-плагин. Если вы работаете на живом сайте, мини-плагин предпочтительнее: он не зависит от темы и не пропадёт после обновления шаблона.
Вариант через мини-плагин
Если нужен аккуратный и переносимый способ, создайте файл, например disable-core-sitemaps.php в wp-content/plugins/:
<?php
/*
Plugin Name: Disable Core Sitemaps
Description: Отключает встроенный XML sitemap WordPress.
Version: 1.0.0
*/
add_filter( 'wp_sitemaps_enabled', '__return_false' );После активации проверьте, что /wp-sitemap.xml больше не открывается как рабочая карта сайта. В зависимости от конфигурации сервер может отдавать 404 или редиректить на другой sitemap — это нормально, если вы уже подключили альтернативу.
Чем заменить штатный sitemap
Есть три практических варианта: SEO-плагин, собственный файл или генерация на стороне сервера/CI. Выбор зависит от того, насколько сложная у вас структура сайта и кто будет поддерживать карту сайта дальше.
| Вариант | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| SEO-плагин | Обычный контентный сайт | Простой контроль, не нужен свой код | Зависимость от плагина и его настроек |
| Свой XML-файл | Нужен точный список URL | Полный контроль над составом | Нужно обновлять файл при изменении контента |
| Генерация скриптом | Большой сайт с автоматизацией | Можно встроить в деплой или cron | Требует поддержки и тестов |
Если у вас уже стоит SEO-плагин, сначала проверьте, не умеет ли он сам управлять sitemap. Дублировать генераторы не стоит: поисковику нужен один понятный источник, а не несколько конкурирующих карт.
Свой sitemap.xml для статей и страниц
Если нужен простой управляемый файл, можно сгенерировать его из WordPress через отдельный шаблон или скрипт. Ниже пример для небольшого сайта, где в карту попадают только опубликованные записи и страницы.
<?php
header( 'Content-Type: application/xml; charset=UTF-8' );
require_once dirname( __FILE__ ) . '/wp-load.php';
$posts = get_posts( array(
'post_type' => array( 'post', 'page' ),
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'modified',
'order' => 'DESC',
) );
echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
foreach ( $posts as $post ) {
$loc = esc_url( get_permalink( $post ) );
$lastmod = mysql2date( 'c', $post->post_modified_gmt, false );
echo " <url>\n";
echo " <loc>{$loc}</loc>\n";
echo " <lastmod>{$lastmod}</lastmod>\n";
echo " </url>\n";
}
echo '</urlset>';Это не универсальное решение для крупного проекта, но для небольшого сайта оно часто лучше, чем сложная связка из нескольких плагинов. Главное — не забыть обновлять файл при публикации и удалении контента.
Как не сломать SEO при замене sitemap
Самая частая ошибка — отключить старую карту и забыть указать новую в robots.txt и в Search Console. Тогда поисковик какое-то время будет ходить по старым адресам, а вы получите шум в отчётах и лишние проверки.
После переключения:
- убедитесь, что в
robots.txtуказан актуальный адрес sitemap; - проверьте, что старый sitemap не отдаёт 200 с устаревшим содержимым;
- если меняли структуру URL, дождитесь повторного обхода и не делайте ещё один редизайн карты сразу же;
- не включайте в sitemap страницы с
noindex, редиректы и 404; - не добавляйте в карту URL с параметрами, если они не являются каноническими.
Проверка результата после внедрения
Проверка должна быть не «на глаз», а по конкретным признакам:
- Откройте новый sitemap в браузере и убедитесь, что он отдается с кодом
200. - Проверьте, что в нём только нужные URL и нет служебных разделов.
- Посмотрите исходный код ответа: XML должен быть валидным, без HTML-обвязки темы.
- В Search Console отправьте новый sitemap и дождитесь статуса обработки.
- Проверьте, что старый адрес больше не используется как основной источник.
Если вы используете серверный кэш или CDN, очистите кэш после замены файла. Иначе можно увидеть старую версию sitemap, хотя на сервере уже лежит новая.
Частые ошибки и как их исправить
Включены два sitemap одновременно
Это бывает, когда ядро WordPress генерирует /wp-sitemap.xml, а SEO-плагин — свой sitemap_index.xml. Решение простое: оставьте один источник и отключите второй. Если нужен плагинный sitemap, отключайте ядро через wp_sitemaps_enabled.
В карту попадают страницы, которые закрыты от индексации
Это не критическая ошибка, но плохая практика. Sitemap должен помогать поисковику, а не отправлять его на страницы, которые вы сами просите не индексировать. Сверьте настройки noindex и состав карты сайта.
Сайт отдает XML с HTML-ошибкой
Обычно это значит, что в шаблон sitemap попал вывод темы, BOM в PHP-файле или лишний пробел до <?xml. Для XML это ломает валидность. Проверьте, что файл начинается без любого вывода до заголовка XML.
Старый sitemap остался в кеше
Если после замены вы видите прежний файл, проблема часто не в WordPress, а в кэше страницы, nginx fastcgi_cache или CDN. Очистите все уровни кэша и повторите проверку в режиме инкогнито.
Практические советы по безопасности и производительности
Если sitemap генерируется динамически на большом сайте, не делайте тяжёлый запрос на каждый просмотр. Для крупных проектов лучше кэшировать результат или генерировать файл по расписанию. Иначе карта сайта сама станет источником нагрузки.
Ещё один момент — права доступа. Если вы храните статический XML-файл в корне сайта, убедитесь, что он доступен на чтение, но не может быть перезаписан случайным процессом. Для динамической генерации следите, чтобы код не тянул лишние данные из базы, например не выбирал черновики, ревизии и вложения без необходимости.
Если вам нужно не только убрать дубли и служебные URL, но и централизованно чистить технический мусор в WordPress, имеет смысл посмотреть на инструменты уровня Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но даже с плагином полезно понимать, какой именно sitemap у вас работает и кто его формирует.
Если коротко: сначала найдите источник карты сайта, затем отключите лишний генератор, потом оставьте один понятный sitemap с нужными URL и проверьте его в браузере и Search Console. Это тот случай, где аккуратная техническая правка даёт больше пользы, чем ещё один SEO-«лайфхак».