YML-фид для Яндекс Директа — это XML-файл с каталогом товаров, где каждый офер имеет постоянный ID, категорию, ссылку, цену, изображение и данные для названия объявления. Чтобы Директ прочитал файл, важно не только заполнить поля, но и соблюсти вложенность элементов: yml_catalog → shop → currencies, categories, offers → offer.

Ниже — практическая схема товарного YML: без разбора кампаний, стратегий и способов продвижения. Если сначала нужно понять, зачем вообще нужен такой источник данных и где он применяется, начните с материала что такое фид в Яндекс Директе.

Короткое правило: сначала добейтесь, чтобы XML разбирался без ошибок, затем проверьте обязательные поля каждого офера и только после этого оценивайте качество названий, описаний и изображений.

Как устроен 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-символы внутри ссылок и текста нужно экранировать: амперсанд — как &amp;, двойную кавычку — как &quot;, знаки меньше и больше — как &lt; и &gt;.

Особенно часто файл ломается из-за ссылки с несколькими GET-параметрами: обычный символ & между параметрами воспринимается XML-парсером как начало сущности. Экранируйте данные на уровне генератора, а не ручной заменой после каждой выгрузки.

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

Проверка должна идти в три слоя: корректный XML, соответствие структуре YML и совпадение данных с сайтом. Успешное открытие файла в браузере подтверждает только часть первого слоя.

  1. Проверьте XML локальным парсером: закрытие тегов, кавычки атрибутов, экранирование символов.
  2. Убедитесь, что есть один корень yml_catalog, один shop, справочники стоят перед offers.
  3. Сверьте ссылки currencyId и categoryId со справочниками.
  4. Найдите дубли offer id и пустые обязательные поля.
  5. Откройте выборочно карточки и изображения, сравните цену и наличие.
  6. Загрузите тестовый файл и изучите отчет, а не только общий статус.

При валидации Директ проверяет наличие обязательных элементов, корректность их названий и допустимое число повторений. Если условие нарушено, файл отклоняется — это прямо указано на странице валидации фида в Директе. При ошибке загрузки интерфейс показывает соответствующий статус и ссылку на отчет.

Чек-лист перед публикацией фида по 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 и ссылки категорий и валют.