Ситуация типовая: URL в сайте уже изменились, новые записи опубликованы, а XML Sitemap всё ещё отдаёт старые данные или вообще не меняется. Для поисковика это не катастрофа, но для индексации — заметный тормоз. Чаще всего проблема не в самом sitemap, а в конфликте плагинов, кэше, неверных настройках SEO-плагина или в том, что WordPress отдаёт карту сайта через один слой, а сервер/кэш — через другой.
Что именно ломается и как это выглядит
Перед тем как править настройки, полезно понять, какой сценарий у вас:
- в sitemap нет новых записей и страниц;
- из карты сайта не исчезли удалённые URL;
- файл открывается, но в нём старые даты
lastmod; - сайт отдаёт
404,403или пустой ответ на/sitemap.xml; - в sitemap попадают служебные страницы, архивы или дубли, которые вы не хотите индексировать.
Если карта сайта не обновляется только у поисковика, а в браузере всё выглядит нормально, проблема часто в кэше или в том, что sitemap не был переотправлен в Google Search Console / Яндекс Вебмастер. Если же в браузере уже видны старые данные, искать нужно на стороне генератора sitemap и кэширования.
Диагностика: где искать источник проблемы
1. Проверьте, кто генерирует sitemap
В WordPress карту сайта может отдавать ядро или SEO-плагин. Это важно, потому что два генератора одновременно часто создают конфликт. Откройте /sitemap.xml и посмотрите, куда он ведёт. Если внизу страницы или в HTML есть следы Yoast, Rank Math, All in One SEO или другого SEO-плагина, значит генерация идёт не ядром.
Дальше проверьте, не включены ли одновременно несколько источников sitemap. Например, если SEO-плагин уже создаёт карту сайта, а вы дополнительно подключили отдельный плагин для XML sitemap, результат может быть непредсказуемым.
2. Сравните ответ сервера и ответ кэша
Иногда проблема не в WordPress, а в том, что сервер или кэш-плагин отдают старую версию XML. Проверить это можно через заголовки ответа:
curl -I https://example.com/sitemap.xmlЕсли в заголовках есть признаки кэширования вроде cache-control, x-cache или cf-cache-status, а содержимое не меняется после публикации новых материалов, sitemap может кэшироваться слишком агрессивно.
3. Посмотрите, не исключены ли записи из индексации
Если запись помечена как noindex, многие SEO-плагины убирают её из sitemap. Это нормально, но иногда настройка включается случайно для целых типов записей. Проверьте:
- настройки индексации для записей, страниц и таксономий;
- не отключён ли тип записи в SEO-плагине;
- не скрывает ли плагин часть контента из sitemap по условию;
- не используется ли фильтр в теме или плагине, который вырезает URL из карты сайта.
Пошаговое решение
Шаг 1. Уберите конфликт генераторов sitemap
Оставьте только один источник XML Sitemap. Если используете SEO-плагин, проверьте, не включён ли параллельно sitemap ядра или отдельный sitemap-плагин. В большинстве случаев достаточно одного механизма.
Если вы хотите временно отключить sitemap ядра WordPress и оставить генерацию SEO-плагину, можно использовать фильтр:
add_filter( 'wp_sitemaps_enabled', '__return_false' );Добавлять такой код лучше в дочернюю тему или в небольшой mu-plugin, а не в основной файл темы, чтобы не потерять настройку при обновлении.
Шаг 2. Очистите кэш на всех уровнях
Если sitemap генерируется динамически, но отдаётся старый XML, очистите:
- кэш плагина;
- серверный кэш, если он есть;
- CDN-кэш;
- браузерный кэш для проверки.
После очистки откройте sitemap в режиме инкогнито и сравните дату lastmod у свежей записи. Если дата обновилась, значит проблема была именно в кэше.
Шаг 3. Проверьте настройки SEO-плагина
У SEO-плагинов логика разная, но принцип один: карта сайта строится на основе того, что разрешено к индексации. Проверьте, не отключены ли:
- посты;
- страницы;
- кастомные типы записей;
- категории и теги, если они должны быть в sitemap;
- медиа-страницы, если вы их сознательно отключали.
Если вы недавно меняли структуру сайта, иногда помогает просто пересохранить настройки SEO-плагина и заново сбросить правила кэширования.
Шаг 4. Принудительно обновите rewrite rules
Если sitemap открывается с ошибкой маршрутизации или после миграции сайта URL ведёт не туда, обновите правила постоянных ссылок. В админке это делается через Настройки → Постоянные ссылки: достаточно нажать «Сохранить изменения» без правок. Это не лечит всё подряд, но часто исправляет ситуацию после переноса сайта или смены плагина.
Шаг 5. Проверьте, не мешает ли код темы или плагина
Если в теме или кастомном плагине есть фильтры на pre_get_posts, template_redirect или специальные правила для архивов, они могут косвенно влиять на sitemap. Особенно это заметно, если в карту сайта не попадают записи определённого типа.
Для точечной проверки можно временно отключить кастомные фильтры и посмотреть, изменится ли XML. Если после отключения sitemap начал обновляться, значит проблема в вашем коде, а не в WordPress.
Когда лучше править кодом, а когда — плагином
| Подход | Когда подходит | Минус |
|---|---|---|
| SEO-плагин | Если sitemap нужен без доработок и сайт уже использует SEO-настройки плагина | Может конфликтовать с кэшем и другими плагинами |
| Код через фильтры | Если нужно отключить ядро sitemap или точечно исключить типы записей | Требует аккуратности и контроля при обновлениях |
| Отдельный sitemap-плагин | Если у сайта нестандартная структура и нужен отдельный контроль | Легко получить дубли генераторов |
Проверка результата после внедрения
После исправления не ограничивайтесь визуальной проверкой в браузере. Нужна проверка по нескольким признакам:
- откройте
/sitemap.xmlв режиме инкогнито; - сравните дату
lastmodу свежей записи; - убедитесь, что удалённые URL исчезли из карты;
- проверьте ответ сервера через
curl -I; - посмотрите sitemap в Google Search Console или Яндекс Вебмастере и отправьте его повторно, если нужно.
Если после очистки кэша и пересохранения настроек sitemap всё ещё не меняется, откройте лог ошибок сервера и проверьте, нет ли PHP-ошибок в плагине генерации. Иногда XML ломается из-за предупреждений, которые попадают в вывод раньше самого файла.
Частые ошибки и как их исправить
Включены два sitemap одновременно
Это самая частая причина. Ядро WordPress, SEO-плагин и отдельный sitemap-плагин не должны конкурировать за один и тот же URL. Оставьте один источник и отключите остальные.
Кэшируется не только HTML, но и XML
Некоторые кэш-плагины и CDN по умолчанию кэшируют всё подряд. Для sitemap лучше исключить XML-эндпоинты из агрессивного кэша или задать короткое время жизни.
Запись скрыта noindex, но вы ждёте её в sitemap
Это не баг, а следствие настроек. Если контент должен индексироваться, проверьте SEO-мета-блок и глобальные настройки типа записи.
После миграции не обновились правила
Если сайт переехал на другой домен или изменился путь установки, пересохраните постоянные ссылки и очистите кэш. Без этого sitemap может вести себя так, будто старый путь всё ещё актуален.
В sitemap попадают лишние URL
Значит, где-то отключена фильтрация типов записей или таксономий. Проверьте настройки SEO-плагина и кастомные фильтры в теме.
Практические советы по безопасности и производительности
Не делайте sitemap «тяжёлым» без необходимости. Если на сайте десятки тысяч URL, лучше следить за тем, чтобы карта сайта не генерировалась с лишними сущностями: медиа-страницами, служебными архивами, дублями таксономий. Это не только ускоряет обработку, но и уменьшает риск ошибок при генерации.
Если вы используете кастомный код, не хардкодьте URL в шаблонах sitemap и не строите XML вручную без необходимости. Надёжнее опираться на стандартные механизмы WordPress и фильтры SEO-плагина. Для точечной чистки дублей и технических настроек иногда удобнее использовать Clearfy Pro, если он уже есть в вашем стеке, но только как инструмент настройки, а не как замена пониманию того, кто именно генерирует sitemap.
Если после всех правок карта сайта всё ещё не обновляется, начните с простого: отключите лишние генераторы, очистите кэш, проверьте ответ сервера и только потом копайте глубже в код темы или плагинов. В таких задачах почти всегда выигрывает последовательная диагностика, а не хаотичное переключение настроек.
// Пример: исключить определённый тип записей из ядра sitemap WordPress
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['my_custom_post_type'] );
return $post_types;
} );Если после этого нужный тип записей пропал из карты сайта, значит вы нашли рабочую точку управления. Дальше уже можно решать, оставлять ли это поведение или настраивать его через SEO-плагин.