YML — это формат прайс-листа Яндекса на базе XML, через который магазин на 1С-Битрикс отдаёт Маркету ассортимент, цены и остатки. Ниже разбираем, как собрать фид штатными средствами, какие поля обязательны и как избежать отклонения каталога при модерации.
Что такое YML и зачем он Маркету
YML (Yandex Market Language) — это диалект XML, описывающий магазин: раздел <shop> с реквизитами, дерево <categories> и список товарных предложений <offers>. Яндекс Маркет забирает этот файл по расписанию, сопоставляет предложения со своими карточками и обновляет цены и наличие на витрине.
Для магазина на 1С-Битрикс YML — это основной канал передачи ассортимента в товарной модели «прайс-лист». Даже при работе по FBS/DBS фид остаётся источником цен и характеристик, а заказы и остатки уже ходят через API. Важно понимать это разделение: YML отвечает за что и почём вы продаёте, а не за логистику заказов.
Штатная выгрузка Битрикса под Маркет
В редакциях «Малый бизнес» и «Бизнес» есть модуль catalog с готовым мастером экспорта: Магазин → Настройки → Экспорт данных → Яндекс.Маркет (файл /bitrix/admin/cat_export_edit.php). Мастер создаёт настроечный профиль и публичный URL вида /bitrix/catalog_export/yandex.php, который вы указываете в кабинете Маркета.
На шагах мастера задаются:
- Инфоблоки и разделы каталога, попадающие в фид;
- Тип цены — обычно «Розничная», но можно отдавать отдельную цену для Маркета;
- Условия отбора — только активные, только в наличии, с картинкой и заполненной ценой;
- Сопоставление свойств инфоблока с параметрами
<param>.
Структура offer и обязательные поля
Ядро фида — предложения. Для товарной модели с готовыми карточками Маркет принимает упрощённый offer, где ключевую роль играют штрихкод и артикул для сопоставления. Минимальный набор:
| Поле | Назначение | Обязательность |
|---|---|---|
id | Внутренний ID предложения (SKU) | Да |
<price> | Актуальная цена | Да |
<currencyId> | Валюта, RUR | Да |
<categoryId> | Ссылка на категорию магазина | Да |
<barcode> | Штрихкод для мэтчинга карточки | Желательно |
<vendorCode> | Артикул производителя | Желательно |
<picture> | URL изображения (абсолютный) | Да |
Характеристики передаются тегами <param name="…">значение</param>. В Битриксе их источник — свойства инфоблока, поэтому качество фида напрямую зависит от заполненности каталога: пустые бренд, штрихкод и габариты приводят к тому, что Маркет не привязывает предложение к карточке.
Фильтрация каталога и цены под Маркет
Отдавать в фид весь каталог почти никогда не нужно. Разумная фильтрация снижает число ошибок модерации и убирает неликвид с витрины. Практические правила отбора:
- Только активные товары с заполненной ценой и хотя бы одним изображением;
- Только позиции в наличии (остаток по складу больше нуля) — либо все, если работаете по модели с квантованием;
- Исключение сопутствующих SKU, комплектов и служебных разделов;
- Отдельный тип цены «Яндекс Маркет», если площадочная цена отличается от сайта.
Отдельная цена решается в модуле catalog: заводите тип цен, назначаете его в профиле экспорта и правите наценку правилами или обменом из 1С, не трогая розницу сайта. Это удобно, когда на Маркете нужна другая маржинальность из-за комиссии площадки.
offer со своей ценой и остатком. Родительский товар в offers не попадает.Автообновление и производительность
Маркет проверяет фид по расписанию, но цены и остатки в рознице меняются чаще. Есть два подхода к актуализации:
- Периодическая пересборка всего YML по крону (раз в 15–60 минут). Подходит для каталогов до нескольких десятков тысяч предложений;
- Обновление наличия через API Маркета — цены и остатки уходят точечно, а фид остаётся источником характеристик и обновляется реже.
Для генерации по крону выносим сборку в консольный скрипт и вызываем через php -f /path/generate_yml.php, читая товары постранично прямыми выборками CIBlockElement::GetList или через D7 \Bitrix\Iblock\ElementTable. Готовый файл пишем во временный и атомарно переименовываем в боевой, чтобы Маркет не поймал недописанный XML.
Валидация и типичные ошибки
Перед подключением фид стоит прогнать через валидатор в кабинете Маркета и проверить кодировку. Самые частые причины отклонения:
| Ошибка | Причина в Битриксе |
|---|---|
| Битая кодировка, «кракозябры» | Файл не в UTF-8 или без корректного заголовка encoding="utf-8" |
| Относительные ссылки на картинки | Не задан абсолютный домен в настройках экспорта |
| Товар не привязался к карточке | Пустой barcode/vendorCode, нет бренда |
| Нулевые или отрицательные цены | Не выгружен нужный тип цены, скидочные правила |
Дубли id | Совпадающие ID торговых предложений |
Полезно логировать каждую сборку: число выгруженных offer, отброшенных по фильтрам и с пустыми обязательными полями. Так вы сразу видите, если после обмена из 1С каталог «просел» и на Маркет ушло вдвое меньше товаров.
Итог
Корректный YML-фид — это не разовая галочка в мастере, а управляемый процесс: правильная фильтрация каталога, отдельная цена под площадку, заполненные штрихкоды и бренды, атомарная генерация по расписанию и постоянный контроль ошибок. На каталоге до десятков тысяч SKU хватает штатной выгрузки Битрикса, дальше нужен вынесенный в крон скрипт и обновление наличия через API.
Мы настраиваем выгрузку под конкретную структуру каталога и модель работы на Маркете: от типов цен и фильтров до высокопроизводительной генерации фида и мониторинга. Если каталог большой или данные приходят из 1С, поможем выстроить цепочку так, чтобы на витрину уходили только валидные и актуальные предложения.
Частые вопросы
Где в Битриксе включить экспорт в Яндекс.Маркет?
В разделе Магазин → Настройки → Экспорт данных выберите тип «Яндекс.Маркет». Мастер создаст профиль и публичный URL, который нужно указать в кабинете Маркета.
Нужна ли редакция «Бизнес» для YML?
Штатный экспорт в Яндекс.Маркет есть уже в «Малом бизнесе». Для сложных каталогов и большого объёма чаще пишут собственный генератор, и тут важнее производительность сервера, а не редакция.
Можно ли отдавать на Маркет цену, отличную от сайта?
Да. Заведите отдельный тип цены и назначьте его в профиле экспорта. Розница сайта останется прежней, а на Маркет уйдёт площадочная цена с учётом комиссии.
Как часто обновлять фид?
Характеристики можно обновлять раз в несколько часов, а цены и остатки — чаще, вплоть до 15 минут по крону или точечно через API наличия Маркета.
Почему товары не привязываются к карточкам Маркета?
Чаще всего из-за пустых штрихкодов, артикулов и бренда. Заполните эти свойства в каталоге, тогда Маркет сможет сопоставить предложение с готовой карточкой.
Каждое торговое предложение — отдельный offer?
Да, каждая SKU-вариация выгружается своим тегом offer со своей ценой и остатком. Родительский товар в список предложений не попадает.
Что делать при ошибке кодировки?
Убедитесь, что файл сохраняется в UTF-8 и в заголовке XML указан encoding="utf-8". В Битриксе следите, чтобы данные каталога не были в windows-1251.
Стоит ли генерировать YML при каждом запросе Маркета?
Нет. Пересборка на лету перегружает базу. Генерируйте файл по расписанию, пишите его атомарно и отдавайте Маркету как статику.
Поможем с настройкой и поддержкой Интеграции и связки систем
Поможем с настройкой, доработкой и поддержкой Интеграции и связки систем.