Товарный каталог в формате YML

                                                           

Инструкция по компоновке фида

Фид — это файл в определённом формате(XML), единственный источник из которого AQ получает полную информацию о каталоге партнера: структуру категорий, бренды, товары и их характеристики, доступность и др.

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

Общую информацию по формату YML можно посмотреть по данной ссылке: https://yandex.ru/support/partnermarket/export/yml.html

Наши специфические требования заключаются в следующем:

Фид не должен быть заархивирован;

Фид не должен быть защищен паролем;

Фид должен содержать все товары на сайте для показа в поиске и привязку их к категориям, соответсвующую уровням вложенности на сайте;

Фид должен быть статическим, либо полностью сформироваться динамически в течении 3-ёх минут после запроса;

Сертификат сервера не ниже A.

Важно передавать фид по прямой ссылке, без использования редиректа;

Описание тегов в фиде:

  • <?xml version="1.0" encoding="utf-8"?> — обязательный для XML-файла. Мы понимаем любую кодировку, главное чтобы кодировка была указана и формат текста с ней совпадал.
  • yml_catalog и shop — обязательны для YML-файла, без них фид не будет обновляться. Информацию после них и до тега categories мы не учитываем.
  • categories  список категорий, без него фид не будет обновляться. Внутри этого тега находятся все категорий сайта. Каждая категория описана внутри пары тегов category.
  • category  тег категории. Желательно чтобы в названиях категорий не было союза «и», и названий товаров перечисленных через запятую. Логично разделять разные товары в разные категории.
    Если внутри тега не указать названия, то поиск будет вставлять вместо названия слово “undefined”.
  • id — обязательный атрибут, номер категории в системе. Если его не будет или он будет пустой, будет считаться, что такой категории не существует.
  • parentid — обязательный атрибут для каждой подкатегории, содержит id родительской категории. У общих категории может не быть родительской, тогда parentId=0 или атрибут просто не указывается. На примере категория «Чаи» общая, и является родительской для категории «Зелёные чаи».
  • URL — ссылка на категорию на сайте, они нужны чтобы выводить кликабельные подсказки на категории. Лучший вариант — передавать её в фиде. Если атрибута нет, мы будем сами сопоставляем ссылки, используя один из подходов:
  • сопоставляем ID категории в фиде с ID категории на сайте. Чтобы не было ошибок они должны совпадать;
  • сопоставляем иерархию структуры в фиде по значениям атрибутов parentId и хлебным крошкам на сайте. Чтобы не было ошибок, нужно чтобы структура фида полностью повторяла каталог на сайте.
  • offers  список товаров. Внутри этого тега находятся все товары сайта.
  • offer  тег товара, без него фид не будет обновляться. Каждый товар описан внутри пары тегов offer, внутри него заключены все другие теги, описывающие товар.
  • id — обязательный атрибут, без него фид не будет обновляться. Номер товара в системе, он должен быть не пустым и уникальным может состоять как из букв так и из цифр. Если у нескольких товаров id будет совпадать, из них в выдачу попадет случайный товар. Аналогично, если у нескольких товаров пустой id, из них в выдачу попадет случайный товар. Не должен содержать пробелов.
  • available — обязательный атрибут, показывает наличие товара. Если атрибута не будет, или он будет пустым — по умолчанию мы будем считать, что товар не доступен. Даже если наличие товара указано где-то еще, например как отдельный тег, сервис смотрит только на атрибут тега offer.
  • group_id — опциональный атрибут, нужен если есть вариации товаров, может состоять как из букв или цифр. Например, одинаковые штаны, но разных размеров или одинаковые тональный крем разных оттенков, т.е цена и название товары одинаковые, но отличаются каким-то атрибутом.
    Подобные товары лучше группировать в фиде самостоятельно, указывая им одинаковый group_id, это лучший вариант, потому что тогда процесс контролируем.
  • любые другие атрибуты — можно передавать в фиде, но мы их никак не используем.
  • name  имя товара. Внутри этого тега заключено название товара, которое мы будем отображать в выдаче. Если тега нет или он пустой, то мы составляем название из содержимого тегов typePrefix, vendor, model. Если любого из тегов нет, то имя будет составлено из тех, что есть. Несмотря на это, тег условно относим к обязательным.
  • url — прямая ссылка на карточку этого товара.
  • price — цена товара, должна совпадать с фактической. Не должна быть отрицательной или выше 24 млн рублей. Если цена с копейками и т.д, то передавать важно через “.” - 79.50
  • picture — прямая ссылка на изображение с превью товара. Их может быть несколько, но мы будем использовать только первую. Рекомендуемый вес менее 100 кб (30-50кб). Оптимально передавать картинку товара из превью категории. Серьезно влияет на скорость работы виджета;
  • categoryId — показывает к какой категории относится товар, в этом теге всегда указывается только одна категория.
    Если товар относиться к нескольким категориям, список из таких пар тегов оборачивается в тег categories. В противном случае мы возьмём первую из категорий — это повлияет на качество поиска. Также чем меньше товаров лежат в более чем одной категории — тем выше качество поиска.
  • vendor — бренд товара, используется для формирование фильтров по бренду и составления имени товара, если тег name пустой или отсутствует. Если нужны фильтры по бренду, то обязателен.
    Также поисковый запрос, который полностью совпадает с содержимым этого тега считается брендовым. Если запрос брендовый, можем включить автоматическую фильтрацию продуктов по бренду — отображать только продукты этого бренда.
  • oldprice — старая цена без учета скидки. Нужен если на продукт акция или скидка (на сайте выглядит как перечёркнутая старая цена и т.п)
  • typePrefix — тип товара, необязательный. Используется только для составления имени товара, если тег name пустой или отсутствует.
  • model — модель товара, необязательный. В этом теге клиентыц могут передавать что угодно, не обязательно модель товара, используется только для составления имени товара, если тег name пустой или отсутствует.
  • description — описание товара, которое клиент добавляет на свой сайт в описание. Напрямую не используется в поиске, текста из описания могут быть использованы для обучения модели выпрямителя. Для оптимизации размера фида оптимально удалить тег из фида.
  • param name — важный тег параметров товара, обязан содержать атрибут name. Мы используем эти параметры для поиска товаров по значениям параметров и для формирования фильтров. Количество параметров не ограничено.
    Их нужно брать из характеристик товаров на сайте и добавлять через <param name=“Название фильтра”>Значение</param>. Чем больше консистентных параметров, тем лучше. Если процент заполненности одного из параметров у товаров ниже 70% - передавать его не нужно. В том числе по значениям параметров возможен поиск. Для указания характеристики товара необходимо использовать конструкцию: <param name=«Глубина» unit=”мм”>800</param> Важно передавать поля без массива в значениях, для примера с кейсом программы: <param name=“Программы”>Режим Eco Mix 20</param> <param name=“Программы”>Быстрая 14'-30'-44'</param>
  • vendorCode - код товара/артикул. Аналогично, если нужно искать товар по артикулу то его нужно передавать <param name='Артикул'>746891</param> или через vendorcode. Рекомендуем добавлять сокращенную версию артикула через <param name='Артикул'>746</param> при наличии в vendorcode или через декомпозицию <param name='Артикул'>746891</param> / <param name='Артикул2'>746</param> + также важно добавлять штрихкоды, код производителя и другие аналогичные sku атрибуты через <param name='название'>значение</param>

Пример качественного ФИДА:

<?xml version="1.0" encoding="UTF-8"?>

<yml_catalog date="2021-09-23T14:37:38+03:00">

    <shop>

        <name>site</name>

        <company>site</company>

        <url>https://site.ru</url>

      <categories>

          <category id="1" url="https://site.ru/catalog/smartfon">Смартфоны</category>

          <category id="2" parentId="1" url="https://site.ru/catalog/samsung">Samsung</category>

          <category id="4" url="https://site.ru/catalog/charging">Зарядные устройства</category>

          <category id="5" parentId="4" url="https://site.ru/catalog/xiaomi charging">Xiaomi</category>

      </categories>

        <offers>

            <offer id="100" available="true" group_id="100-1">

                <name>Смартфон Galaxy S22</name>

                <url>https://site.ru/product/Galaxy S22</url>

                <price>79000</price>

                <oldprice>120000</oldprice>

                <categoryId>2</categoryId>

                <vendor>Samsung</vendor>

                <vendorCode>BKT000855</vendorCode>

                <picture>https://site.ru/image/123.jpg</picture>

                <param name="Тип товара">Смартфон</param>

                <param name='Страна'>Китай</param>

                <param name="Количество памяти" unit="гб">256</param>

                <param name='Артикул'>000855</param>

                <param name="Цвет">чёрный</param>

                <param name="Материал">пластик</param>

                <param name="Материал">алюминий</param>

            </offer>

            <offer id="110" available="false">

                <name>Зарядное устройство Xiaomi BPM206</name>

                <url>https://site.ru/product/Зарядное устройство Xiaomi</url>

                <price>1690</price>

             <categories> - если необходима привязка к нескольким категориям (только конечного уровня вложенности)

               <categoryId>4</categoryId>

               <categoryId>5</categoryId>

             </categories>

                <vendor>Xiaomi</vendor>

                <vendorCode>5458487</vendorCode>

                <picture>https://site.ru/product/Зарядное устройство Xiaomi.jpg</picture>

                <param name="Хит">да</param>

                <param name="Новинка">да</param>

                <param name="Тип подключения">type c</param>

                <param name="Материал">пластик</param>

                <param name="Страна">Китай</param>

                <param name='Артикул'>545</param>

            </offer>

        </offers>

    </shop>

</yml_catalog>

Дополнительная проверка готового фида

  • Мы настоятельно рекомендуем дополнительно проверять готовый фид в валидаторе перед отправкой. Например: https://codebeautify.org/xmlvalidator

Пример визуального разбора качественного offer - https://take.ms/vwsBk

Возможные ошибки:

1. Не нужно добавлять товар во все элементы дерева категорий. Достаточно добавить его только к последнему элементу дерева и в offers в поле <categoryId></categoryId> его передать. Он будет доступен для всех его родителей через тег parentid. Например, если структура каталога: матрасы > ортопедические > беспружинные, то товар должен быть добавлен только в категорию беспружинные.

2. Отсутствие в фиде всех числовых обозначений (код, артикул, штрих-код), которые присутствуют на сайте. При поиске по таким значениям, искомые товары не попадут в выдачу.

3. Передан не все товары каталога через offer.

4. Не переданы атрибуты у товаров.

5. Важно минимизировать кол-во пустых категорий в фиде и передавать только категории с товарами