YML-фид для товарной кампании в Яндекс Директе

14.10.2026 · 8 мин чтения
Стопка тёмных пластин с коралловой кромкой, прозрачный конверт и коралловая лента
YML-фид — это XML-каталог товаров. Без него товарная кампания в Яндекс Директе не соберёт объявления. Я кладу в файл название, цену, ссылку, картинку, категорию и служебные поля. Ниже разбираю, что это за формат, какие поля офера обязательны, чем он отличается от CSV, как проверить файл до загрузки и какие ошибки валидации ломают показ.

Что такое YML-фид

YML расшифровывается как Yandex Market Language. Это XML-формат Яндекса для каталога интернет-магазина. Фид — файл или постоянный адрес, по которому Директ забирает товары. Для товарной кампании это основа, а не запасной файл. Без корректного каталога объявления не соберутся, фильтры не сработают, а офферный ретаргетинг в Метрике разъедется с витриной.
Один файл я отдаю в товарную кампанию, в единую перфоманс-кампанию и в Яндекс Товары, если теги совпадают с требованиями Директа. id в фиде должен совпадать с идентификатором электронной коммерции в Метрике, иначе ретаргетинг по оферу смотрит не на тот товар.
Корневой элемент несёт атрибут date: дата и время выгрузки. Дальше идёт дерево категорий и список оферов. У категории есть свой id и название, в офере на неё указывает categoryId. Источник правды для меня — каталог на сайте, а не таблица, которую один раз сохранили и забыли. Цена и наличие в файле должны совпадать со страницей товара.

Чем YML отличается от CSV

Директ принимает CSV, обычный XML и таблицы XLS или XLSX, файл можно сжать в zip или gz. Для магазина я всё равно собираю YML: больше полей, есть коллекции, метки и три типа офера. CSV удобен как выгрузка из таблицы, но для групп и галереи полей мало. Обычный XML Директ понимает не целиком.
  • В YML есть дерево категорий, коллекции, метки custom_label и числовой custom_score.
  • CSV и XLS быстро рождаются в таблице, но почти не дают полей для сегментов и галереи.
  • Валидный XML я не считаю готовым YML: файл может открыться, а офер Директ всё равно отвергнет.

Обязательные поля офера

Шесть тёмных значков: ключ, бирка, рамка с горой, цепь, дерево узлов и переключатель
Идентификатор, цена, картинка, ссылка, категория и наличие. Без этого набора офер для меня не готов.
Каждый товар — отдельный офер. Пустой url, кривая цена или чужой categoryId отсекают его до показа. Где хватает name, я не требую связку vendor и model, и наоборот.
ПолеЧто требую
idУникальный, до 100 символов, тот же, что в электронной коммерции Метрики. Для фильтров удобнее число
name или vendor и modelНазвание или связка бренда и модели. Зависит от типа офера
urlРабочая ссылка на карточку, до 2048 символов
priceЧисло. Дробная часть через точку, не через запятую
currencyIdТолько RUR или RUB
categoryIdСсылка на категорию из дерева фида
pictureДля галереи и товарных объявлений: от 450 на 450 пикселей, JPG, PNG, WebP или GIF, до 10 МБ. Беру до 5 кадров
availableТолько true или false. Не yes, не no, не 1 и не 0. Наличие как на странице товара

Три типа описания офера

Тип офера задаёт, из чего соберётся название в объявлении. Упрощённый живёт на теге name: его хватает, когда имя товара и так понятное. Тип vendor.model требует бренд и модель. Комбинированный держит все элементы вместе и даёт больше данных для заголовка. Технику и товары с чёткой моделью я описываю как vendor.model. Обычный SKU с простым именем оставляю упрощённым.
Само название собираю спокойно: что это за товар, кто производитель, какая модель и какая модификация. Без капса, эмодзи и рекламных вставок. Поле description оставляю под факты и характеристики. Обещания вроде бесплатной доставки уношу в sales_notes. После запуска id не меняю. Вместе с новым идентификатором пропадает история конверсий по этому SKU.

Метки и коллекции

Для отбора внутри кампании есть отдельные поля. Объявление они не собирают. Ими я только режу каталог: новинка, хит, распродажа, маржа или приоритет. Так один файл обслуживает несколько групп, и мне не нужны пять копий XML.
ПолеЗачемОграничение
custom_label_0 и ещё четыре меткиСегмент: новинка, хит, распродажа, маржаТекст до 175 символов. Условие: равно, содержит, не содержит
custom_scoreЧисловой приоритет товара0 или целое положительное. Условие: равно, больше, меньше, диапазон
id, url, name, picture коллекцииСтраница подборки, не карточкаВ офере ставлю collectionId. Блок коллекций стоит после категорий
Коллекция — страница каталога. С июня 2025 она входит в настройку товарной кампании, поэтому пустой блок я не оставляю. Обязательные поля коллекции — id, url, name и picture. Акции и новинки помечаю меткой внутри того же фида, а не новым файлом на весь ассортимент.

Как проверить файл до загрузки

Лупа над стопкой тёмных карточек, планшет и коралловые метки проверки
До библиотеки фидов я смотрю поля и ссылки, а не только то, что файл открывается.
Обычный проверщик XML не видит запятую в цене, available в виде yes и чужой id. До библиотеки фидов я прохожу файл сам: кодировка, дата, уникальность, наличие, картинки и ответ сервера. Если на этом шаге тихо, отчёт кабинета потом короче.
  1. Кодировка UTF-8. Windows-1251 Директ тоже читает, но я оставляю UTF-8, чтобы кириллица в названии не поехала.
  2. В корне стоит date с датой и временем выгрузки. Пустая или кривая дата — повод пересобрать файл, а не загружать как есть.
  3. id уникальны и совпадают с электронной коммерцией Метрики. К адресу товара добавляю параметр _ym_debug=2, открываю консоль и сравниваю id покупки с id в фиде.
  4. available только true или false. Цена с точкой. Валюта RUR или RUB.
  5. picture не меньше 450 на 450 пикселей, без водяного знака. Формат JPG, PNG, WebP или GIF, вес до 10 МБ.
  6. Для подборок в файле есть блок коллекций с id, url, name и picture, а в офере указан collectionId.
  7. Адрес фида по HTTPS отвечает 200, без цепочки на ошибку и без допуска по IP. По ссылке файл не тяжелее 512 МБ, ручная загрузка — не тяжелее 200 МБ.
На аккаунт приходится до 50 фидов. Один файл я держу в пределах 100 000 товаров, крупный каталог делю по категориям или брендам. По ссылке робот скачивает фид раз в сутки. У единой перфоманс-кампании фильтры пересчитываются не реже раза в сутки, на большом файле интервал бывает реже. Выгрузку из CMS ставлю раньше этого окна, чтобы робот забрал уже свежие цены и остатки.
Файл может прийти из CMS, сервиса или ручной вёрстки, проверка одна. У модуля на Битриксе, WooCommerce, InSales или OpenCart смотрю коллекции, метки и честный available. Сервис годен, если не режет обязательные поля и обновляет файл сам. Ручной XML оставляю на пилот в десятки SKU и кладу на HTTPS.

Типичные ошибки валидации

Ошибки я делю на два слоя. Первый не даёт принять фид. Второй файл проходит, а в показ попадают не те товары. Отчёт в библиотеке отделяет критичные строки от предупреждений, и предупреждение я закрываю до старта.

Когда фид не принимается

  • Нет обязательного поля: id, url, price, currencyId, categoryId или picture там, где галерее нужна картинка.
  • XML битый: незакрытый тег, кривая кодировка или съехавшая дата в корне.
  • Адрес фида не отвечает 200, хост недоступен или для скачивания нужна авторизация.
  • Повторяется id. Два офера с одним идентификатором Директ не разведёт по разным карточкам.
  • Цена или наличие в файле не совпадают со страницей товара.

Когда файл принят, а показ кривой

  • available записан как yes, no, 1 или 0 вместо true и false.
  • В цене стоит запятая вместо точки, и число читается не так, как на витрине.
  • В url товара сидят UTM и чужие трекинговые хвосты. Метки я ставлю на группу, а из фида прошу их убирать.
  • В name эмодзи, капс или слово акция. Название остаётся именем товара, не текстом объявления.
  • На picture водяной знак или мутный кадр. Файл может пройти проверку, в галерее такая карточка хуже читается.
  • offer id не равен идентификатору в электронной коммерции Метрики, и ретаргетинг по оферу целится мимо.
  • Фильтр группы слишком узкий: товар есть на сайте и в фиде, но его отсекли ценой, категорией или меткой.
Если товар есть на сайте и его нет в кампании, смотрю отчёт по id, затем available и фильтр группы. Для галереи picture обязателен, для простого текста — не всегда. Чаще карточка выпала из узкого отбора, а не из XML.

Загрузка фида и старт кампании

Тёмная папка с карточкой и коралловой стрелкой к стеллажу с пустыми ячейками
В библиотеку уходит уже проверенный файл или постоянная ссылка, не черновик с дырками в полях.
В библиотеку фидов я отдаю ссылку или файл и жду, пока кабинет проверит доступность и структуру. Если адрес не открывается, отчёт пишет причину: битый XML, недоступный хост или неверная кодировка. Новый блок, например коллекции, меняю по тому же адресу и не удаляю фид, у которого уже есть история обработки.
Товарную кампанию собираю на уже принятом фиде. Беру его из библиотеки и оставляю нужный кусок фильтрами по категории, цене, коллекции или метке. В шаблон попадают name, price и picture, для типа vendor.model ещё бренд и модель. Итог смотрю по календарной неделе, в разрезе товара, категории и производителя, а не по одному дню.
SEO

Проверю YML-фид до загрузки

Посмотрю обязательные поля офера, цену, наличие, картинки и совпадение id с Метрикой, пока файл ещё не в библиотеке фидов.
SEO-специалист и автор материала
Читайте также
Обложка
Как я запускаю товарные кампании в Яндекс Директе
Чем товарная кампания в Мастере отличается от товарных объявлений в единой перформанс-кампании, что закрыть до старта и что проверить, если показов нет.
Читать статью
Обложка
Как я читаю единое товарное объявление в ЕПК
Рассказываю, как с 21 сентября 2026 читаю единое товарное объявление в ЕПК: два фильтра, один источник и поле «Тип страницы» в отчёте.
Читать статью
Обложка: Смарт-баннеры в Яндекс Директе
Смарт-баннеры в Яндекс Директе: фид, запуск и проверка
Показываю, как смарт-баннер в сетях собирается из товарного фида, чем он отличается от графики, видео и динамики на поиске, и что проверить до модерации.
Читать статью
Обложка
Как я подключаю кнопку «Купить в 1 клик»
Как я отдаю фид в кабинет Яндекс Товаров, поднимаю протокол YCP и провожу тестовый заказ, прежде чем ждать заказы из товарной кампании Директа.
Читать статью