YML формат — Yandex Market Language
YML (Yandex Market Language) — стандартный формат XML-файла для передачи данных о товарах в сервис promosearch.ru. Основан на спецификации Яндекс.Маркета.
Важные моменты:
- При большом количестве товаров (более 500 000) рекомендуется создавать несколько фидов для оптимизации загрузки
- Поиск использует только данные из YML-фида — вся информация должна быть актуальной и корректной
- Если файл генерируется динамически и процесс занимает много времени — настройте выгрузку по крону в статический файл для быстрого доступа
Если у вас есть вопросы по формированию YML-фида — обратитесь в техническую поддержку: https://promosearch.ru/#contact
1. Общая структура файла
YML-файл представляет собой XML-документ с определённой структурой элементов.
Минимальная структура:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-01-15 12:00">
<shop>
<name>Название магазина</name>
<company>Название компании</company>
<url>https://myshop.ru</url>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
<category id="1">Электроника</category>
</categories>
<offers>
<offer id="12345" available="true">
<!-- Поля товара -->
</offer>
</offers>
</shop>
</yml_catalog>
Требования к файлу:
- Кодировка: UTF-8 (обязательно)
- Размер: не более 2 ГБ
- Формат: валидный XML
- Расширение файла:
.xmlили.yml
2. Элемент yml_catalog
Корневой элемент документа.
Атрибут:
| Атрибут | Тип | Обязательный | Описание |
|---|---|---|---|
date |
string | да | Дата и время генерации файла в формате YYYY-MM-DD HH:MM |
Пример:
<yml_catalog date="2024-01-15 14:30">
...
</yml_catalog>
3. Раздел shop
Содержит всю информацию о магазине и товарах.
Обязательные элементы раздела shop:
<name>,<company>,<url>— основная информация о магазине<currencies>— описание валют<categories>— дерево категорий товаров<offers>— список товаров
Необязательные элементы:
<stickers>— визуальные метки для товаров<platform>,<version>,<agency>,<email>— дополнительная информация
Общие сведения о магазине
| Элемент | Тип | Обязательный | Описание |
|---|---|---|---|
name |
string | да | Короткое название магазина (не более 20 символов) |
company |
string | да | Полное наименование компании |
url |
string | да | URL главной страницы магазина |
platform |
string | нет | Система управления контентом (CMS) |
version |
string | нет | Версия CMS |
agency |
string | нет | Наименование агентства, создавшего магазин |
email |
string | нет | Контактный email магазина |
Пример:
<shop>
<name>Мой магазин</name>
<company>ООО "Интернет-торговля"</company>
<url>https://myshop.ru</url>
<platform>MODX</platform>
<version>3.0</version>
<email>info@myshop.ru</email>
...
</shop>
Валюты
Раздел <currencies> описывает валюты, используемые в магазине.
Структура:
<currencies>
<currency id="RUB" rate="1"/>
<currency id="USD" rate="CBRF"/>
<currency id="EUR" rate="90.5"/>
</currencies>
Атрибуты элемента currency:
| Атрибут | Тип | Обязательный | Описание |
|---|---|---|---|
id |
string | да | Код валюты (RUB, USD, EUR, UAH, KZT) |
rate |
string | да | Курс валюты. 1 — базовая валюта, CBRF — курс ЦБ РФ, или числовое значение |
Одна из валют должна быть базовой (
rate="1"). Обычно этоRUB.
Категории
Раздел <categories> содержит дерево категорий товаров.
Структура:
<categories>
<category id="1">Электроника</category>
<category id="2" parentId="1">Смартфоны</category>
<category id="3" parentId="1">Ноутбуки</category>
<category id="4">Одежда</category>
</categories>
Атрибуты элемента category:
| Атрибут | Тип | Обязательный | Описание |
|---|---|---|---|
id |
int | да | Уникальный идентификатор категории |
parentId |
int | нет | ID родительской категории (для вложенных категорий) |
Правила:
idдолжен быть уникальным в пределах файла- Название категории — текст между тегами
<category>и</category> - Максимальная вложенность — без ограничений
- Если
parentIdне указан — категория корневая
Стикеры
Раздел <stickers> описывает визуальные метки (бейджи), которые можно назначить товарам.
Структура:
<stickers>
<sticker id="0">
<text>Хит продаж</text>
<bg>#f5b942</bg>
<color>#ffffff</color>
</sticker>
<sticker id="1">
<text>Новинка</text>
<bg>#2cc739</bg>
<color>#ffffff</color>
</sticker>
<sticker id="2">
<text>Только сегодня</text>
<bg>#d40000</bg>
<color>#ffffff</color>
</sticker>
<sticker id="3">
<text>Пример стикера</text>
<bg>#4154f1</bg>
<color>#ffffff</color>
</sticker>
</stickers>
Поля элемента sticker:
| Атрибут/Элемент | Тип | Обязательный | Описание |
|---|---|---|---|
id |
int | да | Уникальный идентификатор стикера (атрибут) |
text |
string | да | Текст на стикере |
bg |
string | да | Цвет фона стикера в формате HEX (например: #f5b942) |
color |
string | да | Цвет текста стикера в формате HEX (например: #ffffff) |
Правила:
- Раздел
<stickers>размещается между<categories>и<offers> idдолжен быть уникальным в пределах файла- Стикеры назначаются товарам через поле
<stickers>в описании товара (см. раздел 4)
Товары
Раздел <offers> содержит список всех товаров.
<offers>
<offer id="12345" available="true">
<!-- Описание товара -->
</offer>
<offer id="12346" available="false">
<!-- Описание товара -->
</offer>
</offers>
4. Описание товара (offer)
Каждый товар описывается элементом <offer>.
Атрибуты offer:
| Атрибут | Тип | Обязательный | Описание |
|---|---|---|---|
id |
string | да | Уникальный ID товара (артикул). Не более 255 символов |
available |
boolean | нет | Наличие товара: true — в наличии, false — нет. По умолчанию true |
group_id |
string | нет | ID группы товаров для объединения вариантов (например, разные цвета одной модели) |
Обязательные поля
Эти поля обязательны для каждого товара.
| Элемент | Тип | Описание |
|---|---|---|
name |
string | Название товара. Не более 255 символов |
url |
string | URL страницы товара на сайте магазина |
price |
float | Актуальная цена товара |
currencyId |
string | Валюта цены (RUB, USD, EUR, UAH, KZT). Должна быть объявлена в <currencies> |
categoryId |
int | ID категории из раздела <categories> |
Пример минимального товара:
<offer id="12345" available="true">
<name>Смартфон Samsung Galaxy S23</name>
<url>https://myshop.ru/product/12345</url>
<price>59990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
</offer>
Необязательные поля
Эти поля добавляют дополнительную информацию о товаре.
| Элемент | Тип | Описание |
|---|---|---|
group_id |
string | ID группы товаров. Используется для объединения вариантов одного товара (разные цвета, размеры). Все товары с одинаковым group_id считаются вариантами одной модели |
picture |
string | URL изображения товара. Можно указать несколько элементов <picture> |
stickers |
string | ID стикеров через запятую. Стикеры должны быть определены в разделе <stickers>. Пример: 0,1,2 |
description |
string | Описание товара. Не более 3000 символов |
vendor |
string | Производитель/бренд товара |
vendorCode |
string | Код производителя (артикул производителя) |
model |
string | Модель товара |
oldprice |
float | Старая цена (для отображения скидки) |
count |
int | Количество товара на складе |
rating |
float | Рейтинг товара (от 0 до 5). Отображается на карточке товара |
priority |
int | Дополнительный вес товара для ранжирования в поисковой выдаче. Помогает поднять товар выше при равных условиях. Используется для передачи метрик популярности: количество заказов, просмотров, конверсия, маржинальность, количество отзывов или любой другой показатель эффективности товара |
min_quantity |
int | Минимальное количество товара для добавления в корзину |
multiplicity |
int | Кратность добавления в корзину. Товар можно добавить только кратно этому числу |
keyword |
string | Дополнительные ключевые слова для поиска. Не отображаются на фронтенде, но участвуют в поисковой выдаче |
location |
string | Местоположение товара. Используется для кастомных настроек фильтрации |
barcode |
string | Штрихкод товара. Используется для кастомных настроек и интеграций |
param |
element | Параметры товара для построения фасетных фильтров. Можно указать несколько элементов. Каждый элемент имеет атрибуты: name (название параметра, обязательный), unit (единица измерения, необязательный). Значение параметра указывается между тегами |
regionData |
element | Данные товара для разных регионов. Содержит элементы <region> с ценами, наличием и URL для каждого региона. Подробнее см. раздел 6 |
Группировка вариантов товара (group_id)
Поле group_id используется для объединения различных вариантов одного товара (разные цвета, размеры, комплектации). Все товары с одинаковым group_id считаются вариантами одной модели и могут отображаться вместе в результатах поиска.
Пример — разные цвета одного смартфона:
<!-- Чёрный вариант -->
<offer id="12345" available="true" group_id="galaxy-s23-128">
<name>Смартфон Samsung Galaxy S23 128GB Black</name>
<url>https://myshop.ru/product/12345</url>
<price>59990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<group_id>galaxy-s23-128</group_id>
<param name="Цвет">Черный</param>
<param name="Память">128 ГБ</param>
</offer>
<!-- Белый вариант -->
<offer id="12346" available="true" group_id="galaxy-s23-128">
<name>Смартфон Samsung Galaxy S23 128GB White</name>
<url>https://myshop.ru/product/12346</url>
<price>59990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<group_id>galaxy-s23-128</group_id>
<param name="Цвет">Белый</param>
<param name="Память">128 ГБ</param>
</offer>
<!-- Зелёный вариант -->
<offer id="12347" available="true" group_id="galaxy-s23-128">
<name>Смартфон Samsung Galaxy S23 128GB Green</name>
<url>https://myshop.ru/product/12347</url>
<price>61990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<group_id>galaxy-s23-128</group_id>
<param name="Цвет">Зеленый</param>
<param name="Память">128 ГБ</param>
</offer>
Правила использования:
group_idуказывается и как атрибут элемента<offer>, и как отдельный элемент внутри товара- Значение
group_idдолжно быть одинаковым для всех вариантов одной модели - Рекомендуется использовать осмысленные идентификаторы (например:
galaxy-s23-128,iphone-15-pro-256) - Товары без
group_idсчитаются уникальными, не имеющими вариантов
Параметры товара (param)
Элемент <param> используется для описания характеристик товара, на основе которых строятся фасетные фильтры в поиске.
Структура:
<param name="Объём">5</param>
<param name="Цвет">двухцветный</param>
<param name="Материал">алюминий</param>
<param unit="мм" name="Толщина стенки">8</param>
<param unit="см" name="Высота">34</param>
<param unit="см" name="Диаметр">17</param>
<param unit="кг" name="Вес">3</param>
<param name="Страна">Афганистан</param>
Атрибуты элемента param:
| Атрибут | Тип | Обязательный | Описание |
|---|---|---|---|
name |
string | да | Название параметра (характеристики) |
unit |
string | нет | Единица измерения. Используется для числовых параметров |
Правила:
- Значение параметра указывается между тегами
<param>и</param> - Можно указать любое количество параметров
- Параметры с одинаковым
nameгруппируются в один фасетный фильтр - Для числовых параметров рекомендуется указывать
unit
Пример товара с дополнительными полями:
<offer id="12345" available="true" group_id="galaxy-s23-128">
<name>Смартфон Samsung Galaxy S23 128GB Black</name>
<url>https://myshop.ru/product/12345</url>
<price>59990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<group_id>galaxy-s23-128</group_id>
<picture>https://myshop.ru/images/12345-1.jpg</picture>
<picture>https://myshop.ru/images/12345-2.jpg</picture>
<picture>https://myshop.ru/images/12345-3.jpg</picture>
<stickers>0,1</stickers>
<description>Флагманский смартфон Samsung Galaxy S23 с экраном 6.1", процессором Snapdragon 8 Gen 2 и камерой 50 МП.</description>
<vendor>Samsung</vendor>
<vendorCode>SM-S911BZKDEUC</vendorCode>
<model>Galaxy S23</model>
<oldprice>69990</oldprice>
<count>15</count>
<rating>4.8</rating>
<priority>150</priority>
<min_quantity>1</min_quantity>
<multiplicity>1</multiplicity>
<keyword>самсунг галакси смартфон телефон android</keyword>
<location>Москва, склад №1</location>
<barcode>8806094732345</barcode>
<param name="Цвет">Черный</param>
<param name="Память">128 ГБ</param>
<param unit="дюйм" name="Диагональ экрана">6.1</param>
<param name="Операционная система">Android</param>
<param unit="МП" name="Камера">50</param>
<param unit="г" name="Вес">168</param>
<regionData>
<region id="604">
<url>https://msk.myshop.ru/product/12345</url>
<price>59990</price>
<oldprice>69990</oldprice>
<available>true</available>
<count>15</count>
<desc>Флагманский смартфон Samsung Galaxy S23. Доставка по Москве за 1 день</desc>
<weight>10</weight>
<stickers>0,1</stickers>
</region>
<region id="699">
<url>https://spb.myshop.ru/product/12345</url>
<price>58990</price>
<oldprice>68990</oldprice>
<available>true</available>
<count>8</count>
<weight>5</weight>
<stickers>1</stickers>
</region>
</regionData>
</offer>
5. Полный пример YML-файла
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-01-15 14:30">
<shop>
<name>Мой магазин</name>
<company>ООО "Интернет-торговля"</company>
<url>https://myshop.ru</url>
<platform>MODX</platform>
<email>info@myshop.ru</email>
<currencies>
<currency id="RUB" rate="1"/>
<currency id="USD" rate="CBRF"/>
</currencies>
<categories>
<category id="1">Электроника</category>
<category id="2" parentId="1">Смартфоны</category>
<category id="3" parentId="1">Ноутбуки</category>
</categories>
<stickers>
<sticker id="0">
<text>Хит продаж</text>
<bg>#f5b942</bg>
<color>#ffffff</color>
</sticker>
<sticker id="1">
<text>Новинка</text>
<bg>#2cc739</bg>
<color>#ffffff</color>
</sticker>
<sticker id="2">
<text>Только сегодня</text>
<bg>#d40000</bg>
<color>#ffffff</color>
</sticker>
</stickers>
<offers>
<!-- Товар с полным набором полей -->
<offer id="12345" available="true" group_id="galaxy-s23-128">
<name>Смартфон Samsung Galaxy S23 128GB Black</name>
<url>https://myshop.ru/product/12345</url>
<price>59990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<group_id>galaxy-s23-128</group_id>
<picture>https://myshop.ru/images/12345-1.jpg</picture>
<picture>https://myshop.ru/images/12345-2.jpg</picture>
<stickers>0,1</stickers>
<description>Флагманский смартфон Samsung Galaxy S23 с процессором Snapdragon 8 Gen 2.</description>
<vendor>Samsung</vendor>
<vendorCode>SM-S911BZKDEUC</vendorCode>
<model>Galaxy S23</model>
<oldprice>69990</oldprice>
<count>15</count>
<rating>4.8</rating>
<priority>150</priority>
<min_quantity>1</min_quantity>
<multiplicity>1</multiplicity>
<keyword>самсунг галакси смартфон телефон android</keyword>
<location>Москва, склад №1</location>
<barcode>8806094732345</barcode>
<param name="Цвет">Черный</param>
<param name="Память">128 ГБ</param>
<param unit="дюйм" name="Диагональ экрана">6.1</param>
<param name="Операционная система">Android</param>
<param unit="МП" name="Камера">50</param>
<param unit="г" name="Вес">168</param>
<regionData>
<region id="604">
<url>https://msk.myshop.ru/product/12345</url>
<price>59990</price>
<oldprice>69990</oldprice>
<available>true</available>
<count>15</count>
<desc>Флагманский смартфон Samsung Galaxy S23. Доставка по Москве за 1 день</desc>
<weight>10</weight>
<stickers>0,1</stickers>
</region>
<region id="699">
<url>https://spb.myshop.ru/product/12345</url>
<price>58990</price>
<oldprice>68990</oldprice>
<available>true</available>
<count>8</count>
<weight>5</weight>
<stickers>1</stickers>
</region>
</regionData>
</offer>
<!-- Ноутбук -->
<offer id="12346" available="true">
<name>Ноутбук Apple MacBook Pro 14</name>
<url>https://myshop.ru/product/12346</url>
<price>189990</price>
<currencyId>RUB</currencyId>
<categoryId>3</categoryId>
<picture>https://myshop.ru/images/12346.jpg</picture>
<stickers>2</stickers>
<description>Профессиональный ноутбук с чипом M2</description>
<vendor>Apple</vendor>
<model>MacBook Pro 14" M2</model>
<count>5</count>
<rating>5.0</rating>
<param name="Процессор">Apple M2</param>
<param name="Память">16 ГБ</param>
<param name="Накопитель">512 ГБ SSD</param>
<param unit="дюйм" name="Диагональ экрана">14</param>
<param name="Цвет">Серый космос</param>
<param unit="кг" name="Вес">1.6</param>
</offer>
</offers>
</shop>
</yml_catalog>
6. Поиск по регионам
Для организации мультирегионального поиска используется элемент <regionData>, который позволяет указать разные цены, наличие и URL товара для каждого региона.
Структура:
<regionData>
<region id="604">
<url>https://site.ru/catalog/p/234123efsdgwer/</url>
<price>23540</price>
<oldprice>29000</oldprice>
<available>true</available>
<count>42</count>
<desc>Казан афганский с доставкой по Москве за 1 день</desc>
<weight>10</weight>
<stickers>0,1</stickers>
</region>
<region id="699">
<url>https://site.ru/catalog/p/er6345456gwer/</url>
<price>22500</price>
<oldprice>28000</oldprice>
<available>false</available>
<count>11</count>
<stickers>2</stickers>
</region>
<region id="647">
<url>https://site.ru/catalog/p/er312123dgwer/</url>
<price>22600</price>
<oldprice>27000</oldprice>
<available>true</available>
<count>13</count>
<weight>5</weight>
<stickers>0</stickers>
</region>
</regionData>
Элемент region
Каждый регион описывается отдельным элементом <region>.
Атрибуты элемента region:
| Атрибут | Тип | Обязательный | Описание |
|---|---|---|---|
id |
int | да | ID региона. Уникальное число, соответствующее ID региона в вашей системе |
Поля элемента region:
| Элемент | Тип | Обязательный | Описание |
|---|---|---|---|
url |
string | да | Абсолютный URL страницы товара в регионе |
price |
float | да | Цена товара в регионе |
oldprice |
float | нет | Старая цена товара в регионе (для отображения скидки) |
available |
boolean | да | Наличие товара в регионе: true — в наличии, false — нет |
count |
int | нет | Количество товара на складе в регионе |
desc |
string | нет | Описание товара для конкретного региона. Используется, если описание отличается от основного |
weight |
int | нет | Дополнительный вес товара для региона. Помогает поднять товар в выдаче при равных условиях |
stickers |
string | нет | ID стикеров через запятую для конкретного региона. Позволяет отображать разные стикеры для товара в разных регионах. Стикеры должны быть определены в разделе <stickers>. Пример: 0,1,2 |
Правила:
- Элемент
<regionData>размещается внутри<offer>, обычно в конце описания товара - ID региона должен соответствовать настройкам вашего поддомена
- После настройки необходимо сообщить, какой регион к какому поддомену привязан
- Если товар отсутствует в каком-то регионе — его можно не указывать в
<regionData>
Пример товара с региональными данными:
<offer id="12345" available="true">
<name>Смартфон Samsung Galaxy S23 128GB Black</name>
<url>https://myshop.ru/product/12345</url>
<price>59990</price>
<currencyId>RUB</currencyId>
<categoryId>2</categoryId>
<picture>https://myshop.ru/images/12345.jpg</picture>
<description>Флагманский смартфон Samsung Galaxy S23</description>
<vendor>Samsung</vendor>
<regionData>
<region id="604">
<url>https://msk.myshop.ru/product/12345</url>
<price>59990</price>
<oldprice>69990</oldprice>
<available>true</available>
<count>15</count>
<desc>Флагманский смартфон Samsung Galaxy S23. Доставка по Москве за 1 день</desc>
<weight>10</weight>
<stickers>0,1</stickers>
</region>
<region id="699">
<url>https://spb.myshop.ru/product/12345</url>
<price>58990</price>
<oldprice>68990</oldprice>
<available>true</available>
<count>8</count>
<weight>5</weight>
<stickers>1</stickers>
</region>
<region id="647">
<url>https://ekb.myshop.ru/product/12345</url>
<price>61990</price>
<oldprice>71990</oldprice>
<available>false</available>
<count>0</count>
<stickers>2</stickers>
</region>
</regionData>
</offer>
После интеграции региональных данных свяжитесь с технической поддержкой для настройки привязки ID регионов к поддоменам.
Рекомендации
Обязательно заполняйте:
name— качественное название с ключевыми характеристикамиpicture— хотя бы одно изображение (лучше несколько)description— подробное описание для лучшей индексацииvendor— производитель/бренд (важно для поиска)categoryId— правильная категория товара
Проверьте перед загрузкой:
- Файл в кодировке UTF-8
- Все обязательные поля заполнены
- ID товаров и категорий уникальны
- URL корректные и доступные
- Цены актуальные
- Изображения доступны по указанным URL
Частые ошибки:
- Неверная кодировка (не UTF-8)
- Дубликаты ID товаров
- Некорректные URL (404 ошибки)
- Пустые обязательные поля
- Неверный формат даты в
yml_catalog