Sitemap открывается, но не читается: как проверить XML и кодировку

Порядок проверки sitemap, который доступен по HTTP, но не обрабатывается поисковой системой: от фактического ответа до XML, кодировки и дочерних карт.

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&amp;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. Сопоставьте локальный результат с запросом робота

Когда файл проходит проверку, а панель вебмастера всё ещё показывает ошибку, сравните:

  1. Точный адрес проблемной карты, включая протокол и имя файла.
  2. Время последнего чтения в панели и время исправления с часовым поясом.
  3. Статус и объём ответа в журналах сервера и CDN в момент обращения.
  4. Правила защиты и версию кэша для этого URL.

Подмена User-Agent не подтверждает доступ настоящего поискового робота. Проверяйте реальные обращения по процедуре поисковой системы; не отключайте защиту целиком ради теста.

После исправления генератора очистите кэш только затронутой карты, повторно скачайте публичный ответ и отправьте карту на обработку через панель. Доступный и корректный sitemap не гарантирует индексацию всех страниц — это отдельная задача.

Что считать исправлением

Минимальный результат: публичный GET возвращает ожидаемый документ, XML разбирается без ошибок, структура и размер соответствуют формату, дочерние карты тоже исправны. Затем проверьте результат следующего чтения поисковой системой.

В Web-Puls можно регулярно контролировать доступность служебного URL и ожидаемый текст ответа. Такая проверка помогает заметить заглушку или сбой, но не заменяет XML-валидацию и отчёт поисковой системы.

Если ответ меняется между CMS, CDN и роботом и причина остаётся неясной, можно отправить заявку на диагностику. Укажите публичный URL, время сбоя, текст ошибки и обезличенный результат проверки; пароли и cookies не нужны.

Проверьте свой сайт прямо сейчас

Введите адрес сайта: Web-Puls покажет HTTP-код, время ответа и базовую диагностику. Для постоянного контроля можно подключить мониторинг.

Нужна помощь с диагностикой ошибки?

Опишите симптомы в короткой заявке: URL, код ответа, время появления и что менялось перед сбоем. Специалист поддержки оценит задачу и предложит формат работ.