YML-файл для Яндекс.Маркета — что это такое, структура, как создать
YML (Yandex Market Language) — формат прайс-листа для Яндекс.Маркета. Структура YML-файла с примером, типы фидов, требования Яндекса, ошибки валидации и FAQ.
Посчитайте прямо здесь: XML → Formatted XML
Открыть инструмент целиком →YML (Yandex Market Language) — XML-формат прайс-листа, который Яндекс придумал для передачи товарного каталога на свой Маркет. Магазин выкладывает файл на своём сайте по постоянной ссылке, робот Маркета скачивает его по расписанию и превращает каждый оффер в карточку товара: название, цена, категория, картинки, характеристики, ссылка на сайт. Без такого фида на Маркет не попасть — добавить каталог построчно через кабинет реально разве что для пары десятков позиций.
Не путайте: YML и YAML — разные форматы
Путаница начинается с расширения. Конфиги Docker Compose и Kubernetes тоже лежат в файлах .yml, но это YAML — язык конфигурации с отступами вместо скобок. YML же — конкретный XML-стандарт Маркета, и общего у них только три буквы. Когда в Яндексе ищут «формат yml что это», почти всегда речь именно о прайс-фиде.
| Критерий | YML | YAML |
|---|---|---|
| Что это | Прайс-фид для Яндекс.Маркета | Универсальный формат сериализации данных |
| Основа | XML | Собственный синтаксис, надмножество JSON |
| Корневой элемент | yml_catalog | Любой |
| Где встречается | Маркет, Директ, Яндекс Бизнес | Docker, Kubernetes, CI/CD, конфиги приложений |
| Синтаксис | Теги и атрибуты, строгая схема | Отступы, двоеточия, дефисы |
Если же вы искали именно язык конфигурации — синтаксис, отступы, типы данных — у нас есть отдельный гид по YAML.
Структура YML-файла
Любой YML-документ устроен одинаково: корневой элемент yml_catalog с датой генерации, внутри — shop с описанием магазина, валютами и категориями, а внутри него — offers, список товаров. Вложенность сохраняйте как в примере: shop внутри yml_catalog, offers внутри shop. Скелет упрощённого фида выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-09-07 12:00">
<shop>
<name>ТехноМир</name>
<company>ООО «ТехноМир»</company>
<url>https://tehnomir.example.ru/</url>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<category id="1">Бытовая техника</category>
<category id="12" parentId="1">Чайники</category>
</categories>
<delivery-options>
<option cost="300" days="1-2"/>
</delivery-options>
<offers>
<offer id="100256" available="true">
<url>https://tehnomir.example.ru/catalog/chaynik-polaris/</url>
<price>2490</price>
<oldprice>3100</oldprice>
<currencyId>RUR</currencyId>
<categoryId>12</categoryId>
<picture>https://tehnomir.example.ru/img/pwk-1475cc-1.jpg</picture>
<name>Чайник Polaris PWK 1475CC</name>
<vendor>Polaris</vendor>
<description>Чайник 1,7 л, 2200 Вт, фильтр от накипи, индикация нагрева.</description>
<param name="Мощность" unit="Вт">2200</param>
</offer>
</offers>
</shop>
</yml_catalog>Скелет рабочий, но это упрощение: для отдельных категорий Маркет требует свои поля — у одежды это размеры и цвет, у книг автор и издательство, у лекарств форма выпуска. Перед выгрузкой сверяйтесь со справкой именно своей категории.
Из чего состоит фид
yml_catalog— корневой элемент; атрибутdateпоказывает, когда фид сгенерирован. Робот сверяется с ней, чтобы понять, устарели данные или нет.shop— блок магазина: название, юридическое лицо, адрес сайта.currencies— валюты и курсы.rate="1"значит, что цены уже указаны в этой валюте; можно задать курс к рублю.categories— дерево категорий черезidиparentId. Именно на эти id ссылаются офферы черезcategoryId.offers— сам каталог. Каждыйoffer— товар с уникальнымidи атрибутомavailable:true— в наличии,false— под заказ или скрыт.- Внутри оффера обязательный минимум:
url,price,currencyId,categoryId,pictureиnameдля упрощённого типа. Элементparamдобавляет характеристики — цвет, мощность, размер.
Пара полей, которые часто трактуют неверно. oldprice — зачёркнутая «цена до скидки»: она обязана быть выше price, иначе Маркет её отбросит, а при систематическом завышении можно словить санкции за манипуляции. delivery и delivery-options задают условия доставки, но если доставка уже настроена в кабинете, приоритет у кабинета — фид лишь подстраховка.
Готовый пример YML-файла
Скелет выше показывает каркас, а ниже — цельный фид: четыре товара в типе vendor.model, вложенные категории, одна зачёркнутая цена, настройка доставки. Сохраните как yml.xml, подставьте свои данные — и файл готов к первой загрузке. Комментарии объясняют назначение каждого блока; парсеры их пропускают, так что оставить или удалить их перед выгрузкой — дело вкуса.
<?xml version="1.0" encoding="UTF-8"?>
<!-- дата генерации фида: строго в формате YYYY-MM-DD hh:mm -->
<yml_catalog date="2026-09-08 12:00">
<shop>
<!-- краткое название магазина -->
<name>ТехноМир</name>
<!-- юридическое наименование компании -->
<company>ООО «ТехноМир»</company>
<!-- адрес сайта -->
<url>https://tehnomir.example.ru/</url>
<currencies>
<!-- rate="1": цены в фиде уже указаны в рублях -->
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<!-- корневые категории идут без parentId -->
<category id="1">Бытовая техника</category>
<category id="2">Электроника</category>
<!-- parentId привязывает подкатегорию к родительской -->
<category id="12" parentId="1">Чайники</category>
<category id="13" parentId="1">Мультиварки</category>
<category id="21" parentId="2">Роутеры</category>
<category id="22" parentId="2">Наушники</category>
</categories>
<delivery-options>
<!-- стоимость и срок доставки по умолчанию для всех офферов -->
<option cost="300" days="1-2"/>
</delivery-options>
<offers>
<!-- vendor.model: название карточки соберётся из typePrefix, vendor и model -->
<offer id="100256" available="true" type="vendor.model">
<url>https://tehnomir.example.ru/catalog/polaris-pwk-1475cc/</url>
<price>2490</price>
<!-- oldprice: зачёркнутая цена, обязана быть больше price -->
<oldprice>3100</oldprice>
<currencyId>RUR</currencyId>
<!-- categoryId ссылается на id из блока categories -->
<categoryId>12</categoryId>
<!-- прямая https-ссылка на фото, до трёх picture на оффер -->
<picture>https://tehnomir.example.ru/img/pwk-1475cc-1.jpg</picture>
<delivery>true</delivery>
<typePrefix>Чайник</typePrefix>
<vendor>Polaris</vendor>
<model>PWK 1475CC</model>
<description>Чайник 1,7 л, 2200 Вт, закрытая колба, фильтр от накипи, индикация нагрева.</description>
</offer>
<offer id="100257" available="true" type="vendor.model">
<url>https://tehnomir.example.ru/catalog/redmond-r2m80/</url>
<price>5490</price>
<currencyId>RUR</currencyId>
<categoryId>13</categoryId>
<picture>https://tehnomir.example.ru/img/r2m80-1.jpg</picture>
<delivery>true</delivery>
<typePrefix>Мультиварка</typePrefix>
<vendor>REDMOND</vendor>
<model>R2M80</model>
<description>Мультиварка 5 л, 860 Вт, 32 программы, отложенный старт.</description>
</offer>
<offer id="100258" available="true" type="vendor.model">
<url>https://tehnomir.example.ru/catalog/keenetic-extra-kn-1910/</url>
<price>3990</price>
<currencyId>RUR</currencyId>
<categoryId>21</categoryId>
<picture>https://tehnomir.example.ru/img/keenetic-extra-1.jpg</picture>
<delivery>true</delivery>
<typePrefix>Роутер</typePrefix>
<vendor>Keenetic</vendor>
<model>Extra (KN-1910)</model>
<description>Двухдиапазонный Wi-Fi роутер, 4 порта Gigabit, USB-порт.</description>
</offer>
<!-- available="false": товар остаётся в фиде, но скрыт с витрины -->
<offer id="100259" available="false" type="vendor.model">
<url>https://tehnomir.example.ru/catalog/sony-wh-ch520/</url>
<price>3490</price>
<currencyId>RUR</currencyId>
<categoryId>22</categoryId>
<picture>https://tehnomir.example.ru/img/wh-ch520-1.jpg</picture>
<delivery>true</delivery>
<typePrefix>Наушники</typePrefix>
<vendor>Sony</vendor>
<model>WH-CH520</model>
<description>Беспроводные накладные наушники, Bluetooth 5.2, до 50 часов без подзарядки.</description>
</offer>
</offers>
</shop>
</yml_catalog>Своими замените название магазина, адреса страниц, картинки, цены и описания. Оффер 100259 демонстрирует приём available="false": товар спрятан с витрины, но остаётся в фиде и вернётся на площадку, как только вы переключите флаг. Отдельного тега name в vendor.model нет и не надо: Маркет склеивает название из typePrefix, vendor и model, поэтому следите за чистотой именно этих трёх полей.
Технические требования — чек-лист
Пробегитесь по таблице перед выгрузкой: большинство проблем с загрузкой ловится ещё на этом списке.
| Требование | Значение/лимит |
|---|---|
Формат даты в yml_catalog | YYYY-MM-DD hh:mm, например 2026-09-08 12:00 |
| Свежесть файла | Фид доступен по постоянной ссылке и не старше 10 дней — устаревший файл робот перестаёт забирать |
| Кодировка | UTF-8 или windows-1251; декларация в прологе должна совпадать с фактической кодировкой файла |
| id категорий | Целые числа до 18 цифр, уникальные в пределах фида |
| Картинки | Прямые https-ссылки, от 1 до 3 элементов picture на оффер; у Маркета есть требования к минимальному размеру изображений |
| Спецсимволы | Амперсанд и угловые скобки только в экранированном виде: & вместо & — иначе файл не пройдёт даже разбор |
Типы YML-фидов
Формат описывает несколько типов офферов, и от выбора зависят обязательные поля.
| Тип | Для каких товаров | Ключевые поля |
|---|---|---|
| Упрощённый | Большинство товаров: одежда, мебель, товары для дома | name, price, categoryId |
| vendor.model | Техника и товары с брендом и моделью | typePrefix, vendor, model |
| book | Книги | author, publisher, year, ISBN |
| medicine | Аптечный ассортимент | форма выпуска, дозировка |
| event-ticket | Билеты на мероприятия | название события, дата, место |
Сейчас Маркет для большинства категорий принимает упрощённый тип, и если нет причины делать иначе — берите его. vendor.model нужен, когда важно прикрепить товар к карточке конкретной модели: телефоны, бытовая техника, инструменты. Там название собирается из трёх полей, а не лежит в name:
<offer id="100257" available="true" type="vendor.model">
<url>https://tehnomir.example.ru/catalog/polaris-pwk-1475cc/</url>
<price>2490</price>
<currencyId>RUR</currencyId>
<categoryId>12</categoryId>
<picture>https://tehnomir.example.ru/img/pwk-1475cc-1.jpg</picture>
<typePrefix>Чайник</typePrefix>
<vendor>Polaris</vendor>
<model>PWK 1475CC</model>
<description>Чайник 1,7 л, 2200 Вт, закрытая колба.</description>
</offer>Какой фид для Яндекс Маркета выбрать: ymlSimple, ymlCustom и «Живая цена»
Тип оффера внутри файла — ещё не весь выбор. При подключении прайс-листа кабинет спрашивает, с каким форматом фида вы работаете: упрощённым (ymlSimple), произвольным (ymlCustom) или книжным. Деление повторяет типы офферов из раздела выше, только на уровне всего файла: от него зависит, какие поля валидатор будет требовать у каждой позиции. Практическое правило простое:
| Что продаёте | Тип фида | Почему |
|---|---|---|
| Одежду, мебель, товары для дома | Упрощённый (ymlSimple) | Название лежит в name, привязка к карточке модели не нужна |
| Технику и электронику с брендом и моделью | Произвольный (ymlCustom), офферы vendor.model | Товар прикрепляется к карточке конкретной модели |
| Книги | Книжный | Свой набор обязательных полей: автор, издательство, год, ISBN |
| Цены и остатки меняются несколько раз в день | «Живая цена» (API) | Цена подтягивается с сайта запросами, без ожидания очередного скачивания файла |
Файл и API не исключают друг друга: каталог по-прежнему выгружается YML-фидом по расписанию, а «Живая цена» работает поверх — скидка на сайте попадает на карточку Маркета за минуты, а не к следующему обходу робота. Для статичного ассортимента достаточно одного файла.
Требования Яндекса к фиду
Жёстких требований немного, но каждое фильтрует либо файл целиком, либо офферы построчно:
- Размер файла — до 1 ГБ. Каталоги в 10 000 офферов и больше спокойно выгружаются одним файлом; упираются обычно не в лимит Маркета, а в то, что CMS успевает сгенерировать.
- Кодировка UTF-8. Декларация
<?xml version="1.0" encoding="UTF-8"?>должна совпадать с фактической кодировкой файла: документ, сохранённый в windows-1251 с декларацией UTF-8, не пройдёт даже разбор. - Постоянная https-ссылка на файл. Адрес не должен меняться от выгрузки к выгрузке — робот ходит по одному URL по расписанию из кабинета.
- Регулярное обновление. Расписание скачивания настраивается в кабинете — от раза в сутки до нескольких раз в день. Главное правило: цена и остатки в фиде совпадают с сайтом. Расхождения Маркет ловит сверкой и прячет карточки.
- Каждый оффер — с уникальным
id, ценой больше нуля, категорией из спискаcategoriesи картинкой по прямой ссылке. - Спецсимволы XML в текстах и ссылках экранируются:
&,<. Амперсанд в URL с UTM-метками — самая предсказуемая ошибка. - Описание — своё, а не копипаст с сайта производителя. Дубли текстов выгрузку не ломают, но Маркет хуже соотносит такие офферы со своими карточками, и товар зависает «без карточки».
Как создать YML-файл
Рабочих пути три, и выбор зависит от размера каталога.
Выгрузка из CMS или учётной системы
Для Битрикса, WooCommerce, OpenCart, МойСклад и 1С есть готовые модули выгрузки: настраиваете соответствие полей один раз, дальше фид обновляется сам. Для каталога от сотни товаров это единственный нормальный вариант — ручная сборка столько не выдержит.
Вручную
Пока товаров пара десятков, можно собрать файл по шаблону выше в любом редакторе с подсветкой XML. Честно: руками легко наделать дублей в id и пропустить экранирование, поэтому после сборки файл прогоняется через валидатор. Каталог вырос — переходите на автоматическую выгрузку, не ждите первой потери товаров.
Из Excel или CSV
Самый частый сценарий у небольших магазинов: прайс живёт в таблице. Кнопки «CSV → YML» не существует, поэтому путь промежуточный. Выгружаете лист в CSV, переводите в структурированные данные через конвертер CSV в JSON (детали — в статье про конвертацию CSV в JSON), затем собираете XML тегами Маркета — стартовать можно с конвертера JSON в XML. Получится черновой XML: останется обернуть его в yml_catalog и проверить названия тегов по схеме. Пока товаров меньше тридцати, это быстрее, чем заводить интеграцию; дальше — только автоматизация.
Как проверить фид
Проверка идёт в два слоя. Первый — синтаксис XML: пока файл корректно разбирается, Маркет его даже не начнёт читать. Быстрый способ поймать ошибку разбора — прогнать фид через онлайн-форматтер XML: он либо отформатирует документ, либо покажет строку, где сломалась разметка.
Второй слой — правила Маркета. Фид загружается в кабинет продавца, и после первого скачивания в разделе прайс-листа появляется отчёт: сколько офферов принято, сколько отброшено и по какой причине. Смотрите его после каждой выгрузки — ситуация «фид принят, а часть товаров отброшена» рядовая, и без отчёта вы её просто не увидите.
Если достался чужой YML и нужно понять, что внутри, — конвертер XML в JSON разложит файл в читаемую структуру за секунду.
Статический файл или генерация на лету
Фид по ссылке отдаётся двумя способами. Первый — скрипт генерирует XML при каждом обращении робота. Второй — планировщик раз в час-два пишет готовый файл на диск, а по ссылке отдаётся статика. Для каталога до пары тысяч товаров live-генерация жива, хотя и отвечает роботу медленно. Больше — только статика. Робот пришёл, скрипт упал по таймауту, Маркет записал пустой фид и спрятал половину каталога — и лечится это потом днями, потому что карточки возвращаются не мгновенно, а после следующей удачной загрузки. Статический файл ещё и страхует от ошибок выгрузки: вчерашние цены на витрине лучше, чем ноль товаров.
Проверка и загрузка фида
Главный валидатор живёт не на сторонних сайтах, а в кабинете Маркета: проверка становится доступна после регистрации и привязки магазина. В разделе прайс-листов указываете постоянную ссылку на файл — робот делает первое скачивание, и статус загрузки появляется прямо в кабинете: фид принят целиком, принят с ошибками или отклонён, с расшифровкой по каждому отброшенному офферу.
Перед тем как отдавать файл роботу, приведите разметку в порядок: форматтер XML выровняет документ, а если разметка сломана — покажет точную строку, где оборвался тег. Искать незакрытый элемент глазами в документе на сотню мегабайт — развлечение на вечер, которое проще отменить.
И не ждите идеальной первой загрузки: типовые ошибки валидации разобраны ниже в таблице, большинство правится за минуты. Причину отбраковки конкретной позиции всё равно назовёт только отчёт в кабинете — заглядывайте туда после каждой выгрузки, пока расхождение не разошлось по карточкам.
Частые ошибки валидации
| Ошибка | Что происходит | Как исправить |
|---|---|---|
Дублируется id оффера | Маркет оставляет первый товар, остальные с тем же id отбрасывает | Генерировать id из артикула, а не из счётчика цикла выгрузки |
Нет <picture> или картинка недоступна | Карточка без фото хуже ранжируется, категория может не пройти модерацию | Абсолютные https-ссылки; файл открывается напрямую в браузере |
<price>0</price> | Оффер отбрасывается целиком | Товар без цены либо исключать из фида, либо выгружать с available="false" |
Кириллица или пробелы в url | Робот не может сопоставить оффер со страницей сайта | Домен в punycode, путь в percent-encoding; лучше ЧПУ на латинице |
Неэкранированный & | Ломается весь XML — фид не проходит даже разбор | Заменить на & или обернуть значение в CDATA |
categoryId ссылается на несуществующую категорию | Товар без категории в каталог не попадает | Проверить, что каждый id оффера есть в блоке categories |
FAQ
Чем открыть YML-файл?
Любым текстовым редактором — VS Code, Notepad++, при нужде даже блокнотом: это обычный XML. Для большого фида берите редактор с подсветкой и поиском по файлу; документ в сотню мегабайт блокнот просто не откроет.
Чем YML отличается от XML?
XML — язык разметки, YML — стандарт на его основе: конкретный набор тегов и правил для товарных фидов. Всякий YML — XML, но XML может быть чем угодно: sitemap, ответом API, документом Office.
Можно ли сделать YML из Excel?
Напрямую — нет. Сохраните лист как CSV и прогоните через конвертеры, путь описан выше. Для регулярной выгрузки лучше поставить модуль под вашу CMS, который строит фид сам, — таблица быстро отстанет от реальных остатков.
Как часто обновлять фид?
При каждом изменении цены или остатков, минимум раз в сутки. Если ассортимент живой и остатки тают за часы — ставьте выгрузку несколько раз в день, расписание настраивается в кабинете Маркета.
Можно ли указать несколько картинок?
Да, оффер принимает несколько элементов picture; первый становится главным фото карточки. Первой ставьте фото на белом фоне — по нему Маркет сверяет товар при модерации и соотносит с карточкой модели.
Должен ли фид лежать в корне сайта?
Нет, подойдёт любая постоянная ссылка: /feed/yml.xml, /export/market.xml — без разницы. Условия два: адрес открывается без авторизации и не отдаёт редирект. Редиректы робот Маркета проходит нестабильно, и загрузка срывается на ровном месте.
Почему Маркет отбрасывает товары из валидного фида?
Чаще всего не хватает обязательных характеристик для категории, категория не совпадает с деревом Маркета, дублируются id или цена расходится с сайтом. Точный ответ всегда в отчёте загрузки в кабинете — построчно, с номерами офферов.
YML и YAML — это одно и то же?
Нет, и расширение .yml у обоих только подливает масла в спор. Быстрая проверка за десять секунд: внутри есть тег <yml_catalog> и офферы — перед вами прайс-фид для Маркета; файл начинается с отступов и пар «ключ: значение» — это YAML-конфиг, Маркет такой не примет. Развёрнутое сравнение — в таблице в начале статьи.
Как проверить YML-фид на ошибки до загрузки?
В два прохода. Сначала синтаксис: прогоните файл через форматтер XML — он либо выровняет документ, либо покажет строку, где разметка сломалась. Затем правила Маркета: загрузите фид в кабинет продавца и откройте отчёт проверки — там построчно перечислены отброшенные офферы с причиной. Сторонние «проверялки YML» требований вашей категории не знают, поэтому финальное слово всегда за отчётом кабинета.
Что такое прайс-фид?
Синоним YML-файла: прайс-лист магазина, выгруженный в формате Маркета. Написание гуляет — «прайс-фид», «прайсфид», «фид Яндекс Маркета», — суть одна: файл со ссылками, ценами и характеристиками, который робот скачивает по расписанию. Когда в кабинете просят ссылку на прайс-лист, ждут именно постоянный URL вашего YML-файла.
Практический итог: фид — не разовый файл, а витрина каталога, и собирать его стоит так, чтобы он обновлялся сам. Небольшой каталог соберите из таблицы, средний — модулем CMS, а перед первой загрузкой прогоните через форматтер XML: половина ошибок уйдёт ещё до Маркета. Дальше — рутинная гигиена: отчёт загрузки после каждой выгрузки и реакция на отброшенные офферы в тот же день, пока расхождение не разошлось по карточкам.
Попробуйте эти инструменты
Похожие статьи
JSON vs XML — какое выбрать для проекта
Сравнение JSON и XML: синтаксис, размер, скорость парсинга, читаемость. Когда JSON лучше, а когда XML.
JSON форматтер: зачем нужен и как использовать
Что такое форматирование JSON, отступы и пробелы, валидация, minify vs beautify, лучшие практики.
CSV в JSON: конвертация и когда нужна
Как преобразовать CSV в JSON, структура данных, обработка больших файлов, использование в JavaScript.
YAML — конфигурационный формат: полный гид
Синтаксис YAML, отступы, типы данных, отличие от JSON, использование в Docker, Kubernetes, CI/CD.