Налаштування Яндекс.Турбо-сторінок для 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.







