Ошибки в sitemap.xml: как найти и исправить каждую
Почти все проблемы с картой сайта сводятся к десятку типовых ошибок. Разбираем каждую: симптом, причину и конкретное исправление.
Большинство ошибок в sitemap.xml сводятся к десятку типовых проблем: неверное пространство имён, неэкранированные символы в URL, относительные адреса, некорректные даты lastmod, превышение лимитов в 50 000 URL или 50 МБ, а также файл, который отдаёт HTML вместо XML. Ниже — каждая ошибка с симптомом, причиной и точным исправлением.
Неверное или отсутствующее пространство имён
Корневой элемент карты сайта обязан объявлять пространство имён протокола дословно:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
Любое отклонение — опечатка, https вместо http внутри строки, устаревшее пространство имён 0.84 из старых генераторов — и парсер поисковой системы отклонит файл целиком. Симптом коварный: XML внешне выглядит нормально, а Search Console сообщает, что карту «не удалось прочитать». Исправление одно: скопируйте строку из спецификации sitemaps.org без изменений.
Неэкранированные символы в URL
XML резервирует пять символов: &, <, >, " и '. Самый частый нарушитель — амперсанд в параметрах запроса. «Голый» & обрывает разбор файла прямо на этой строке, и всё, что идёт после, теряется. Правильно так:
<loc>https://example.com/catalog?page=2&sort=price</loc>
То есть каждый & в URL записывается как &. Если карту генерирует скрипт, экранируйте значения средствами XML-библиотеки, а не ручной конкатенацией строк — это устраняет проблему раз и навсегда.
Относительные URL и адреса без схемы
Каждый <loc> должен содержать полный абсолютный URL со схемой: https://example.com/page/. Записи вида /page/ или example.com/page/ протокол считает недействительными — краулер не станет догадываться, какой хост и какая схема имелись в виду. Проверьте шаблон генерации: чаще всего забывают подставить базовый адрес сайта.
Некорректный lastmod и даты из будущего
Поле <lastmod> принимает только формат W3C Datetime: 2026-07-16 или 2026-07-16T09:30:00+00:00. Записи вида 16/07/2026, 16 июля 2026 или Unix-таймштампы недопустимы. Отдельная беда — даты из будущего: они появляются, когда сервер живёт не в том часовом поясе или генератор подставляет время сборки. Google прямо говорит, что использует lastmod только тогда, когда датам можно доверять; один неправдоподобный файл — и поле начнут игнорировать по всему сайту.
Больше 50 000 URL или 50 МБ
Лимиты протокола жёсткие: не более 50 000 URL и не более 50 МБ в несжатом виде на один файл. Превысили — разбейте карту на части и перечислите их в файле индекса Sitemap (подробно об этом — в руководстве по индексам Sitemap). Gzip уменьшает размер при передаче, но лимит в 50 МБ считается по распакованному файлу, так что сжатие от разбиения не спасает.
Карта отдаёт 404, редирект или HTML
URL карты сайта должен отвечать кодом 200 и содержимым XML. Типовые сбои:
- 404 — карту переместили или удалили при деплое, а в robots.txt и панелях вебмастера остался старый адрес.
- Редирект — например, с http на https или с адреса без слэша. Один постоянный редирект краулеры обычно переживают, но цепочки и редиректы на страницу ошибки ломают обработку. Указывайте конечный адрес сразу.
- HTML вместо XML — сервер отдаёт красивую страницу «404 Not Found» с кодом 200. Внешне ссылка «работает», а парсер видит HTML. Откройте карту через «просмотр кода страницы» и убедитесь, что первая строка — XML.
URL на другом хосте
Если карта лежит на https://www.example.com/sitemap.xml, все URL в ней должны начинаться с https://www.example.com/. Смесь www и без www, http и https или вообще другой домен — и поисковые системы проигнорируют «чужие» записи. Обычно это симптом того, что канонический хост сайта не совпадает с настройками генератора. Приведите всё к одной канонической форме.
Смешение схем и дубликаты
Две ошибки помельче, которые валидатор ловит регулярно. Первая — в одном файле соседствуют URL с http:// и https://: обычно это след старого генератора, пережившего переезд на https. Перечисляйте только каноническую схему. Вторая — дубликаты: один и тот же адрес встречается в карте несколько раз, часто из-за того, что страница попадает в выборку и по категории, и по тегу. Файл от этого не ломается, но раздувается и выглядит неряшливо; правильное место для дедупликации — запрос, который собирает список URL.
Страницы из карты закрыты в robots.txt или через noindex
Карта сайта говорит «обойди эти страницы», robots.txt говорит «сюда нельзя», а noindex говорит «не показывай в выдаче». Когда сигналы противоречат друг другу, в Search Console появляются предупреждения, а в Яндекс.Вебмастере — страницы со статусом «запрещено в robots.txt». Правило простое: в карте должны быть только те URL, которые вы действительно хотите видеть в индексе. Всё остальное — удалить из карты.
«Не удалось получить» в Search Console и ошибки Яндекса
Статус «Couldn't fetch» в Google Search Console чаще всего означает одно из трёх: карта недоступна по указанному адресу (404, 5xx, таймаут), доступ к ней закрыт в robots.txt, либо сервер отвечает слишком медленно или блокирует краулер по User-Agent. Яндекс.Вебмастер в разделе «Файлы Sitemap» показывает похожие статусы и, как правило, называет конкретную строку с проблемой. В обоих случаях сначала проверьте файл валидатором, затем убедитесь, что он открывается из внешней сети, и только после этого отправляйте повторно.
Сводная таблица: симптом → причина → исправление
| Симптом | Вероятная причина | Исправление |
|---|---|---|
| «Не удалось прочитать карту» при корректном на вид XML | Неверное пространство имён в <urlset> | Скопировать xmlns дословно из спецификации |
| Обработана только часть URL | Неэкранированный & обрывает разбор | Записывать & вместо & во всех URL |
| Записи помечены как недействительные URL | Относительные пути или адреса без схемы | Полные абсолютные URL с https:// |
| Google игнорирует lastmod | Неверный формат или даты из будущего | Формат W3C и только реальные даты изменений |
| Карта отклонена целиком | Больше 50 000 URL или 50 МБ | Разбить и связать через индекс Sitemap |
| «Не удалось получить» / “Couldn't fetch” | 404, редирект, HTML вместо XML, блокировка краулера | Ответ 200 с XML по конечному адресу |
| URL из карты не попадают в индекс | Чужой хост, robots.txt или noindex | Один канонический хост; убрать закрытые страницы из карты |
Порядок действий
- Прогоните карту через валидатор XML-карты сайта — он найдёт все ошибки уровня файла с указанием конкретных записей.
- Исправьте ошибки в генераторе, а не в самом файле, иначе они вернутся при следующей сборке.
- Проверьте снова, добейтесь зелёного статуса и отправьте карту в Google Search Console и Яндекс.Вебмастер повторно.
О том, как не допускать этих ошибок впредь, читайте в руководстве о лучших практиках ведения карты сайта.