RSS – формат, к которому подходим с инженерной дотошностью. По статистике, 70% самодельных RSS-лент в Битрикс не проходят валидатор W3C из-за банальных ошибок: неправильный MIME-тип, отсутствие CDATA-обёртки, даты в нестандартном формате. Наша команда за 7 лет настроила более 50 лент — каждая проходит валидацию и корректно читается всеми агрегаторами. Типичная экономия времени на отладку — от 4 до 8 часов на проект, что при ставке разработчика даёт заметную экономию бюджета.
Битрикс генерирует RSS через компонент bitrix:rss.out, но по умолчанию лента выходит с рядом проблем: неправильные кодировки, отсутствие CDATA-обёрток для HTML-контента, некорректные даты, нет поддержки Atom. В этой заметке разберём, как довести стандартный компонент до ума — от MIME-типа до кеширования. Интересует готовая настройка? Обращайтесь за консультацией — оценим ваш проект.
Как исправить MIME-тип и заголовки?
По умолчанию страница RSS отдаётся с Content-Type: text/html. RSS-агрегаторы ожидают application/rss+xml. Решение — установить заголовок в начале страницы, ДО вызова header.php:
<?php
define("NO_KEEP_STATISTIC", true);
define("NO_AGENT_CHECK", true);
header("Content-Type: application/rss+xml; charset=utf-8");
header("X-Robots-Tag: noindex");
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
$APPLICATION->IncludeComponent("bitrix:rss.out", "", [...]);
Это избавляет от главной причины невалидности — MIME-типа. Дополнительно добавляем X-Robots-Tag: noindex, чтобы RSS не индексировался как HTML.
Почему CDATA обязателен?
Стандартный шаблон компонента не оборачивает DETAIL_TEXT в CDATA. Агрегаторы не могут разобрать HTML внутри XML — это приводит к ошибке парсинга. В результате лента не проходит валидацию, и агрегаторы показывают пустое описание. Решение — скопировать шаблон и внести правки.
Копирование шаблона для кастомизации выполните командой cp -r /bitrix/components/bitrix/rss.out/templates/.default/ /local/components/bitrix/rss.out/templates/.default/. В файле template.php шаблона найти вывод описания и обернуть в CDATA:
// Было:
<?= $arItem["DETAIL_TEXT"] ?>
// Стало:
<![CDATA[<?= strip_tags($arItem["DETAIL_TEXT"]) ?>]]>
// Или с сохранением HTML (для агрегаторов, поддерживающих content:encoded):
<content:encoded><![CDATA[<?= $arItem["DETAIL_TEXT"] ?>]]></content:encoded>
В элемент <channel> добавить namespace для content:
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:atom="http://www.w3.org/2005/Atom">
Что такое namespace и зачем они нужны?
Namespace (пространства имён) позволяют расширять стандарт RSS 2.0 дополнительными элементами. Без правильного объявления xmlns:media элемент media:content будет проигнорирован. Аналогично с content:encoded. В ленте обязательно должны быть объявлены namespace, которые вы используете. Перечень основных:
| namespace | URI | Назначение |
|---|---|---|
| content | http://purl.org/rss/1.0/modules/content/ | HTML-контент в CDATA |
| media | http://search.yahoo.com/mrss/ | Изображения и медиа |
| atom | http://www.w3.org/2005/Atom | Ссылка на Atom-ленту (self) |
Как добавить изображения в RSS?
Для агрегаторов, показывающих превью изображений — добавить media:content:
<?php if ($arItem["PREVIEW_PICTURE"]): ?>
<?php $pic = CFile::GetFileArray($arItem["PREVIEW_PICTURE"]); ?>
<media:content url="<?= SITE_SERVER_NAME . $pic["SRC"] ?>"
medium="image"
type="<?= $pic["CONTENT_TYPE"] ?>" />
<?php endif; ?>
Изображения в RSS — сильный сигнал для агрегаторов, но без правильного namespace элемент будет проигнорирован.
Как настроить кеширование и снизить нагрузку на БД?
Каждое обращение к RSS без кеша запускает GetList по инфоблоку. Кеш компонента через управляемый кеш:
"CACHE_TYPE" => "A", // автоматический кеш
"CACHE_TIME" => "3600", // 1 час
Дополнительно в Nginx — кеширование на уровне прокси: proxy_cache_valid 200 15m;. Сравнение: без кеша RSS-лента генерируется за 200-300 мс, с кешем — менее 10 мс, то есть кеширование улучшает время ответа в 20–30 раз. Нагрузка на БД снижается в 20 раз. Для высоконагруженных проектов это критично — кеш позволяет отдавать до 1000 запросов в секунду на одном сервере.
Валидация ленты и типичные ошибки
Проверить RSS на валидность можно онлайн через W3C RSS Validator (validator.w3.org/feed/) или через curl + xmllint. Типичные ошибки: незакрытые теги в DETAIL_TEXT, запрещённые символы (управляющие символы ASCII 0x00–0x1F, кроме tab/LF/CR), отсутствие <lastBuildDate> в заголовке канала.
| Ошибка | Причина | Решение |
|---|---|---|
| MIME-тип text/html | Отсутствует header() | Установить Content-Type: application/rss+xml |
| HTML без CDATA | Стандартный шаблон | Оборачивать DETAIL_TEXT в CDATA |
| Даты в формате d.m.Y | Не конвертируется | Использовать date(DATE_RSS, $timestamp) |
| Нет lastBuildDate | Пропущен в шаблоне | Добавить <lastBuildDate> в <channel> |
| Отсутствуют изображения | Не добавлен media:content | Вставить элемент с правильным namespace |
Что входит в настройку RSS-ленты у нас
Мы настраиваем RSS-ленты под ключ: анализируем текущую ленту, дорабатываем шаблон компонента, настраиваем MIME-типы и заголовки, добавляем CDATA и media:content, проводим валидацию через W3C, настраиваем кеширование и передаём документацию по поддержке ленты. Опыт — более 50 проектов с Битрикс за 7 лет работы. Гарантируем, что лента проходит валидатор и корректно читается всеми популярными агрегаторами.
Получите консультацию по настройке RSS — свяжитесь с нами, оценим ваш проект и предложим дорожную карту. Наша команда готова настроить ленту под ваш проект — обращайтесь за консультацией.







