YML-фид: что это такое, как создать и проверить — структура и готовый пример

14 минут чтения 2 просмотра
YML-фид интернет-магазина: XML-документ, карточки товаров и отметка успешной проверки

YML-фид — это XML-файл со структурированными данными о товарах: названиями, ценами, категориями, изображениями, ссылками и наличием. Интернет-магазин формирует такой файл, размещает его по доступному адресу и передает ссылку товарному сервису или рекламной системе. Площадка регулярно скачивает фид и обновляет свой каталог без ручного переноса каждой карточки.

YML основан на XML, но задает прикладную структуру именно для товарных данных. Это не YAML: похожие буквы в названии обозначают разные форматы. Универсального набора полей для всех получателей тоже нет. Требования Яндекс Товаров, Маркета и Директа могут отличаться, поэтому эта статья дает общую основу, а перед загрузкой нужно свериться с документацией выбранной площадки.

Короткий ответ: что такое YML-фид

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

В предложении товара обычно передаются:

  • название и внутренний уникальный идентификатор;
  • цена и код валюты;
  • категория и состояние наличия;
  • ссылка на карточку товара;
  • одна или несколько ссылок на изображения;
  • производитель, описание и характеристики, если они нужны получателю.

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

Практическое правило: сначала выберите площадку, затем проектируйте фид под ее требования. Не пытайтесь заранее сделать «идеальный файл для всех»: названия элементов, обязательность полей и допустимые типы предложений зависят от назначения.

Где используются YML-фиды

YML применяют там, где нужно регулярно передавать товарный ассортимент из одной системы в другую. Это товарные витрины, маркетплейсы, рекламные системы, партнерские каталоги, сервисы контроля данных и внутренние интеграции. Вместо тысячи отдельных запросов получатель скачивает один документ и обрабатывает предложения пакетно.

Для интернет-магазина типовой сценарий выглядит так: учетная система или CMS хранит товары, генератор выбирает опубликованные позиции, формирует категории и предложения, затем размещает XML по стабильной ссылке. Площадка получает файл, проверяет его по своим правилам и создает либо обновляет карточки. При следующем запуске меняются цены, наличие и ассортимент, а стабильные offer id помогают сопоставить старые и новые данные.

Один и тот же исходный каталог можно выгружать в несколько систем, но итоговые файлы нередко различаются. Например, конкретному сервису могут понадобиться дополнительные параметры, особая модель предложения или собственные справочники. У Яндекс Маркета есть отдельное описание автоматического обновления ассортимента через YML, а у Директа — свои требования к YML-фиду. Перед запуском проверяйте документацию именно того сервиса, куда отправляете файл.

YML, XML и YAML — в чем разница

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

Формат Что это Где применяется
XML Язык структурированных данных Интеграции и обмен данными
YML Формат товарного фида на основе XML Каталоги и сервисы Яндекса
YAML Формат конфигурационных файлов Docker, CI/CD и приложения

Следовательно, любой YML-фид должен оставаться корректным XML, но не любой XML является YML. Произвольный документ с товарами может прекрасно открываться XML-парсером и все равно не подходить площадке, если в нем нет ожидаемых элементов. И наоборот, файл с расширением .yml, содержащий YAML-конфигурацию, не является товарным YML-фидом.

Из чего состоит YML-фид

Документ читается как дерево. В начале находится XML-декларация с версией и кодировкой. За ней идет корневой элемент yml_catalog, внутри него — shop. Уже в магазине размещаются общие сведения и справочники, которыми пользуются предложения.

Иерархия YML-фида: yml_catalog, shop, currencies, categories, offers и offer
Справочники валют и категорий объявляются рядом со списком предложений, а каждый offer ссылается на них по идентификаторам.
  • XML-декларация сообщает парсеру версию XML и кодировку документа.
  • yml_catalog служит корневым контейнером всего фида.
  • shop объединяет данные конкретного магазина.
  • Сведения о магазине описывают источник каталога, когда этого требует выбранная спецификация.
  • currencies перечисляет используемые валюты.
  • categories хранит дерево товарных категорий с уникальными идентификаторами.
  • offers содержит все выгружаемые предложения.
  • offer описывает отдельный товар или товарное предложение.

Порядок, допустимые атрибуты и обязательность вложенных элементов нельзя определять только по этому общему списку. Используйте его как карту документа, а точную схему берите в документации получателя. В частности, разные сервисы могут поддерживать разные типы описания предложения.

Готовый пример простого YML-фида

Ниже учебный XML-фид вымышленного магазина «Лесная мастерская». В нем одна валюта, две категории и два предложения. Адреса используют домен example.test, поэтому их нужно заменить реальными публичными URL своего магазина.

<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-07-29T12:00+05:00">
  <shop>
    <name>Лесная мастерская</name>
    <company>ООО «Лесная мастерская»</company>
    <url>https://example.test/</url>
    <currencies>
      <currency id="RUB" rate="1"/>
    </currencies>
    <categories>
      <category id="10">Товары для кухни</category>
      <category id="20" parentId="10">Разделочные доски</category>
    </categories>
    <offers>
      <offer id="wood-101" available="true">
        <name>Доска «Север», 30 × 20 см</name>
        <url>https://example.test/products/wood-101</url>
        <price>1490</price>
        <currencyId>RUB</currencyId>
        <categoryId>20</categoryId>
        <picture>https://example.test/images/wood-101.jpg</picture>
        <vendor>Лесная мастерская</vendor>
        <description>Доска из массива ясеня с канавкой для сока.</description>
        <param name="Материал">Ясень</param>
      </offer>
      <offer id="wood-102" available="false">
        <name>Подставка «Тихий лес»</name>
        <url>https://example.test/products/wood-102</url>
        <price>790</price>
        <currencyId>RUB</currencyId>
        <categoryId>10</categoryId>
        <picture>https://example.test/images/wood-102.jpg</picture>
        <vendor>Лесная мастерская</vendor>
        <description>Деревянная подставка под горячую посуду.</description>
        <param name="Диаметр" unit="см">18</param>
      </offer>
    </offers>
  </shop>
</yml_catalog>

Первая строка объявляет UTF-8: генератор должен действительно сохранить документ в этой кодировке. В примере атрибут date записан по текущей документации Маркета в формате RFC 3339 с часовым поясом. Директ описывает собственный формат даты, поэтому перед генерацией проверьте спецификацию конкретного получателя. Элементы name, company и url описывают учебный магазин.

В currencies объявлен рубль с идентификатором RUB. Оба товара используют такой же currencyId. В categories есть родительская категория с id 10 и дочерняя с id 20; атрибут parentId="10" связывает их. Поэтому каждый categoryId внутри товара указывает на реально объявленную категорию.

Предложения имеют стабильные уникальные идентификаторы wood-101 и wood-102. Атрибут available показывает состояние доступности в этом примере. Внутри находятся название, адрес карточки, цена, валюта, категория, картинка, производитель, описание и характеристика. Это связный учебный набор, а не универсальная схема: перед переносом в рабочий фид проверьте, какие элементы поддерживает ваш получатель.

Какие поля нужны товару

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

Элемент Что означает Пример Обязателен ли всегда
offer id Стабильный идентификатор предложения wood-101 Проверяйте правила площадки; на практике нужен для сопоставления товаров
available Доступность предложения true Зависит от формата и способа передачи наличия
name Понятное название товара Доска «Север» Требования проверяйте для выбранной площадки
url Публичная карточка товара https://shop.test/p/101 Обычно требуется для перехода, но точное правило задает площадка
price Текущая цена 1490 Проверяйте обязательность и допустимый формат значения
currencyId Ссылка на объявленную валюту RUB Зависит от требований получателя
categoryId Ссылка на категорию фида 20 Проверяйте схему площадки и тип предложения
picture Адрес изображения товара https://shop.test/101.jpg Количество и обязательность зависят от сервиса
vendor Производитель или бренд Лесная мастерская Не универсально; сверяйтесь с документацией
description Описание предложения Доска из массива ясеня Правила длины и обязательность платформозависимы
param Характеристика товара Материал: ясень Набор характеристик зависит от категории и площадки

Не подставляйте фиктивные значения только ради прохождения формальной проверки. Если данных нет, выясните, допускает ли площадка отсутствие элемента, или дополните карточку в источнике. Иначе технически принятый фид создаст плохие карточки и усложнит дальнейшее обновление.

Три способа создать YML-фид

1. Сформировать вручную

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

2. Использовать модуль CMS

WordPress с WooCommerce, OpenCart, 1С-Битрикс и другие системы могут формировать товарные выгрузки через штатные возможности или модули. Это быстрый путь, если каталог уже ведется в CMS и ее модель данных подходит площадке. Перед установкой проверьте совместимость с текущей версией системы, поддержку нужного формата, расписание обновления и способ обработки вариаций. Конкретный плагин здесь не рекомендуется: его актуальность и безопасность меняются.

3. Написать собственный генератор

Собственная генерация нужна, когда каталог собирается из нескольких источников, действуют сложные правила цены и наличия, требуется несколько вариантов фида или CMS не дает нужной структуры. Разработчик получает полный контроль, но отвечает за XML, логирование, тесты, стабильность URL и безопасную публикацию готового файла.

Способ Скорость запуска Автообновление Гибкость Сложность Кому подходит
Вручную Быстро для примера Нет Низкая Низкая в начале, высокая при росте Обучение и очень маленький каталог
Модуль CMS Обычно быстро Обычно есть Средняя Средняя Магазин со стандартной моделью данных
Свой генератор Требует разработки Да Высокая Высокая Нестандартный каталог и бизнес-логика

Как создать фид пошагово

  1. Определите площадку и ее требования. Зафиксируйте тип фида, поддерживаемые элементы, ограничения для категорий и способ передачи доступности. Используйте актуальную официальную документацию, а не случайный пример из старой статьи.
  2. Сопоставьте поля каталога с элементами фида. Запишите источник идентификатора, названия, цены, валюты, URL, изображений и характеристик. Отдельно решите, что делать с пустыми или некорректными значениями.
  3. Сформируйте категории. Назначьте стабильные уникальные id и родительские связи. Категории, на которые ссылаются товары, должны присутствовать в выгрузке.
  4. Сгенерируйте предложения. Выгружайте только подходящие позиции, сохраняйте стабильные offer id и не смешивайте данные разных товаров.
  5. Экранируйте специальные символы. XML требует преобразовывать служебные знаки в текстовых значениях. Используйте XML-библиотеку языка, а не ручную склейку строк.
  6. Разместите файл по стабильной ссылке. Адрес не должен меняться после каждой генерации и не должен требовать входа в личный кабинет.
  7. Проверьте доступность и структуру. Скачайте фид именно по публичному URL, разберите его XML-парсером и проверьте ссылки между предложениями и справочниками.
  8. Настройте регулярное обновление. Выберите частоту с учетом того, как быстро меняются цены, остатки и ассортимент, а также как часто получатель забирает файл.
Путь YML-фида: каталог магазина, генератор, публичная ссылка, площадка и проверка в ФидСтороже
Надежный процесс отделяет генерацию от публикации: сначала готовый файл проверяется, затем становится доступен площадке.

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

Как разместить и обновлять фид

Лучший адрес фида — стабильный публичный HTTPS-URL. Он не требует авторизации, не зависит от пользовательской сессии и всегда возвращает текущий XML. Если сервер вместо файла отдает HTML-страницу входа, страницу ошибки или защиту от ботов, браузер может показать понятный экран, но автоматический загрузчик не получит товарные данные.

Проверяйте не только статус HTTP 200, но и содержимое ответа. Некоторые приложения возвращают код 200 вместе с HTML-сообщением об ошибке. Полезно контролировать тип содержимого, начало XML-документа, количество предложений и размер файла. Сильное отклонение от обычного значения должно остановить публикацию.

Для рабочего магазина генерацию лучше автоматизировать. Частота зависит от бизнеса: если цены и остатки меняются часто, редкая выгрузка быстро устаревает. Важно согласовать расписание формирования с расписанием скачивания площадкой и учитывать время обработки каталога после загрузки.

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

Не публикуйте частичный результат: оборванный XML способен временно удалить или отклонить значительную часть ассортимента у получателя. Сначала генерация и проверка, затем замена публичного файла.

Как проверить созданный YML-фид

Проверяйте тот же URL, который собираетесь передать площадке. Локальный файл может быть корректным, а публичный адрес — вести через редирект, отдавать старый кэш или возвращать ошибку сервера.

  • Ссылка открывается без логина, cookie и специальных заголовков.
  • Сервер возвращает HTTP 200 и сам XML, а не HTML-страницу.
  • Документ является корректным XML, объявленная кодировка совпадает с фактической.
  • Все элементы закрыты и правильно вложены.
  • Каждый categoryId ссылается на существующую категорию.
  • Все offer id уникальны и стабильны.
  • Цены имеют ожидаемый формат, а валюты объявлены в справочнике.
  • URL карточек и изображений доступны внешнему клиенту.
  • Набор полей соответствует актуальным правилам выбранной площадки.

Готовый публичный файл можно проверить в ФидСтороже по ссылке: это поможет быстро увидеть проблемы XML и товарных данных до передачи фида внешнему сервису.

Если проверка нашла дефекты, исправьте источник или генератор, создайте файл заново и повторите весь цикл. Подробный разбор причин и исправлений собран в статье «Как проверить YML-фид: 10 частых ошибок». Даже успешная техническая проверка не гарантирует принятие: площадка дополнительно применяет собственные правила, справочники и ограничения.

Частые вопросы

YML и XML — это одно и то же?

Нет. XML — общий язык разметки, а YML — товарный формат на его основе. YML обязан быть корректным XML и одновременно соответствовать структуре конкретной площадки.

YML и YAML — это один формат?

Нет. YAML обычно используют для конфигураций, а товарный YML записывается XML-тегами. Похожее название не делает форматы совместимыми.

Можно ли создать YML-фид вручную?

Да, для учебного примера или нескольких товаров. Реальный меняющийся каталог надежнее формировать автоматически из CMS, учетной системы или базы данных.

Как часто нужно обновлять фид?

Так часто, чтобы цена, наличие и ассортимент не успевали заметно устареть. Учитывайте скорость изменений в магазине и расписание скачивания площадкой.

Почему браузер показывает XML как обычный текст?

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

Один YML-фид подойдет всем сервисам?

Не обязательно. Получатели могут требовать разные поля, типы предложений и справочники. Общий генератор можно переиспользовать, но итоговую выгрузку нужно проверять для каждой цели.

Что делать, если фид открывается, но площадка его не принимает?

Изучите отчет импорта и актуальную документацию площадки. Доступный и валидный XML может не пройти ее прикладные правила: формат предложения, обязательные данные или допустимые значения.

Итог

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

  • выбрана конкретная площадка и изучена ее текущая документация;
  • категории, валюты и предложения связаны корректными идентификаторами;
  • цены, наличие, ссылки и изображения берутся из актуального источника;
  • фид автоматически обновляется по стабильному HTTPS-адресу;
  • публичная версия проверена как XML и как товарная выгрузка.

«Создали YML-фид? Проверьте его в ФидСтороже до загрузки в рекламную систему или товарный сервис.»

 Вернуться в блог