Sitemap открывается в браузере, но поисковая система сообщает об ошибке чтения? Сначала скачайте фактическое тело ответа без входа на сайт, затем проверьте XML-парсером именно этот файл. Код 200 подтверждает успешный HTTP-ответ, но не правильность карты.
Для владельца сайта и вебмастера порядок такой: исключить HTML-заглушку, найти ошибку XML и кодировки, проверить размер и дочерние карты, затем сопоставить результат с последним обращением робота. Так можно отделить поломку генератора от проблемы доставки.
1. Получите файл, который действительно отдаёт сервер
В браузере с активной сессией администратора ответ может отличаться от публичного. Откройте адрес без авторизации; если доступна командная строка, выполните GET-запрос к своей публичной карте:
curl -sS -L --max-redirs 5 --max-time 30 --compressed \
-D sitemap-headers.txt -o sitemap-body.xml \
-w 'HTTP: %{http_code}\nURL: %{url_effective}\n' \
https://example.com/sitemap.xml
Здесь example.com — условный адрес: замените его своим доменом. Команда сохраняет заголовки и тело в текущую папку; ограничение времени и числа переходов нужно только для этой диагностической попытки.
Проверьте конечный адрес, последний блок заголовков и начало файла. Страница входа, капча или HTML с ошибкой вместо карты указывают на маршрут CMS, защиту или прокси; переименование такого ответа в .xml ничего не исправит.
Content-Type должен соответствовать выдаваемому XML, но сам заголовок не доказывает корректность тела. Если запрос завершился ошибкой curl, сначала разберите доставку; порядок проверок для недоступного URL есть в отдельном руководстве по robots.txt и sitemap.xml.
2. Найдите точное место поломки XML
Если установлен xmllint, проверьте скачанный файл локально:
xmllint --nonet --noout sitemap-body.xml
Не включайте подстановку внешних сущностей. Сообщение парсера с номером строки помогает найти дефект; успешная проверка означает синтаксически правильный XML, но ещё не соответствие протоколу Sitemap.
Амперсанд, теги и посторонний вывод
В значениях XML символ & нужно экранировать. Например, условный адрес с параметрами внутри loc выглядит так:
<loc>https://example.com/catalog?a=1&b=2</loc>
Незакрытый тег, неэкранированный символ или служебное предупреждение приложения могут ломать разбор всего документа. Исправляйте сериализацию в генераторе, а не каждую выгрузку вручную; иначе следующая генерация вернёт ошибку.
Кодировка и структура документа
По протоколу Sitemap файл должен быть в UTF-8. Смена надписи encoding на UTF-8 не перекодирует байты: проверьте фактическую кодировку выгрузки, особенно если сбой появился после добавления названий с кириллицей.
Для списка страниц нужен корневой urlset с пространством имён http://www.sitemaps.org/schemas/sitemap/0.9, внутри — url и loc. Для индекса карт нужен sitemapindex с элементами sitemap и loc; не смешивайте эти структуры. Если есть XML-декларация, она должна стоять в начале документа: уберите предшествующий вывод шаблона или отладчика.
3. Проверьте размер и каждую дочернюю карту
По документации Google одна карта ограничена 50 000 URL и 50 МБ в несжатом виде. Большую выгрузку разбивают на части и перечисляют в индексе; маленький архив сам по себе не подтверждает соблюдение лимита после распаковки.
Если основной файл содержит sitemapindex, скачайте каждый указанный в нём файл и повторите проверку тела и XML. Исправный индекс не доказывает, что карта товаров сформировалась до конца: ищите оборванный документ, пустую выдачу или ошибку приложения в конкретной части.
Отдельно проверьте .gz, если используете такой формат: архив должен распаковываться в ожидаемый XML. Не путайте gzip-файл карты с HTTP-сжатием ответа; неверный Content-Encoding требует проверки конфигурации сервера или CDN.
4. Сопоставьте локальный результат с запросом робота
Когда файл проходит проверку, а панель вебмастера всё ещё показывает ошибку, сравните:
- Точный адрес проблемной карты, включая протокол и имя файла.
- Время последнего чтения в панели и время исправления с часовым поясом.
- Статус и объём ответа в журналах сервера и CDN в момент обращения.
- Правила защиты и версию кэша для этого URL.
Подмена User-Agent не подтверждает доступ настоящего поискового робота. Проверяйте реальные обращения по процедуре поисковой системы; не отключайте защиту целиком ради теста.
После исправления генератора очистите кэш только затронутой карты, повторно скачайте публичный ответ и отправьте карту на обработку через панель. Доступный и корректный sitemap не гарантирует индексацию всех страниц — это отдельная задача.
Что считать исправлением
Минимальный результат: публичный GET возвращает ожидаемый документ, XML разбирается без ошибок, структура и размер соответствуют формату, дочерние карты тоже исправны. Затем проверьте результат следующего чтения поисковой системой.
В Web-Puls можно регулярно контролировать доступность служебного URL и ожидаемый текст ответа. Такая проверка помогает заметить заглушку или сбой, но не заменяет XML-валидацию и отчёт поисковой системы.
Если ответ меняется между CMS, CDN и роботом и причина остаётся неясной, можно отправить заявку на диагностику. Укажите публичный URL, время сбоя, текст ошибки и обезличенный результат проверки; пароли и cookies не нужны.