Настройка Яндекс.Турбо-страниц для 1С-Битрикс
Яндекс.Турбо-страницы отдаются пользователю с серверов Яндекса — это ускоряет загрузку на мобильных устройствах с медленным интернетом. Для интернет-магазина на Битриксе это означает, что Яндекс должен получить RSS-ленту с разметкой Турбо и корректно парсить структуру каталога. Главная проблема: RSS генерируется без учёта изображений товаров и структурированных данных, и Яндекс либо отказывает в подключении, либо показывает «сырую» страницу без оформления.
Формат RSS для Турбо-страниц
Яндекс требует RSS 2.0 с расширением turbo:. Минимальный набор полей для карточки товара:
<item turbo="true">
<link>https://example.com/catalog/product/</link>
<turbo:content><![CDATA[
<header>
<h1>Название товара</h1>
<menu>
<item url="/catalog/">Каталог</item>
<item url="/catalog/section/">Раздел</item>
</menu>
</header>
<figure>
<img src="https://example.com/upload/iblock/xxx/photo.jpg" alt="Фото">
</figure>
<p>Описание товара</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">Купить</a>
</div>
]]></turbo:content>
</item>
Генерация RSS в Битриксе
Создаётся кастомный компонент или обработчик URL. Оптимально — отдельная страница /turbo-feed.xml с компонентом, который выбирает элементы инфоблока и генерирует 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>Каталог товаров</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'];
}
// ... формирование item
}
Изображения: абсолютные URL обязательны
Яндекс не принимает относительные пути в <img src> внутри turbo:content. Все изображения должны иметь полный URL с протоколом и доменом. Функция-помощник:
function absoluteImageUrl(string $src): string {
if (strpos($src, 'http') === 0) return $src;
return 'https://' . SITE_SERVER_NAME . $src;
}
Кеширование RSS-ленты
RSS из 200 товаров на каждый запрос — это значительная нагрузка. Кешировать через файловый кеш Битрикса:
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->startDataCache(3600, 'turbo_feed', '/turbo')) {
// генерация RSS
$xmlContent = generateFeed();
$cache->endDataCache(['xml' => $xmlContent]);
} else {
$xmlContent = $cache->getVars()['xml'];
}
echo $xmlContent;
При обновлении товара — сброс через тег iblock_id_ + ID инфоблока.
Подключение в Яндекс.Вебмастере
После настройки ленты — добавить URL в «Яндекс.Вебмастер → Турбо-страницы → RSS-каналы». Яндекс обходит ленту с задержкой до 24 часов. Проверить через инструмент «Проверить страницу» — он покажет, как Яндекс видит каждый item и есть ли ошибки в разметке. Типичные ошибки: отсутствие обязательных атрибутов data-block="price", неабсолютные URL изображений, HTML-теги не в CDATA.







