When a client opens a product card via Turbo page and sees an empty block instead of a price – that's a conversion killer
According to our data, up to 40% of users leave the page if they don't see the price. On projects with catalogs of 10,000+ items, we've encountered this situation many times. The cause is almost always the same: the RSS feed was generated without considering Yandex's Turbo markup requirements. Let's break down how to configure correct Turbo page output for a product catalog on Bitrix.
Problems We Solve
Images not displaying: Yandex requires absolute URLs (with https://) inside <img src>. If the infoblock image is saved with a relative path, the Turbo page will have no photo. On one project, this reduced clickability by 30%.
No buy button: For the button, you need <a data-block="button" href="...">. Without it, the product becomes non-interactive.
Parsing errors: Common issues include incorrect HTML nesting inside CDATA or missing mandatory data-block attributes. Yandex shows the page without styling or refuses to index it.
Why Yandex Refuses to Index RSS
The main reason is non-compliance with the format. Yandex requires RSS 2.0 with the turbo: extension. As stated in official Yandex.Webmaster documentation, the 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="Turbo product page"> </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> The <menu> block is mandatory – it's the Turbo page navigation. The <figure> with an image is often forgotten, and Yandex does not show the picture. Our engineers check every tag through the Yandex validator before launch.
How We Set Up RSS Generation
We create a dedicated PHP script (e.g., /turbo-feed.xml) that selects active trade catalog items and forms an XML feed. The source code uses Bitrix components with CIBlockElement::GetList() and CCatalogProduct::GetOptimalPrice(). For a catalog of 200 items, without caching, each request generates 200 SQL queries; with an hour-long cache, only 1 query is needed.
// /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']; } // ... further item generation } Images: Absolute URLs Mandatory
Yandex does not accept relative paths. Helper function:
function absoluteImageUrl(string $src): string { if (strpos($src, 'http') === 0) return $src; return 'https://' . SITE_SERVER_NAME . $src; } Apply it to all DETAIL_PICTURE, PREVIEW_PICTURE, and images from the detailed description.
How to Speed Up Turbo Page Updates
Use tagged RSS caching. Without cache, every request regenerates the feed, causing 200 SQL queries for 200 items. An hour-long cache reduces load 3600 times. Implement an agent to clear the cache on product update via OnAfterIBlockElementUpdate events. Our projects show this approach pays off on catalogs from 500 items.
$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; More on item generation
For each product, an item block with mandatory elements is formed. Correct currency and price type is important. We use `CCatalogProduct::GetOptimalPrice` for actual price with discounts. If no price type is set, the base price is taken by default.Comparison: Turbo Pages vs Regular Mobile Version
| Parameter | Turbo Page | Regular Mobile Version |
|---|---|---|
| Load speed | < 1 sec | 2-5 sec |
| Server load | Minimal (cache + Yandex servers) | Medium (depends on hosting) |
| Markup | Limited tag set | Full HTML+CSS |
| Indexing | Separate Yandex search results | Standard search |
| Ease of implementation | RSS + Webmaster | Responsive template |
Turbo pages are 2–5 times faster and achieve up to 3 times higher conversion than standard mobile pages. For an e-commerce store with heavy mobile traffic, it's a must-have.
Typical Errors and Solutions
| Error | Cause | Solution |
|---|---|---|
| No image | Relative URL in <img src> |
Convert to absolute with helper function |
| No buy button | Missing <a data-block="button"> |
Add element with attribute |
| Validation error | Wrong CDATA nesting | Check via Yandex.Turbo documentation |
Process and Guarantees
Our process includes: Turbo catalog audit – check infoblock structure, price types, images, alt attributes; RSS generator design – select fields, format, caching; Development – write component, handle images, prices, buttons; Testing – validate via Yandex.Webmaster, check all product types; Launch and monitoring – add RSS, review Turbo page analytics in Webmaster. We've been developing on Bitrix for over 7 years, implemented 50+ projects with Turbo pages. We guarantee correct RSS feed operation and passing Yandex validation during the warranty period. The setup pays off through reduced server load and a 10-15% conversion increase. Basic setup starts at $350 and takes 2 to 5 days. If infoblock modifications or 1C integration are needed, time increases. Order Turbo pages setup and get a ready RSS feed in 2 days. Contact us for a project assessment.







