Ситуация типовая: вы опубликовали новую запись, а в /sitemap.xml её нет. Или наоборот — удалили страницу, а она продолжает висеть в карте сайта. Для SEO это не катастрофа само по себе, но если sitemap реально отдаёт устаревшие URL, поисковику становится сложнее быстро понять, что на сайте изменилось.
Проблема почти всегда лежит в одном из трёх мест: генератор sitemap, кеширование или конфликт между плагинами. Реже виноваты настройки индексации, кастомные типы записей и фильтры, которые исключают нужный контент.
Что именно ломается: диагностика перед правкой
Сначала нужно понять, где именно залипает обновление. Не стоит сразу менять плагины или переписывать код: в WordPress карта сайта может генерироваться ядром, SEO-плагином или кастомной логикой темы.
Проверьте, кто отдаёт sitemap
Откройте URL карты сайта и посмотрите на формат. Если это индекс вида /wp-sitemap.xml, карту отдаёт ядро WordPress. Если адрес похож на /sitemap_index.xml, чаще всего это SEO-плагин. У разных источников разные причины задержек и разные точки настройки.
Дальше проверьте:
- появляется ли новая запись в админке, но отсутствует в sitemap;
- исчезает ли удалённая страница из карты сайта после очистки кеша;
- отдаётся ли sitemap с кодом
200, а не301,403или500; - не закрыт ли сам sitemap в
robots.txtили правилами сервера; - не включён ли кеш на уровне плагина, CDN или хостинга.
Быстрая проверка через браузер и curl
Если есть доступ к консоли, удобно проверить заголовки ответа. Это помогает понять, не отдаётся ли устаревшая версия из кеша.
curl -I https://example.com/wp-sitemap.xmlСмотрите на cache-control, x-cache и похожие заголовки. Если карта сайта кэшируется слишком агрессивно, изменения в контенте могут не попадать в неё сразу.
Почему sitemap.xml не обновляется
На практике чаще всего встречаются четыре сценария.
| Причина | Как выглядит | Что делать |
|---|---|---|
| Кеш плагина или CDN | Новая запись не появляется, пока не очистить кеш | Исключить sitemap из кеширования или настроить отдельное правило |
| SEO-плагин генерирует карту сайта | Обновления приходят с задержкой или не приходят после смены настроек | Проверить настройки sitemap и пересохранить конфигурацию |
| Ядро WordPress, но есть конфликт | /wp-sitemap.xml отдаёт пустые или неполные списки | Проверить плагины, фильтры и кастомные типы записей |
| Кастомный код исключает контент | Часть записей стабильно отсутствует | Найти фильтры wp_sitemaps_* и логику exclude_from_search |
Пошаговое решение без лишних рисков
1. Очистите кеш там, где он реально есть
Если на сайте стоит кеширующий плагин, начните с него. Для sitemap лучше либо отключить кеширование этого URL, либо сделать очень короткий TTL. Иначе поисковик будет видеть старую карту сайта дольше, чем нужно.
Если используется серверный кеш или CDN, проверьте правила исключения для:
/wp-sitemap.xml;/sitemap.xml;/sitemap_index.xml;- дочерних sitemap-файлов, если они есть.
На практике полезно не просто очистить кеш, а проверить, что sitemap после очистки отдается уже без старой копии.
2. Пересохраните настройки генератора sitemap
Если карту сайта создаёт SEO-плагин, иногда помогает обычное сохранение настроек без изменений. Это пересобирает внутренние правила и сбрасывает часть служебных данных. Но если проблема повторяется, нужно смотреть, не исключён ли нужный тип записей из индексации или из sitemap.
Проверьте, не отключены ли:
- записи нужного post type;
- таксономии, если они должны попадать в карту сайта;
- медиафайлы, если вы рассчитываете на их индексацию;
- страницы, которые были переведены в noindex, но всё ещё должны присутствовать в sitemap по вашей логике.
3. Убедитесь, что кастомный тип записей поддерживает sitemap
Если у вас свой post type, он может не попадать в карту сайта из-за параметров регистрации. В ядре WordPress и в SEO-плагинах логика отличается, но базовая ошибка одна: тип записи создан, а для индексации и публичного вывода он настроен не полностью.
Пример регистрации, где тип записи доступен для поиска и публичного вывода:
register_post_type('docs', array(
'label' => 'Документация',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_rest' => true,
'has_archive' => true,
'exclude_from_search' => false,
'supports' => array('title', 'editor', 'excerpt'),
));Если exclude_from_search стоит в true, это не всегда автоматически убирает тип из sitemap, но часто приводит к путанице в логике индексации и фильтрах. Лучше держать настройки согласованными.
4. Проверьте фильтры WordPress sitemap
Если вы добавляли кастомизацию, ищите фильтры wp_sitemaps_posts_query_args, wp_sitemaps_taxonomies и похожие. Именно там часто случайно режут нужные записи по статусу, дате или типу.
Пример: исключить из sitemap служебный тип записей, но не трогать остальное:
add_filter('wp_sitemaps_post_types', function($post_types) {
unset($post_types['revision']);
return $post_types;
});Если у вас есть более сложная логика, проверьте, не подменяется ли запрос к sitemap через глобальные фильтры pre_get_posts или posts_where. Такие правки иногда влияют не только на фронтенд, но и на генерацию карты сайта.
Когда лучше использовать код, а когда плагин
Если проблема в кеше или конфликте настроек, плагин обычно проще. Если же sitemap должен формироваться по нестандартным правилам, надёжнее точечный код в теме или мини-плагине.
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин SEO | Быстро, без кода, есть интерфейс | Зависимость от настроек и обновлений |
| Код в теме | Точный контроль над типами и фильтрами | Риск сломать sitemap при обновлении темы |
| Мини-плагин | Изоляция логики, проще сопровождать | Нужно один раз аккуратно оформить |
Если вы часто правите технические настройки сайта, удобнее вынести такие вещи в отдельный мини-плагин. Тогда при смене темы карта сайта не исчезнет вместе с кастомным кодом.
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой в браузере. Нужно убедиться, что sitemap действительно обновился и отдает актуальные данные.
- Откройте sitemap в приватном окне и проверьте, что URL доступен без редиректов.
- Проверьте исходный XML: есть ли новая запись или исчезла ли удалённая.
- Снова выполните
curl -Iи посмотрите заголовки кеша. - Если используется SEO-плагин, проверьте его карту сайта и отдельные вложенные sitemap-файлы.
- Посмотрите логи сервера, если sitemap отдаёт ошибку или пустой ответ.
Если сайт подключён к Google Search Console, отправьте карту сайта повторно только после того, как убедились в актуальности файла. Иначе вы просто закрепите старую версию в отчётах.
Частые ошибки и как их исправить
Очищают кеш страницы, но забывают про CDN
Локальный кеш может быть пустым, а CDN продолжит отдавать старую карту сайта. Исправление простое: добавьте sitemap в исключения на всех уровнях, а не только в одном плагине.
Проверяют не тот URL
На сайте может быть и /wp-sitemap.xml, и /sitemap_index.xml, если меняли SEO-плагин. В итоге смотрят на старый адрес и делают неправильные выводы. Сначала выясните, какой sitemap сейчас активен.
Ставят noindex и ждут, что URL исчезнет из sitemap сразу
Это не всегда происходит мгновенно. Если карта сайта кэшируется или генерируется по расписанию, изменения появятся только после обновления данных. Для ускорения проверьте кеш и пересохраните настройки генератора.
Правят functions.php без резервной копии
Одна ошибка в фильтре sitemap может сломать XML целиком. Для таких правок безопаснее использовать дочернюю тему или мини-плагин, а перед изменениями сделать бэкап.
Что проверить, если проблема повторяется
- нет ли конфликта между двумя SEO-плагинами;
- не отключён ли REST API или XML-вывод на уровне безопасности;
- не блокирует ли sitemap правило в
robots.txt; - не меняет ли сервер заголовки кеша для XML-файлов;
- не влияет ли кастомный код на запросы к публичным типам записей.
Если на сайте много технических правок, полезно держать отдельный список исключений для кеша и индексации. Это снижает шанс, что sitemap снова начнёт отдавать устаревшие данные после очередного обновления плагина или темы.
Для сайтов, где часто меняется структура контента, удобно использовать инструменты технической чистки и контроля дублей, например Clearfy Pro: он не решает проблему sitemap сам по себе, но помогает убрать часть лишней технической нагрузки и конфликтов в SEO-настройках. Если подключаете такие решения, всё равно проверяйте итоговый XML руками, а не только по статусу в админке.