Валидатор RSS-ленты

Проверим ленту так, как её видят читалки, агрегаторы и сервисы рассылок: синтаксис XML, обязательные элементы, форматы дат, кодировку, заголовки кэширования и то, соберётся ли из неё письмо. Без регистрации, за пару секунд.

Что проверяем

Не знаете адрес ленты — укажите адрес сайта: если в его коде есть ссылка <link rel="alternate">, мы найдём ленту сами. Поддерживаются RSS 2.0, RSS 1.0 (RDF), Atom 1.0 и JSON Feed.

Отчёт по ленте
Загрузка ленты
HTTP-ответ
Content-Type
Соответствие спецификации
Обязательные элементы
<pubDate>
Пригодность для RSS-рассылки
Картинки
Определение новых постов

Как работает валидатор

1

Забираем ленту

Запрашиваем адрес так же, как это делает читалка: смотрим код ответа, цепочку редиректов, Content-Type, сжатие и заголовки кэширования. Если по адресу оказалась обычная HTML-страница — сами находим ленту в её разметке.

2

Разбираем XML

Проверяем документ на well-formedness и показываем номер строки и столбца каждой синтаксической ошибки. Отдельно ловим BOM, мусор перед прологом и расхождение объявленной кодировки с фактической.

3

Сверяем со спецификацией

Определяем формат — RSS 2.0, RSS 1.0, Atom или JSON Feed — и прогоняем правила именно для него: обязательные элементы, форматы дат, идентификаторы записей, вложения. Итог — оценка от 0 до 100 и разбор по пунктам.

Что проверяет валидатор

Синтаксис XML

Незакрытые теги, недопустимые символы, необъявленные пространства имён, амперсанды без экранирования. Каждая ошибка — с точной строкой и столбцом, чтобы её можно было сразу найти в шаблоне.

Обязательные элементы

Для RSS 2.0 — title, link и description канала, содержимое у каждой записи, корректный guid. Для Atom — id, title и updated у ленты и каждой записи, автор, ссылки rel="self" и rel="alternate".

Форматы дат

Самая частая ошибка в лентах: ISO 8601 вместо RFC 822 в RSS. Проверяем каждый pubDate и updated, показываем номера проблемных записей и правильный вид даты для вашего формата.

Содержимое ленты

Дубликаты guid и ссылок, относительные URL, записи без заголовка, даты в будущем, нарушенный порядок от новых к старым, свежесть последней публикации, объём ленты.

Готовность к рассылке

Отдельный блок: соберётся ли из ленты письмо. Проверяем всё, из чего рассылка строит выпуск — заголовки, ссылки, описания, картинки в enclosure, content:encoded — и показываем, какие макросы шаблона заработают, а какие дадут пустоту.

Кэширование и транспорт

ETag и Last-Modified с реальной проверкой ответа 304, gzip-сжатие, HTTPS, корректность Content-Type, длина цепочки редиректов, размер ленты. Это то, что определяет нагрузку на ваш сервер от опроса читалками.

Частые вопросы

Чем это отличается от валидатора W3C?

Валидатор W3C проверяет синтаксис ленты — и делает это очень подробно. Но он ничего не знает о том, как лента ведёт себя в жизни: доступна ли она по HTTPS, отдаёт ли сервер 304 Not Modified, не уводит ли адрес по цепочке редиректов, как выглядят записи и соберётся ли из ленты письмо. Мы проверяем и синтаксис, и весь этот транспортный слой, а сверх того — пригодность ленты для email-рассылки, чего нет ни в одном валидаторе. Отчёт на русском, с объяснением каждой ошибки, а не только с номером строки.

Какие форматы поддерживаются?

RSS 2.0 (и старые ветки 0.91/0.92), RSS 1.0 на RDF, Atom 1.0 по RFC 4287, Atom 0.3 (с предупреждением об устаревании) и JSON Feed 1.0/1.1. Формат определяется автоматически по корневому элементу — указывать его руками не нужно. Правила проверки для каждого формата свои: в RSS даты должны быть в RFC 822, в Atom и JSON Feed — в RFC 3339, и валидатор не путает одно с другим.

Я не знаю адрес своей RSS-ленты. Что делать?

Укажите адрес сайта. Если по нему отдаётся HTML-страница, мы разберём её разметку и найдём в ней ссылку вида <link rel="alternate" type="application/rss+xml"> — именно так ленту находят браузерные расширения и читалки. Дальше проверка пойдёт уже по найденному адресу, и он будет виден в отчёте. Если такой ссылки на странице нет, валидатор об этом скажет: это само по себе проблема, из-за неё вашу ленту не найдут ни агрегаторы, ни подписчики.

Что за блок «Пригодность для RSS-рассылки»?

Сервисы email-рассылок умеют превращать новые записи ленты в письма — это называется RSS-кампания. Но их требования строже, чем спецификация RSS: например, картинку поста рассылка Dashamail берёт только из тега <enclosure type="image/…">, и если у вас изображения переданы через media:content или просто <img> внутри описания — в письме будет пустое место. То же с датами: неразобранный pubDate означает, что рассылка не поймёт, какие посты новые, и выпуск вообще не уйдёт. Этот блок показывает такие вещи заранее и перечисляет, какие макросы шаблона письма у вас заработают.

Почему важны ETag и Last-Modified?

Читалки и агрегаторы опрашивают ленту постоянно — от раза в час до нескольких раз в минуту, и делают это тысячи клиентов сразу. Если сервер отдаёт ETag или Last-Modified и корректно отвечает 304 Not Modified на условный запрос, при отсутствии новых записей передаётся несколько сотен байт вместо всей ленты. Без этого каждый опрос — полная выгрузка. Мы не просто смотрим наличие заголовков, а делаем повторный запрос и проверяем, что сервер действительно отвечает 304.

Как формируется оценка?

Старт — 100 баллов. Нарушения спецификации стоят дороже всего: отсутствующий обязательный элемент, неверный формат даты, неэкранированный HTML в описании, дубликаты идентификаторов. Дешевле — рекомендации и best practices: нет atom:link rel="self", нет guid, лента не сжимается, не отсортирована по убыванию даты. Проблемы с пригодностью для рассылки тоже снижают оценку. Вердикт: «валидна» — нарушений спецификации нет, «с замечаниями» — есть предупреждения, «невалидна» — есть ошибки, из-за которых лента сломается у части потребителей.

Можно ли проверить ленту, которая ещё не опубликована?

Да — переключитесь на вкладку «Вставить XML» и вставьте содержимое ленты целиком, до 2 МБ. Все проверки синтаксиса, спецификации, содержимого и пригодности для рассылки отработают точно так же. Пропустятся только те, для которых нужен живой HTTP-ответ: коды состояния, редиректы, Content-Type, сжатие и заголовки кэширования. Это удобно, когда лента ещё на стенде за авторизацией или генерируется скриптом.

Сколько хранится результат и какие ограничения?

Каждая проверка получает постоянную ссылку и хранится 24 часа — её удобно приложить к задаче для разработчика или отправить в поддержку CMS. Повторная проверка того же адреса в течение суток отдаёт результат из кэша мгновенно. Лимиты — 5 проверок в минуту и 30 в сутки с одного IP, размер загружаемой ленты — до 5 МБ, вставки — до 2 МБ. Приватные и служебные адреса (localhost, 10.x, 192.168.x и подобные) намеренно не проверяются.


Остались вопросы?

  • Сергей Шаульский Сергей

Спросите нас! Мы рады помочь вам с любой проблемой или вопросом.

Связаться с нами