Настройка фида для Яндекс.Маркет (товарная реклама) 1С-Битрикс
Яндекс.Маркет принимает фид в формате YML (Yandex Market Language) — XML со своей схемой. В Битрикс есть встроенный модуль YML-экспорта, но для товарной рекламы (Performance) требования к полноте данных выше, чем для простого листинга. Неполный фид — значит часть товаров не попадает в рекламу, а Google Shopping-like кампании работают хуже из-за отсутствия атрибутов.
Формат YML для Яндекс.Маркет
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-01-15 10:00">
<shop>
<name>Название магазина</name>
<company>ООО «Компания»</company>
<url>https://your-site.ru</url>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<category id="1">Электроника</category>
<category id="2" parentId="1">Смартфоны</category>
</categories>
<offers>
<offer id="123" available="true">
<url>https://your-site.ru/catalog/product-123/</url>
<price>14990</price>
<oldprice>17990</oldprice>
<currencyId>RUR</currencyId>
<categoryId>2</categoryId>
<picture>https://your-site.ru/upload/img/product-123.jpg</picture>
<name>Смартфон BrandName Model X 128GB</name>
<vendor>BrandName</vendor>
<vendorCode>MODEL-X-128</vendorCode>
<barcode>4607086560001</barcode>
<description>Описание товара</description>
<sales_notes>Доставка от 290 руб., самовывоз бесплатно</sales_notes>
<param name="Память">128 ГБ</param>
<param name="Цвет">Чёрный</param>
<param name="Гарантия">12 месяцев</param>
</offer>
</offers>
</shop>
</yml_catalog>
Встроенный YML-экспорт Битрикс
В административной панели: Каталог → Экспорт → Добавить профиль → Яндекс.Маркет (YML).
Настройки профиля:
- Выбор инфоблока каталога
- Маппинг свойств:
BRAND → vendor,ARTICLE → vendorCode,BARCODE → barcode - Фильтр: только активные товары с ненулевым остатком
- Путь файла:
/upload/yandex_market.yml
Стандартный экспорт не умеет корректно выгружать <param> из свойств инфоблока без доработки. Параметры товара (Память, Цвет, Размер) критичны для товарной рекламы — по ним Яндекс матчит запросы.
Доработка экспорта: добавление <param> из свойств
// /local/php_interface/init.php — хук на генерацию строки оффера
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'catalog',
'OnGetYmlOfferXml',
function (\Bitrix\Main\Event $event) {
$offer = $event->getParameter('OFFER');
$xml = $event->getParameter('XML');
// Добавляем параметры из свойств инфоблока
$paramProps = ['COLOR' => 'Цвет', 'MEMORY' => 'Память', 'SCREEN_SIZE' => 'Диагональ экрана'];
foreach ($paramProps as $propCode => $paramName) {
if (!empty($offer['PROPERTIES'][$propCode]['VALUE'])) {
$xml .= sprintf(
'<param name="%s">%s</param>',
htmlspecialchars($paramName),
htmlspecialchars($offer['PROPERTIES'][$propCode]['VALUE'])
);
}
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
['XML' => $xml]
);
}
);
Кастомный генератор YML-фида
Если стандартный экспорт не устраивает — полностью кастомный генератор:
// /local/cron/yandex_market_feed.php
$categories = getIblockSections($IBLOCK_ID);
$tmpFile = tempnam(sys_get_temp_dir(), 'yml_');
$xml = new XMLWriter();
$xml->openUri($tmpFile);
$xml->startDocument('1.0', 'UTF-8');
// ... генерация структуры yml_catalog
Генерацию больших каталогов (>50K товаров) делаем через XMLWriter с потоковой записью — не накапливаем DOM в памяти.
Частые ошибки при загрузке фида
-
Неверный формат даты в yml_catalog— дата должна быть в форматеYYYY-MM-DD HH:MM -
Дублирующийся id оффера— если торговые предложения и основные товары выгружаются с одинаковыми ID -
Недопустимый символ в XML— амперсанд&в названии не экранирован (&) -
Нет обязательного тега price— товары без цены не выгружаются, Яндекс отклоняет
Сроки настройки
Настройка стандартного YML-профиля Битрикс с маппингом свойств и добавлением <param> через хуки — 4–8 часов. Кастомный генератор для сложного каталога с торговыми предложениями и параметрами — 1–2 рабочих дня.







