Configuring Yandex Turbo Pages for 1C-Bitrix
Yandex Turbo pages are served from Yandex servers — this speeds up loading on mobile devices with slow internet. For an online store on Bitrix, this means Yandex must receive an RSS feed with Turbo markup and correctly parse the catalog structure. Main problem: RSS is generated without considering product images and structured data, and Yandex either denies connection or shows a "raw" page without formatting.
RSS Format for Turbo Pages
Yandex requires RSS 2.0 with the turbo: extension. Minimum set of fields for a product card:
<item turbo="true">
<link>https://example.com/catalog/product/</link>
<turbo:content><![CDATA[
<header>
<h1>Product Name</h1>
<menu>
<item url="/catalog/">Catalog</item>
<item url="/catalog/section/">Section</item>
</menu>
</header>
<figure>
<img src="https://example.com/upload/iblock/xxx/photo.jpg" alt="Photo">
</figure>
<p>Product description</p>
<div data-block="price">
<span data-value="price">5990</span>
<span data-value="currency">RUB</span>
<a data-block="button" href="/cart/?add=ID">Buy</a>
</div>
]]></turbo:content>
</item>
RSS Generation in Bitrix
A custom component or URL handler is created. Optimal — separate /turbo-feed.xml page with a component that selects infoblock elements and generates XML.
// /turbo-feed.xml
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', false);
header('Content-Type: application/rss+xml; charset=utf-8');
$res = \CIBlockElement::GetList(
['TIMESTAMP_X' => 'DESC'],
['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'],
false,
['nTopCount' => 200],
['ID', 'NAME', 'DETAIL_PAGE_URL', 'DETAIL_TEXT', 'DETAIL_PICTURE',
'PREVIEW_TEXT', 'TIMESTAMP_X', 'IBLOCK_SECTION_ID']
);
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<rss xmlns:yandex="http://news.yandex.ru" xmlns:turbo="http://turbo.yandex.ru" version="2.0">';
echo '<channel>';
echo '<title>Product Catalog</title>';
echo '<link>' . SITE_SERVER_NAME . '</link>';
while ($el = $res->GetNextElement()) {
$fields = $el->GetFields();
$price = \CCatalogProduct::GetOptimalPrice($fields['ID']);
$imgSrc = '';
if ($fields['DETAIL_PICTURE']) {
$img = \CFile::GetFileArray($fields['DETAIL_PICTURE']);
$imgSrc = 'https://' . SITE_SERVER_NAME . $img['SRC'];
}
// ... forming item
}
Images: Absolute URLs Mandatory
Yandex does not accept relative paths in <img src> inside turbo:content. All images must have full URLs with protocol and domain. Helper function:
function absoluteImageUrl(string $src): string {
if (strpos($src, 'http') === 0) return $src;
return 'https://' . SITE_SERVER_NAME . $src;
}
RSS Feed Caching
RSS from 200 products on each request — significant load. Cache via Bitrix file cache:
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->startDataCache(3600, 'turbo_feed', '/turbo')) {
// RSS generation
$xmlContent = generateFeed();
$cache->endDataCache(['xml' => $xmlContent]);
} else {
$xmlContent = $cache->getVars()['xml'];
}
echo $xmlContent;
On product update — clear via tag iblock_id_ + infoblock ID.
Connecting in Yandex Webmaster
After configuring the feed — add the URL to "Yandex Webmaster → Turbo Pages → RSS Channels." Yandex crawls the feed with up to 24-hour delay. Check via "Check Page" tool — it will show how Yandex sees each item and if there are markup errors. Typical errors: missing required data-block="price" attributes, non-absolute image URLs, HTML tags not in CDATA.







