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 — зв'яжіться з нами, оцінимо ваш проєкт і запропонуємо дорожню карту. Наша команда готова налаштувати стрічку під ваш проєкт — звертайтеся за консультацією.







