YML-фид для Яндекс Директа — это XML-файл с каталогом товаров, где каждый офер имеет постоянный ID, категорию, ссылку, цену, изображение и данные для названия объявления. Чтобы Директ прочитал файл, важно не только заполнить поля, но и соблюсти вложенность элементов: yml_catalog → shop → currencies, categories, offers → offer.
Ниже — практическая схема товарного YML: без разбора кампаний, стратегий и способов продвижения. Если сначала нужно понять, зачем вообще нужен такой источник данных и где он применяется, начните с материала что такое фид в Яндекс Директе.
Как устроен YML-фид для Яндекс Директа
Корневой элемент YML-файла — yml_catalog, внутри него размещается один блок shop, а списки валют и категорий должны стоять перед offers. Каждый товар внутри offers описывается собственным элементом offer.
В атрибуте date корневого элемента указывают дату и время генерации файла в формате YYYY-MM-DD hh:mm. Это не декоративная метка: она показывает, когда выгрузка была сформирована. Базовый порядок элементов зафиксирован в требованиях Яндекс Директа к YML.
shop— контейнер данных магазина и каталога;currencies— справочник валют, на которые ссылаются оферы;categories— дерево или список товарных категорий;offers— список предложений;offer— одна конкретная товарная позиция.
Не переставляйте currencies и categories после offers. XML может остаться синтаксически корректным, но структура перестанет соответствовать ожидаемому YML.
Рабочий пример минимальной структуры YML
Для проверки генератора лучше начать с одного полного офера, загрузить файл в Директ и только затем выгружать весь каталог. Так проще отделить ошибку структуры от ошибки в данных отдельного товара.
Пример ниже демонстрационный: домен shop.example нужно заменить адресами вашего сайта, а значения — реальными данными товара.
<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-08-20 12:00">
<shop>
<name>Магазин техники</name>
<company>ООО Магазин техники</company>
<url>https://shop.example/</url>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
<category id="10">Кофемашины</category>
</categories>
<offers>
<offer id="coffee-100" available="true">
<url>https://shop.example/catalog/coffee-100</url>
<price>34990</price>
<oldprice>38990</oldprice>
<currencyId>RUB</currencyId>
<categoryId>10</categoryId>
<picture>https://shop.example/images/coffee-100.jpg</picture>
<name>Кофемашина Barista Home 100, черная</name>
<vendor>Barista Home</vendor>
<description>Автоматическая кофемашина с регулировкой помола и объема порции.</description>
<param name="Цвет">черный</param>
</offer>
</offers>
</shop>
</yml_catalog>
Файл сохраните как обычный текст в UTF-8. Значение в XML-декларации должно совпадать с фактической кодировкой файла: простая смена надписи encoding не перекодирует содержимое.
Ещё больше полезного в Telegram канале
Разбираю связки, кейсы и инструменты без воды
Перейти в TelegramКак связаны currencies, categories и offers
Каждый currencyId и categoryId внутри офера должен ссылаться на значение, которое объявлено выше в справочниках currencies и categories. Если офер содержит categoryId=10, в блоке категорий должна существовать категория с id=10.
Для категории Директ ожидает положительное целое значение длиной не более 18 знаков. Один офер может содержать только один categoryId. Поэтому сложную рубрикацию сайта лучше заранее свести к одной основной рекламной категории товара.
Цена передается числом без обозначения валюты. Дробная часть отделяется точкой: 1299.90. Код валюты хранится отдельно в currencyId. Не смешивайте RUB в справочнике и RUR в офере, даже если оба кода поддерживаются: ссылка должна быть однозначной.
Какие поля offer обязательны, а какие рекомендуются
У каждого товара обязательно должен быть уникальный id; также критичны categoryId, url и поля названия, состав которых зависит от типа офера. Для товарной галереи и полноценных товарных объявлений практически необходимы цена и изображение.
| Элемент | Роль | Что проверить |
|---|---|---|
id |
Стабильный идентификатор офера | Уникален и не меняется при обновлении |
url |
Посадочная страница товара | Абсолютная ссылка открывается и ведет на этот товар |
categoryId |
Связь со справочником категорий | ID существует в categories |
price |
Текущая цена | Больше нуля и совпадает с сайтом |
currencyId |
Валюта цены | Объявлена в currencies |
picture |
Прямая ссылка на изображение | Файл доступен роботу по HTTP или HTTPS |
description, param |
Характеристики для подбора и генерации | Нет рекламы, ссылок и данных другого товара |
Заполняйте рекомендуемые поля не ради объема. Полезный param содержит характеристику выбора — например, цвет, размер или материал. Повтор названия товара другими словами ценности не добавляет.
Как выбрать simplified или vendor.model
Если у offer нет атрибута type, Директ считает его упрощенным и проверяет наличие name; при type="vendor.model" обязательны vendor и model. Для произвольного типа также полезен typePrefix — точное обозначение вида товара.
Упрощенный тип
Подходит, когда готовое название уже однозначно описывает товар: «Кофемашина Barista Home 100, черная». Атрибут type не указывают, название передают в одном name. Если name отсутствует, офер будет проигнорирован.
Произвольный тип vendor.model
Используйте, когда название удобно собирать из типа товара, бренда и модели. Пример: typePrefix=Кофемашина, vendor=Barista Home, model=100. В самом offer должен стоять атрибут type="vendor.model".
В одном фиде допускаются оба типа, но для генератора и контроля качества обычно проще выбрать единое правило для одной товарной категории. Директ также допускает комбинированное описание, когда передаются и name, и компоненты произвольного типа.
Как задавать ID и availability
ID товара должен быть уникальным, стабильным и совпадать с идентификатором товара в ecommerce-данных, если используется оферный ретаргетинг. Яндекс допускает числа, буквы и их сочетания; максимальная длина значения — 100 знаков.
Не создавайте новый ID из текущей цены, позиции в выгрузке или даты. После такого обновления система увидит не изменившийся товар, а новую сущность. Надежнее использовать неизменяемый ID из CMS или базы товаров.
Атрибут available принимает true или false. Если атрибут не передан, Директ считает присутствующий в фиде товар доступным. Поэтому явно передавайте статус для отсутствующих товаров и следите, чтобы он совпадал с карточкой и оформлением заказа. Если группа фильтрует предложения по наличию, корректный available становится обязательной частью логики отбора.
Как передавать price, oldprice и picture
oldprice можно передавать только при реальной старой цене: она должна быть выше price, а обе цены должны быть показаны на сайте. Нулевая цена не допускается. Для дробного значения используйте точку, а не запятую и не пробел.
В YML поле изображения называется picture, а не image. Ссылка должна начинаться с http или https. По требованиям Яндекса поддерживаются JPG, PNG, WebP и GIF, файл — до 10 МБ, а каждая сторона изображения — от 450 пикселей. Первым ставьте основной понятный ракурс; всего Яндекс рекомендует добавлять пять изображений товара.
Проверьте ссылку без авторизации и браузерных cookies. Если сервер запрещает роботу скачивать картинку, формально заполненный picture не даст рабочее изображение в объявлении. При замене изображения Яндекс рекомендует менять и его URL, чтобы робот увидел обновление.
Кодировка, URL и специальные символы
Безопасный вариант для русскоязычного YML — фактически сохранить файл в UTF-8 и указать ту же кодировку в XML-декларации. После генерации откройте файл отдельным XML-парсером: редактор может визуально показывать кириллицу правильно, даже когда байты и декларация расходятся.
URL товара должен быть абсолютным, без пробелов и длиной не более 2048 символов. Пробел кодируют как %20. Специальные XML-символы внутри ссылок и текста нужно экранировать: амперсанд — как &, двойную кавычку — как ", знаки меньше и больше — как < и >.
Особенно часто файл ломается из-за ссылки с несколькими GET-параметрами: обычный символ & между параметрами воспринимается XML-парсером как начало сущности. Экранируйте данные на уровне генератора, а не ручной заменой после каждой выгрузки.
Как проверить YML до и после загрузки
Проверка должна идти в три слоя: корректный XML, соответствие структуре YML и совпадение данных с сайтом. Успешное открытие файла в браузере подтверждает только часть первого слоя.
- Проверьте XML локальным парсером: закрытие тегов, кавычки атрибутов, экранирование символов.
- Убедитесь, что есть один корень
yml_catalog, одинshop, справочники стоят передoffers. - Сверьте ссылки
currencyIdиcategoryIdсо справочниками. - Найдите дубли
offer idи пустые обязательные поля. - Откройте выборочно карточки и изображения, сравните цену и наличие.
- Загрузите тестовый файл и изучите отчет, а не только общий статус.
При валидации Директ проверяет наличие обязательных элементов, корректность их названий и допустимое число повторений. Если условие нарушено, файл отклоняется — это прямо указано на странице валидации фида в Директе. При ошибке загрузки интерфейс показывает соответствующий статус и ссылку на отчет.
Чек-лист перед публикацией фида по URL
Фид по ссылке должен быть доступен роботу постоянно, а не только в момент ручной проверки. Директ принимает HTTP и HTTPS; файл по ссылке может весить до 512 МБ и обычно скачивается для обновления раз в сутки. Загруженный с компьютера файл ограничен 200 МБ и сам не обновляется. Актуальные лимиты и режимы обновления собраны в инструкции по добавлению фида.
- сервер возвращает файл, а не HTML-страницу ошибки;
- адрес не меняется после каждого обновления;
- авторизация указана в настройках Директа, если она нужна;
- дата генерации обновляется вместе с данными;
- ID существующих товаров сохраняются;
- цены, наличие, карточки и изображения доступны;
- после обновления проверен отчет Директа.
Если генератор проходит этот список на тестовых, отсутствующих и акционных товарах, риск массового отклонения заметно ниже. Подписывайтесь на Telegram-канал — там еще больше практических разборов Яндекс Директа.
Частые вопросы о YML-фиде
YML и XML — это одно и то же?
YML — это основанный на XML формат с определенной структурой элементов для каталога. Любой YML является XML-документом, но произвольный корректный XML не становится YML без нужных блоков и полей.
Какое поле использовать для картинки: image или picture?
В товарном YML для Директа используется элемент picture. Для нескольких изображений добавляют несколько элементов picture с прямыми URL.
Обязательно ли указывать available?
Если атрибута нет, Директ считает товар доступным; для отсутствующих товаров и фильтрации по наличию статус нужно передавать явно. Значение должно совпадать с карточкой товара и возможностью оформить заказ.
Можно ли смешивать simplified и vendor.model?
Да, упрощенные и произвольные оферы могут находиться в одном фиде. Но у упрощенного должен быть name, а у vendor.model — как минимум vendor и model.
Почему корректный XML отклоняется Директом?
Синтаксически правильный XML может не соответствовать требованиям YML. Проверьте обязательные элементы, их точные названия, порядок справочников, тип офера, дубли ID и ссылки категорий и валют.