Если в sitemap.xml попадают URL, которые уже дают 404, поисковик тратит краулинговый бюджет на мусор, а в Search Console растёт список ошибок. В WordPress это обычно происходит после удаления записей, смены структуры постоянных ссылок, отключения таксономии или конфликта плагинов SEO и кэша. Ниже — рабочая схема: как найти источник 404, убрать проблемные URL из карты сайта и проверить, что всё действительно исправилось.
Как понять, что проблема именно в sitemap
Не каждый 404 в отчёте Search Console связан с картой сайта. Иногда URL приходит из внешних ссылок, старых редиректов или внутренних ссылок в контенте. Сначала нужно проверить, есть ли проблемный адрес в sitemap.xml или в дочерних sitemap-файлах.
Быстрая диагностика
- Откройте
/sitemap.xmlи найдите проблемный URL вручную или через поиск по файлу. - Если у вас SEO-плагин, проверьте отдельные карты: записи, страницы, рубрики, авторы, медиа.
- Сравните код ответа URL в браузере или через
curl -I. - Посмотрите, не генерируется ли URL динамически из плагина, а не из базы WordPress.
curl -I https://example.com/old-page/Если ответ 404 Not Found, а URL при этом есть в sitemap, значит карта сайта отдаёт устаревшие данные. Если URL уже редиректится на новый адрес, но всё равно остаётся в sitemap, это тоже стоит исправить: в карте сайта должны быть только канонические рабочие адреса.
Откуда в WordPress берутся битые URL в sitemap
Чаще всего источник один из трёх: запись или страница удалены, но кэш карты сайта ещё не обновился; SEO-плагин включает в sitemap типы записей или таксономии, которые больше не используются; в теме или плагине есть кастомный тип записи, который остался без публикаций, но его архив всё ещё индексируется.
Если у вас стоит Yoast SEO, Rank Math или другой SEO-плагин, он обычно строит sitemap автоматически. В таком случае править сам XML руками бессмысленно — нужно убрать источник проблемы в настройках или через фильтры WordPress.
| Подход | Что делает | Когда подходит | Минус |
|---|---|---|---|
| Настройки SEO-плагина | Исключает типы записей, таксономии, медиа | Если проблема массовая и повторяется | Нужно понимать, какой раздел отключать |
| Код в functions.php или мини-плагине | Точечно убирает URL из sitemap | Если нужен контроль над конкретным типом контента | Требует аккуратности и теста после обновлений |
| Редирект 301 | Перенаправляет старый URL на новый | Если адрес должен жить как наследие ссылок | Не решает проблему, если URL не должен индексироваться вообще |
Пошаговое решение: убрать 404 из sitemap
Шаг 1. Найдите источник URL
Если URL относится к записи, странице или рубрике, проверьте, существует ли объект в админке. Если это архив таксономии или кастомного типа записи, убедитесь, что он вообще должен индексироваться. Часто проблема появляется после удаления последнего объекта, когда архив остаётся доступным, но пустым.
Шаг 2. Очистите кэш
После удаления контента sitemap может обновляться не мгновенно. Если используется кэш-плагин, серверный кэш или CDN, очистите их все. Иначе вы будете смотреть на старую версию карты сайта и делать ложные выводы.
Шаг 3. Исключите ненужный тип контента
Если в sitemap попадают, например, вложения медиафайлов или служебные таксономии, их лучше отключить на уровне SEO-плагина. Это безопаснее, чем пытаться вырезать каждый URL вручную.
Для Yoast SEO можно точечно убрать записи из sitemap через фильтр. Ниже пример, который исключает конкретную запись по ID из XML-карты сайта:
add_filter( 'wpseo_sitemap_entry', function( $url, $type, $object ) {
if ( isset( $object->ID ) && (int) $object->ID === 123 ) {
return false;
}
return $url;
}, 10, 3 );Если нужно исключить целый тип записей, удобнее делать это через настройки плагина или отдельный фильтр, зависящий от конкретного SEO-решения. Не стоит копировать чужой код без проверки версии плагина: у разных SEO-плагинов свои фильтры и структура данных.
Шаг 4. Если URL должен жить — поставьте 301
Когда старый адрес уже разошёлся по внешним ссылкам, правильнее не удалять его молча, а сделать 301 на новый URL. Тогда sitemap должен содержать только новый адрес, а старый — отдавать редирект и не попадать в карту сайта.
add_action( 'template_redirect', function() {
if ( is_page( 'old-page' ) ) {
wp_redirect( home_url( '/new-page/' ), 301 );
exit;
}
} );Этот вариант годится только для простых сценариев. Если редиректов много, лучше использовать серверные правила или плагин редиректов, чтобы не плодить логику в теме.
Проверка результата после внедрения
После изменений не ограничивайтесь открытием sitemap в браузере. Проверьте цепочку целиком:
- URL из sitemap отдаёт
200 OKили корректный301, если это старый адрес. - Проблемный URL исчез из XML-карты сайта после очистки кэша.
- В Search Console больше не растёт число новых 404 по этому адресу.
- Внутренние ссылки сайта не ведут на удалённую страницу.
curl -I https://example.com/sitemap_index.xml
curl -I https://example.com/post-sitemap.xmlЕсли sitemap разбит на несколько файлов, проверьте не только индексную карту, но и дочерние. Иногда проблема сидит в одном разделе, а основной sitemap.xml выглядит нормально.
Частые ошибки и как их исправить
Удалили страницу, но оставили внутренние ссылки
Это самая частая причина повторных 404. Даже если URL исчез из sitemap, поисковик и пользователи могут попадать на него через меню, блоки в контенте, хлебные крошки или виджеты. После удаления страницы сделайте поиск по базе или хотя бы по контенту сайта.
Поставили noindex, но URL всё ещё в sitemap
noindex и sitemap — разные вещи. Если URL не должен индексироваться, его лучше убрать и из карты сайта, и из внутренних ссылок. Иначе вы создаёте противоречивый сигнал: адрес одновременно предлагается поисковику и запрещается к индексации.
Сделали редирект, но оставили старый URL в карте сайта
Это не критично, но плохо для чистоты индексации. В sitemap должны быть только конечные канонические адреса. Старый URL с редиректом — это переходный этап, а не постоянное состояние.
Правили XML вручную
Ручная правка sitemap почти всегда бессмысленна: файл генерируется заново, и изменения пропадут. Исправлять нужно источник генерации — запись, таксономию, настройку SEO-плагина или фильтр.
Что делать, если sitemap генерирует не SEO-плагин
Иногда карту сайта создаёт сам WordPress или отдельный плагин, который отвечает за XML. Тогда сначала отключите лишние генераторы, чтобы не было двух sitemap одновременно. Дублирующиеся карты сайта — отдельная проблема: поисковик может видеть разные версии одного и того же набора URL.
Если вы используете несколько плагинов для SEO и кэша, проверьте, не подменяет ли один из них карту сайта через кэшированный ответ. В таких случаях помогает временное отключение кэша и повторная проверка заголовков ответа.
Практические советы по безопасности и производительности
Не добавляйте в sitemap всё подряд. Чем больше мусорных URL, тем больше лишней работы у краулера и тем сложнее поддерживать сайт. Для больших проектов полезно:
- исключать служебные таксономии и архивы, которые не нужны в поиске;
- не индексировать медиа-страницы, если они не несут самостоятельной ценности;
- следить, чтобы удалённые материалы сразу получали понятный статус: 404, 410 или 301;
- после массовых правок проверять карту сайта через Search Console и лог сервера, если он доступен.
Если вам нужен более системный контроль над дублями, индексированием и чисткой служебных страниц, удобнее решать это на уровне SEO-настроек и технической оптимизации, а не точечными правками в шаблонах. В некоторых проектах для этого используют Clearfy Pro: он закрывает часть типовых задач по чистке сайта и управлению индексированием, но внедрять его стоит только после проверки текущей конфигурации и конфликтов с другими SEO-плагинами.
Главный критерий здесь простой: sitemap должен содержать только те URL, которые вы готовы видеть в индексе и которые реально отвечают 200 OK. Всё остальное — либо редирект, либо исключение, либо удаление источника генерации.