Если в Google Search Console в отчёте по sitemap появляются ошибки, а в карте сайта продолжают жить удалённые или битые URL, проблема обычно не в самой XML-карте, а в источнике данных: записи, таксономии, медиафайлы, старые правила плагина SEO или кэш. В WordPress это лечится не одной кнопкой, а последовательной проверкой, где именно формируется список ссылок.
Когда sitemap начинает отдавать 404-URL
Типичный сценарий выглядит так: страницу удалили, перенесли в другой раздел или закрыли плагином, но она всё ещё есть в sitemap. Поисковик заходит по этим ссылкам, получает 404, и в отчётах растёт шум. Для сайта это не катастрофа, но это лишняя нагрузка на обход и плохой сигнал о качестве технической поддержки контента.
Чаще всего битые URL в sitemap появляются из-за одного из трёх источников:
- запись или страница удалена, но кэш sitemap не обновился;
- плагин SEO продолжает включать в карту сайта типы записей, которые уже не должны индексироваться;
- URL есть в базе, но на фронтенде он уже недоступен из-за редиректа, смены слага или удаления вложения.
Диагностика: где именно ломается карта сайта
Сначала нужно понять, это проблема генерации sitemap или проблема конкретной страницы. Не начинайте с массового удаления плагинов — сначала проверьте источник.
1. Откройте сам sitemap
Если у вас используется встроенный sitemap WordPress, откройте /wp-sitemap.xml. Если стоит SEO-плагин, карта может быть на другом адресе, например /sitemap_index.xml. Посмотрите, какие URL там перечислены, и найдите проблемные записи вручную.
2. Проверьте статус URL
Откройте подозрительный адрес в браузере или проверьте через консоль. Если URL отдаёт 404, но всё ещё присутствует в sitemap, значит источник не обновился. Если URL отдаёт 301 на новый адрес, а в sitemap остался старый, это уже вопрос к настройке генератора карты сайта.
curl -I https://example.com/old-page/В ответе смотрите на HTTP/1.1 404 Not Found или 301 Moved Permanently. Это помогает быстро отличить реально битую ссылку от устаревшего URL с редиректом.
3. Сверьте источник в админке
Если URL относится к записи, странице, рубрике или медиафайлу, проверьте, существует ли объект в админке. Иногда запись не удалена, а просто переведена в черновик, и плагин всё равно продолжает учитывать её в карте сайта, если он настроен на показ всех публичных типов.
Пошаговое решение: убрать битые ссылки из sitemap
Ниже рабочая последовательность, которая обычно закрывает проблему без лишних побочных эффектов.
Шаг 1. Удалите или восстановите источник URL
Если страница должна существовать — восстановите её или верните корректный редирект на новый адрес. Если страница больше не нужна, убедитесь, что она удалена не только из контента, но и из связанных сущностей: меню, блоков, внутренних ссылок, XML-карты.
Шаг 2. Очистите кэш sitemap и страницы
Если используется кэш-плагин или серверный кэш, карта сайта может отдаваться из старой версии. После изменений очистите:
- кэш плагина;
- объектный кэш, если он есть;
- CDN-кэш, если sitemap проксируется через CDN;
- кэш браузера для локальной проверки.
Если у вас включён плагин оптимизации вроде Clearfy Pro, проверьте, не включена ли отдельная настройка для технической чистки и удаления дублей. В таких случаях полезно не только очистить кэш, но и пересобрать технические файлы сайта после изменений. Подробности зависят от конкретной конфигурации, поэтому ориентируйтесь на фактический адрес sitemap и его источник, а не на название плагина.
Шаг 3. Исключите ненужные типы контента из sitemap
Если в карту сайта попадают служебные записи, вложения или типы контента, которые не должны индексироваться, их лучше исключить на уровне генератора. Для встроенного sitemap WordPress можно отключить отдельные типы записей через фильтр.
add_filter( 'wp_sitemaps_post_types', function( $post_types ) {
unset( $post_types['attachment'] );
return $post_types;
} );Этот пример убирает вложения из sitemap. Если у вас есть кастомный тип записи, который не должен попадать в карту сайта, удалите его аналогично по ключу массива.
Шаг 4. Если нужен точечный контроль, фильтруйте URL перед выводом
Когда проблема не в типе контента, а в конкретных URL, удобнее отфильтровать их на этапе генерации. Для встроенного sitemap WordPress можно использовать фильтр wp_sitemaps_posts_pre_url_list и убрать записи по ID или по статусу.
add_filter( 'wp_sitemaps_posts_pre_url_list', function( $url_list, $post_type ) {
if ( 'post' !== $post_type ) {
return $url_list;
}
$blocked_ids = array( 123, 456 );
return array_values( array_filter( $url_list, function( $item ) use ( $blocked_ids ) {
return empty( $item['loc'] ) || ! in_array( url_to_postid( $item['loc'] ), $blocked_ids, true );
} ) );
}, 10, 2 );Это не универсальная «волшебная» заплатка, а рабочий способ убрать из sitemap конкретные записи, если они по какой-то причине продолжают туда попадать. Используйте его аккуратно: лучше исправить источник, чем маскировать проблему фильтром.
Сравнение подходов: плагин, код или ручная правка
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Плагин SEO / настройки sitemap | Нужно быстро исключить типы контента | Без кода, удобно для редактора | Может не решить точечные 404-URL |
| Код через фильтры WordPress | Нужен контроль над конкретными URL | Точно, прозрачно, без лишних зависимостей | Требует аккуратности и теста после обновлений |
| Ручная правка контента и редиректы | URL реально должен измениться или исчезнуть | Устраняет первопричину | Не помогает, если sitemap кэшируется или генерируется из другого источника |
Проверка результата после внедрения
После правок не ограничивайтесь визуальной проверкой. Нужно убедиться, что sitemap действительно обновился и больше не отдаёт старые адреса.
- Откройте sitemap в браузере и найдите удалённый URL поиском по странице.
- Проверьте заголовки ответа через
curl -Iили аналогичный инструмент. - Если используется Search Console, отправьте sitemap на повторное сканирование.
- Проверьте, что старый URL либо исчез из карты сайта, либо корректно редиректится, если это ожидаемое поведение.
Если URL пропал из sitemap, но всё ещё виден в кеше поисковика, это нормально: поисковая система обновляет данные не мгновенно. Важнее, чтобы сайт больше не отдавал этот адрес как актуальный источник.
Частые ошибки и как их исправить
Оставили редирект, но не убрали URL из sitemap
Редирект сам по себе не решает проблему карты сайта. Если старый адрес больше не нужен, он не должен оставаться в XML-файле. Иначе поисковик будет тратить обход на устаревшую ссылку.
Проверили только страницу, но не проверили вложения
Медиафайлы часто попадают в sitemap отдельным блоком. Удалённая картинка или файл могут продолжать отображаться в карте сайта, если кэш или источник не обновились. Это особенно заметно на сайтах с большим количеством изображений.
Очистили кэш сайта, но забыли про CDN
Если sitemap отдаётся через CDN, старая версия может жить именно там. В этом случае локальная проверка покажет обновление, а поисковик ещё какое-то время будет получать старый файл с edge-узла.
Скрыли проблему фильтром, но не исправили контент
Фильтр полезен, когда нужен точечный контроль. Но если страница продолжает ссылаться из меню, блоков или внутренних материалов, битый URL будет всплывать в других местах. Сначала уберите источник, потом уже фильтруйте вывод.
Что проверить дополнительно, чтобы проблема не вернулась
Если сайт регулярно меняет структуру, полезно ввести короткий чек-лист после публикации и удаления материалов. Это дешевле, чем потом разбирать накопившиеся 404.
- После удаления записи проверяйте, не осталась ли она в sitemap.
- После смены слага ставьте 301-редирект на новый адрес.
- После массовой правки контента очищайте кэш и пересобирайте sitemap.
- Раз в несколько недель смотрите отчёты по 404 в Search Console и серверных логах.
Если нужен более широкий контроль над дублями, техническими страницами и SEO-грязью, имеет смысл использовать инструменты, которые помогают управлять служебными URL и настройками индексации на уровне сайта. Но даже в этом случае логика остаётся той же: сначала найти источник битой ссылки, потом убрать её из генерации sitemap, и только после этого проверять отчёты поисковиков.