Налаштування RSS-стрічки 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування RSS-стрічки 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування RSS-стрічки 1С-Bitrix

RSS залишається актуальним форматом для агрегаторів новин, моніторингових сервісів та синдикації контенту. Bitrix генерує 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>

Додати namespace для content до елемента <channel>:

<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. Bitrix повертає дату в форматі d.m.Y H:i:s. У шаблоні компонента:

// Конвертація дати Bitrix у 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> у заголовку каналу.