Все статьи
Форматы данных

YML-файл для Яндекс.Маркета — что это такое, структура, как создать

YML (Yandex Market Language) — формат прайс-листа для Яндекс.Маркета. Структура YML-файла с примером, типы фидов, требования Яндекса, ошибки валидации и FAQ.

18 августа 2025
8 мин чтения
ConvertHub
Обновлено 07.09.2026
#yml#яндекс маркет#xml#фид#прайс-лист

Посчитайте прямо здесь: XML → Formatted XML

Открыть инструмент целиком →

YML (Yandex Market Language) — XML-формат прайс-листа, который Яндекс придумал для передачи товарного каталога на свой Маркет. Магазин выкладывает файл на своём сайте по постоянной ссылке, робот Маркета скачивает его по расписанию и превращает каждый оффер в карточку товара: название, цена, категория, картинки, характеристики, ссылка на сайт. Без такого фида на Маркет не попасть — добавить каталог построчно через кабинет реально разве что для пары десятков позиций.

Не путайте: YML и YAML — разные форматы

Путаница начинается с расширения. Конфиги Docker Compose и Kubernetes тоже лежат в файлах .yml, но это YAML — язык конфигурации с отступами вместо скобок. YML же — конкретный XML-стандарт Маркета, и общего у них только три буквы. Когда в Яндексе ищут «формат yml что это», почти всегда речь именно о прайс-фиде.

КритерийYMLYAML
Что этоПрайс-фид для Яндекс.МаркетаУниверсальный формат сериализации данных
Основа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_catalogYYYY-MM-DD hh:mm, например 2026-09-08 12:00
Свежесть файлаФид доступен по постоянной ссылке и не старше 10 дней — устаревший файл робот перестаёт забирать
КодировкаUTF-8 или windows-1251; декларация в прологе должна совпадать с фактической кодировкой файла
id категорийЦелые числа до 18 цифр, уникальные в пределах фида
КартинкиПрямые https-ссылки, от 1 до 3 элементов picture на оффер; у Маркета есть требования к минимальному размеру изображений
СпецсимволыАмперсанд и угловые скобки только в экранированном виде: &amp; вместо & — иначе файл не пройдёт даже разбор

Типы 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 в текстах и ссылках экранируются: &amp;, &lt;. Амперсанд в 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 — фид не проходит даже разборЗаменить на &amp; или обернуть значение в 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: половина ошибок уйдёт ещё до Маркета. Дальше — рутинная гигиена: отчёт загрузки после каждой выгрузки и реакция на отброшенные офферы в тот же день, пока расхождение не разошлось по карточкам.

Попробуйте эти инструменты

Похожие статьи