Настройка RSS-ленты 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка RSS-ленты 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка RSS-ленты 1С-Битрикс

RSS остаётся актуальным форматом для агрегаторов новостей, мониторинговых сервисов и синдикации контента. Битрикс генерирует RSS через компонент bitrix:rss.out, но по умолчанию лента выходит с рядом проблем: неправильные кодировки, отсутствие CDATA-обёрток для HTML-контента, некорректные даты, нет поддержки Atom.

Встроенный компонент RSS

Компонент bitrix:rss.out доступен в «Контент» → «RSS-лента» в визуальном редакторе страниц. Страница RSS обычно располагается по пути /rss.php или /news/rss/.

Минимальный код страницы RSS:

<?php
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$APPLICATION->SetPageProperty("robots", "noindex");

$APPLICATION->IncludeComponent(
    "bitrix:rss.out",
    "",
    [
        "IBLOCK_TYPE" => "news",
        "IBLOCK_ID" => "3",
        "SECTION_ID" => "",
        "SECTION_CODE" => "",
        "FIELD_IMAGE" => "Y",
        "ELEMENT_COUNT" => "20",
        "SORT_FIELD" => "ACTIVE_FROM",
        "SORT_ORDER" => "DESC",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "360",
        "SET_TITLE" => "N",
        "CHARSET" => "utf-8"
    ]
);

require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php");

Проблема с 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");

// Компонент без header.php и footer.php
$APPLICATION->IncludeComponent("bitrix:rss.out", "", [...]);

Настройка шаблона RSS для HTML-контента

Стандартный шаблон компонента не оборачивает DETAIL_TEXT в CDATA. Агрегаторы не могут разобрать HTML внутри XML. Копировать шаблон для кастомизации:

cp -r /var/www/bitrix/bitrix/components/bitrix/rss.out/templates/.default/ \
      /var/www/bitrix/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">

Корректный формат дат

RSS требует дату в формате RFC 2822: Mon, 15 Mar 2024 12:00:00 +0300. Битрикс отдаёт дату в формате d.m.Y H:i:s. В шаблоне компонента:

// Конвертация даты Битрикс в RFC 2822
$bitrixDate = $arItem["ACTIVE_FROM"]; // "15.03.2024 12:00:00"
$timestamp = MakeTimeStamp($bitrixDate, "DD.MM.YYYY HH:MI:SS");
$rfc2822Date = date(DATE_RSS, $timestamp);

RSS с изображениями (media:content)

Для агрегаторов, показывающих превью изображений — добавить media:content:

<!-- namespace в <rss>: xmlns:media="http://search.yahoo.com/mrss/" -->

<?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

Каждое обращение к RSS без кеша запускает GetList по инфоблоку. Кеш компонента через управляемый кеш:

"CACHE_TYPE" => "A",     // автоматический кеш
"CACHE_TIME" => "3600",  // 1 час

Дополнительно в Nginx — кеширование на уровне прокси:

location ~* /rss(\.php)?$ {
    proxy_cache_valid 200 15m;
    add_header X-Cache-Status $upstream_cache_status;
}

Валидация ленты

Проверить RSS на валидность:

# Через curl + xmllint
curl -s https://example.ru/rss/ | xmllint --noout -

# Или онлайн: https://validator.w3.org/feed/

Типичные ошибки: незакрытые теги в DETAIL_TEXT, запрещённые символы (управляющие символы ASCII 0x00–0x1F, кроме tab/LF/CR), отсутствие <lastBuildDate> в заголовке канала.