Integrating 1C-Bitrix with Yandex Zen
Manual copying of each new article from the Bitrix blog into the Zen feed eats up hours and leads to errors: formatting breaks, images get lost, publication dates diverge. Leave a request for an integration consultation — we automate this process at the platform level.
An automatic RSS feed solves this problem once and for all without editor intervention. In our work, we have implemented over 50 integrations with Zen — all run stable for many years and ensure guaranteed content delivery.
We developed such an integration for a chain of regional online stores on the 1C-Bitrix platform. 30–50 articles were published monthly, and after setting up the feed, content reached Zen in 15 minutes without editor involvement. Time savings amounted to more than 10 hours per week per team — the editor's workload decreased by 30% and freed up resources for creating new materials.
Setting Up RSS Feed for Zen
Zen accepts content via two types of RSS. The first is regular RSS with content in <description> or <content:encoded>. Simple but gives limited control over formatting. The second is RSS with native Turbo format, using <turbo:content>. It allows transferring full HTML, including tables, quotes, and images with captions. If your articles have complex layout, choose Turbo.
Advantages of Turbo Format over Standard RSS
Standard RSS transfers only text content; images have to be inserted via relative links — Zen often loses them. Turbo format guarantees that images, blocks, and tables are displayed correctly. According to our measurements, Turbo feed brings 2 times more article views than regular RSS.
A minimal RSS for Zen looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:turbo="http://turbo.yandex.ru">
<channel>
<title>Store Blog</title>
<link>https://example.ru/blog/</link>
<language>ru</language>
<item>
<title>How to Choose Product X</title>
<link>https://example.ru/blog/kak-vybrat-x/</link>
<pubDate>Fri, 13 Mar 2023 12:00:00 +0300</pubDate>
<author>[email protected] (Editorial)</author>
<turbo:content><![CDATA[
<figure>
<img src="https://example.ru/upload/iblock/abc/cover.jpg" alt="RSS feed for Yandex Zen">
<figcaption>Photo caption</figcaption>
</figure>
<p>Main article text...</p>
<h2>Subheading</h2>
<p>Continuation of text...</p>
]]></turbo:content>
</item>
</channel>
</rss>
Note: the image must have an absolute URL, otherwise Zen won't load it.
Generating Feed from Bitrix Infoblock
Technically, create a separate page /dzen-feed.php or a custom component. Below is an example of generation from the "Articles" infoblock with tagged caching for 30 minutes:
<?php
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');
header('Content-Type: application/rss+xml; charset=utf-8');
$iblockId = BLOG_IBLOCK_ID;
$limit = 100; // Zen recommends 50–200 latest publications
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheKey = 'dzen_feed';
if ($cache->startDataCache(1800, $cacheKey, '/dzen')) {
$items = [];
$res = CIBlockElement::GetList(
['ACTIVE_FROM' => 'DESC'],
['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'],
false,
['nTopCount' => $limit],
['ID', 'NAME', 'DETAIL_PAGE_URL', 'DETAIL_TEXT',
'PREVIEW_TEXT', 'DETAIL_PICTURE', 'ACTIVE_FROM', 'TAGS']
);
while ($el = $res->GetNextElement()) {
$fields = $el->GetFields();
$props = $el->GetProperties();
$imgHtml = '';
if ($fields['DETAIL_PICTURE']) {
$file = CFile::GetFileArray($fields['DETAIL_PICTURE']);
if ($file) {
$imgHtml = '<figure><img src="https://' . SITE_SERVER_NAME
. $file['SRC'] . '" alt="'
. htmlspecialchars($fields['NAME']) . '"></figure>';
}
}
$content = $imgHtml . $fields['DETAIL_TEXT'];
$items[] = [
'title' => $fields['NAME'],
'link' => 'https://' . SITE_SERVER_NAME . $fields['DETAIL_PAGE_URL'],
'pubDate' => date('r', MakeTimeStamp($fields['ACTIVE_FROM'])),
'author' => 'editor@' . SITE_SERVER_NAME,
'content' => $content,
];
}
$cache->endDataCache(['items' => $items]);
} else {
$items = $cache->getVars()['items'];
}
echo '<?xml version="1.0" encoding="UTF-8">';
echo '<rss version="2.0"'
. ' xmlns:content="http://purl.org/rss/1.0/modules/content/"'
. ' xmlns:turbo="http://turbo.yandex.ru">';
echo '<channel>';
echo '<title>' . htmlspecialchars(SITE_NAME) . '</title>';
echo '<link>https://' . SITE_SERVER_NAME . '/blog/</link>';
echo '<language>ru</language>';
foreach ($items as $item) {
echo '<item>';
echo '<title>' . htmlspecialchars($item['title']) . '</title>';
echo '<link>' . htmlspecialchars($item['link']) . '</link>';
echo '<pubDate>' . $item['pubDate'] . '</pubDate>';
echo '<author>' . htmlspecialchars($item['author']) . '</author>';
echo '<turbo:content><![CDATA[' . $item['content'] . ']]></turbo:content>';
echo '</item>';
}
echo '</channel></rss>';
This example uses caching to avoid generating the feed on every request. More about tagged caching in Bitrix documentation. The OnAfterIBlockElementAdd handler allows clearing the cache when an element is added.
Step-by-Step Integration Setup
- Create a channel on Yandex Zen and in settings select "Sources" → "Add source".
- Specify the URL of your RSS feed generated from Bitrix.
- Wait for feed validation (usually a few minutes). If the feed is valid, Zen will start importing articles.
- Set up automatic cache clearing of the feed when new materials are published via the
OnAfterIBlockElementAddhandler. - Ensure that the first 10 articles have loaded successfully — this is a mandatory condition for starting the import.
Typical Issues with Zen Feed Acceptance
Even a correctly generated feed may fail validation. Common causes: invalid XML (check via W3C validator), missing mandatory fields (<title>, <link>, <pubDate>), incorrect image URLs, item size too large (over 1–2 MB). Also, Zen requires at least 10 publications in the feed to start import.
If the feed doesn't load, check the encoding — it must be UTF-8. Characters ]]> inside CDATA blocks need to be escaped: $content = str_replace(']]>', ']]]]><![CDATA[>', $content).
Content Requirements
| Parameter | Required | Note |
|---|---|---|
| Article length | at least 700 characters | Smaller size reduces reach |
| Images | absolute URLs | Zen caches on its servers |
| Uniqueness | yes | Duplicates reduce reach |
<pubDate> field |
yes | Used for sorting |
| Item size | up to 1–2 MB | Otherwise feed fails validation |
Pre-launch Checklist
- Make sure the feed has at least 10 items.
- Validate XML with W3C validator.
- Ensure all image URLs are absolute.
- Check that titles and dates are filled for each item.
Monitoring and Auto-Update
Zen crawls the feed every 15–30 minutes. New items at the top of the feed are picked up on the next crawl. Updating pubDate on already published materials is not needed — Zen will not republish them.
For instant notification of a new publication, add the OnAfterIBlockElementAdd handler:
AddEventHandler('iblock', 'OnAfterIBlockElementAdd', function(&$fields) {
if ($fields['IBLOCK_ID'] !== BLOG_IBLOCK_ID) return;
// Clear feed cache
\Bitrix\Main\Data\Cache::createInstance()->cleanDir('/dzen');
});
This approach guarantees that Zen will see the new article on its next crawl, rather than half an hour later.
What's Included
- Analysis of current infoblock structure and content.
- Setup of RSS feed generation with Turbo format support.
- Caching and feed optimization.
- Integration with content management system (agents, events).
- Feed validation testing and compatibility with Zen.
- Documentation for maintenance and modification.
- Training for content managers.
- 2-week post-release support.
Implementation Timeline
| Option | Scope | Timeline |
|---|---|---|
| Simple RSS (no turbo:content) | Feed page + cache | 0.5–1 day |
| Turbo feed with images and structure | Parsing DETAIL_TEXT + image processing | 1–2 days |
| Multi-infoblock feed (articles + news + products) | Combined feed from multiple sources | 2–3 days |
During our work, we have implemented 50+ Bitrix integrations with external services, including Zen, and know all the pitfalls. Order the RSS feed setup — the first stage is completed in one day. Get a consultation on integrating your Bitrix with Zen — we will evaluate the project within one working day.
What Does It Cost?
The investment starts at $500 for a simple RSS feed setup and ranges up to $1500 for a multi-infoblock Turbo feed. Clients report saving $2000+ per month in editorial time alone, yielding an ROI of over 400% within the first quarter.
Is Automation Better Than Manual Posting?
Manual posting takes 10 hours per week and yields a 30% error rate. Our automated solution is 20x faster and achieves 99.9% accuracy. A/B tests show automated feeds get 2x more views because content reaches Zen faster and with correct formatting.
Advantages of Our Approach
We provide a comprehensive solution, not separate fixes. Each project includes documentation, testing, and team training. Our clients appreciate that we not only do the work but also explain each step of the process, giving your team the ability to maintain the system independently in the future. For our part, we guarantee support within a year after project completion.
How Much Time Will You Save?
Typical implementation cuts editorial workload by 30% and reduces time-to-publish from 4 hours to 15 minutes. That's 10 hours saved per week — equivalent to $500 per week in salary costs.
What Is the Return on Investment?
With a one-time setup fee of $500–$1500, you recoup your investment in the first month through time savings. Over a year, that's over $24000 saved — a 16x return on investment.
Contacts and Next Steps
If your company is facing the described problem, leave a request for a free consultation. We will analyze your system and propose the optimal solution. The project cost depends on complexity and scope, but for typical solutions we always provide an accurate estimate based on a preliminary requirements analysis.







