Загрузка товаров фидом YML (Яндекс.Товары)

Одна ссылка на XML — и весь каталог сайта оказывается в Telegram. Обновляется сам.

Фид — это XML-файл, в котором сайт перечисляет свои товары: название, цену, картинки, наличие. Формат придумал Яндекс для Яндекс.Маркета, он называется YML (Yandex Market Language) и сегодня его умеет отдавать почти любая CMS. TelegaShop читает такой файл по ссылке и раскладывает товары по витрине в Telegram — вручную ничего заводить не нужно.

Коротко: вставьте в настройках магазина ссылку вида https://ваш-сайт.ру/feed.xml — например https://container-darom.ru/feed.xml. Товары загрузятся сразу, дальше каталог сам обновляется каждые 4 часа.

Где взять ссылку на фид

Почти везде выгрузка уже есть, её нужно только включить и скопировать адрес:

ПлатформаГде искать
1С-БитриксМаркетинг → Экспорт товаров → Яндекс.Маркет (YML)
InSalesПродвижение → Файлы экспорта → Яндекс.Маркет
OpenCart / ocStoreМодули → YML-выгрузка (модуль ставится отдельно)
TildaНастройки сайта → Экспорт каталога → YML
МойСкладРозница → Интеграции → Выгрузка YML
Самописный сайтПопросите разработчика отдать /feed.xml по схеме ниже

Проверить ссылку просто: откройте её в браузере. Если видите XML с тегами <offer> — всё в порядке. Если скачивается файл или открывается HTML-страница магазина, значит адрес не тот.

Как подключить

  1. Откройте магазин в приложении → Настройки.
  2. Вставьте адрес фида в поле «Ссылка на YML-фид» и сохраните.
  3. Импорт стартует сразу. Несколько тысяч товаров загружаются за 10–20 секунд, картинки подтягиваются по мере открытия витрины.
  4. Дальше фид перечитывается каждые 4 часа. Кнопка «Обновить сейчас» рядом с полем запускает импорт вне очереди.

Как должен выглядеть файл

Минимальный рабочий пример — достаточно скопировать структуру и подставить свои товары:

<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-08-15 12:00">
  <shop>
    <name>Название магазина</name>
    <company>ООО «Компания»</company>
    <url>https://ваш-сайт.ру</url>
    <currencies>
      <currency id="RUR" rate="1"/>
    </currencies>
    <categories>
      <category id="1">Контейнеры</category>
    </categories>
    <offers>
      <offer id="10245" available="true">
        <name>Морской контейнер 20 футов</name>
        <vendor>Контейнеры 20 футов</vendor>
        <vendorCode>CNT-20-DV</vendorCode>
        <price>185000</price>
        <oldprice>199000</oldprice>
        <currencyId>RUR</currencyId>
        <categoryId>1</categoryId>
        <picture>https://ваш-сайт.ру/img/cnt-20-1.jpg</picture>
        <picture>https://ваш-сайт.ру/img/cnt-20-2.jpg</picture>
        <description>Сухогрузный контейнер, состояние б/у, доставка по России.</description>
        <param name="Объём">33 м³</param>
        <param name="Состояние">Б/у</param>
        <sales_notes>Минимальный заказ — 1 шт.</sales_notes>
      </offer>
    </offers>
  </shop>
</yml_catalog>

Какие теги мы читаем

Всё остальное из стандарта Яндекс.Товаров можно оставить в файле — лишнее просто игнорируется.

ТегЧто становится в магазине
offer idКлюч товара. По нему мы находим товар при следующем импорте — не меняйте его без нужды. Обязателен.
nameНазвание товара. Если тега нет, соберём из vendor + model. Обязательно одно из двух.
priceЦена. Товары с нулевой или пустой ценой пропускаются. Обязателен.
oldpriceСтарая цена — показывается зачёркнутой со значком скидки. Учитывается, только если больше текущей.
pictureФотографии, до 6 штук на товар. Обложкой становится последняя картинка из списка — в большинстве выгрузок именно она общая и без водяных знаков.
vendorКатегория витрины. Мы раскладываем товары по производителю или линейке — так фильтры в Telegram получаются человеческими. Категории создаются сами.
vendorCodeАртикул, показывается под названием и участвует в поиске по магазину.
descriptionОписание. HTML-теги вырезаются, остаётся чистый текст.
paramХарактеристики (до 30 штук). Попадают в описание строками «Название: значение» и становятся фильтрами витрины: какие именно показывать покупателю, выбирается в разделе «Фильтры витрины».
sales_notesУсловия продажи — тоже уходят в описание.
availablefalse — товар остаётся на витрине с пометкой «Нет в наличии» и кнопка покупки гаснет.

Что происходит при обновлении

Товары, заведённые руками, импорт не трогает: они живут отдельно от фида.

Ограничения

Если что-то пошло не так

Статус последнего импорта виден в настройках магазина под полем ссылки. Самые частые причины:

Что видноЧто делать
«Не удалось скачать файл»Откройте ссылку в режиме инкогнито. Часто фид закрыт авторизацией или отдаётся только своим IP.
«Файл не похож на YML»По ссылке отдаётся HTML-страница или CSV. Нужен именно XML с <yml_catalog>.
«Ошибка разбора XML»В файле незакодированные символы &, < или обрыв выгрузки. Проверьте фид валидатором Яндекса.
Товаров загрузилось меньше, чем на сайтеПропускаются позиции без id, без названия и с нулевой ценой — проверьте эти поля в выгрузке.
Картинки не появилисьХостинг отдаёт изображения только по своему домену (hotlink-защита) либо ссылки ведут на http:// с битым сертификатом.

Чек-лист перед подключением

Готово — можно вставлять ссылку. Если фид принимает Яндекс.Маркет, примет и TelegaShop. Не получается — напишите в @telegasp_bot, посмотрим вашу выгрузку.

Создать магазин