БонусБесплатный первый месяц абонентской поддержки при заказе разработки «под ключ»

Экспорт товаров в YML-фиды: Яндекс Маркет и реклама на 1С-Битрикс

Экспорт товаров в YML-фиды на 1С-Битрикс: выгрузка каталога в Яндекс Маркет и рекламу, поля offer, цены и остатки

Ваш каталог на 1С-Битрикс должен продавать не только на сайте. Чтобы товары попали в Яндекс Маркет, в товарные и динамические кампании Яндекс Директа, в рекламу VK и Google, магазину нужен товарный фид — машиночитаемый файл, который площадка регулярно забирает и по которому строит карточки и объявления. Самый распространённый формат такого фида — YML (Yandex Market Language). Если фид собран криво, площадка либо не примет товары, либо будет показывать устаревшие цены и продавать то, чего уже нет на складе. Эта статья — экспертный разбор того, как правильно организовать выгрузку YML на 1С-Битрикс.

Разберём по делу: что такое товарный фид и чем YML отличается от обычного прайса, где он используется и какие ещё бывают форматы, как устроена штатная выгрузка каталога в Битриксе, как настроить поля offer, сопоставить категории и свойства с требованиями площадки, как держать цены и остатки в фиде актуальными, обновлять его по расписанию, вести несколько фидов под разные каналы и не наступать на типовые грабли валидации. Материал опирается на нашу практику разработки интеграций магазинов на Битрикс с маркетплейсами и поисковой оптимизации ecommerce-проектов — без обещаний «настроим фид за пять минут».

Коротко

  • Товарный фид — машиночитаемый файл каталога, который площадки и рекламные системы забирают и превращают в карточки и объявления.
  • YML — строгий диалект XML: корень yml_catalog, внутри shop, валюты, дерево категорий и список offer с фиксированными тегами.
  • В Битриксе есть штатная выгрузка (Торговый каталог → Экспорт) с настройкой профиля, полей offer и обновлением по агенту; для сложных случаев её расширяют или заменяют кастомом.
  • Критичнее всего актуальность цен и остатков: фид обновляют часто по cron/агенту, иначе площадка показывает устаревшие данные.
  • Под разные каналы держат разные фиды со своими полями, категориями, фильтрацией и UTM-метками; фид обязательно проверяют валидатором.

Что такое товарный фид и зачем он нужен

Товарный фид — это выгрузка вашего каталога в структурированный файл, который внешняя система (маркетплейс, прайс-агрегатор, рекламная площадка) умеет читать автоматически. Вместо того чтобы заводить товары в чужом кабинете вручную, вы отдаёте один файл со всем ассортиментом, а площадка сама разбирает его и строит карточки, объявления или строки прайса. Фид — это мост между вашим каталогом и внешними каналами продаж.

Зачем это нужно магазину на 1С-Битрикс:

Важно понимать: фид — это не «ещё один прайс в Excel». Обычный прайс описывает строки «название — цена — количество», а товарный фид описывает полноценную товарную карточку: название, категорию, картинки, характеристики, бренд, артикул, доступность и ссылку. Из фида площадка собирает то, что покупатель видит на витрине или в объявлении. Поэтому качество фида напрямую влияет на то, как ваш товар выглядит и ранжируется во внешнем канале.

YML: формат Yandex Market Language

YML расшифровывается как Yandex Market Language — это формат, который Яндекс изначально разработал для передачи данных о товарах в Яндекс Маркет, но который со временем стал де-факто стандартом товарного фида в рунете. Многие площадки, агрегаторы и рекламные системы принимают именно YML или его вариации.

Технически YML — это не отдельный язык, а строгий диалект XML с заранее определённой структурой. Ключевые свойства формата:

Из этого следует важный вывод: YML нельзя собирать «на глаз». Файл, который не соответствует схеме (нет обязательного тега, нарушена иерархия категорий, неверная кодировка, неэкранированный символ), площадка отвергнет целиком или проигнорирует часть предложений. Поэтому генерацию YML в Битриксе выстраивают так, чтобы на выходе всегда получался валидный по схеме документ, а результат проверяют валидатором до того, как его увидит площадка.

Важно: YML — это всегда UTF-8 и корректное экранирование. Символы <, >, & в названиях, описаниях и URL нужно записывать сущностями (&lt;, &gt;, &amp;), иначе один товар с амперсандом в названии способен уронить парсинг всего фида.

Где используется фид: площадки и форматы

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

КаналЧто делает с фидомФорматЧто важно в фиде
Яндекс МаркетСтроит карточки и предложения на витринеYMLКатегории под дерево Маркета, обязательные поля, актуальные цены и наличие
Яндекс Директ (товарные/динамические)Смарт-баннеры, динамические объявления, товарная кампанияYMLНазвание, цена, картинка, ссылка с UTM, доступность
VK Реклама / MyTargetДинамический ретаргетинг и карусель товаровYML / собственныйИдентификатор товара, цена, картинка, ссылка, наличие
Google Merchant CenterТоварные объявления и бесплатные карточкиСвой XML/CSV (поля g:)id, title, price, availability, image_link, gtin/brand
Прайс-агрегаторыСравнение цен, витрины сравненияYML / CSVЦена, наличие, категория, ссылка

Вывод из таблицы простой: YML покрывает большую часть каналов рунета (Маркет, Директ, многие агрегаторы), но не все. У Google Merchant Center свой формат с полями вроде g:id, g:price, g:availability, и туда YML напрямую не отдать — нужен отдельный фид под спецификацию Google. VK/MyTarget тоже нередко используют собственные требования к полям. Поэтому на практике магазин ведёт не «фид», а несколько фидов: базовый YML под Маркет и Директ и отдельные фиды под те каналы, где формат другой. Как связать эти данные в единую аналитику, мы разбираем в статье про сквозную аналитику ecommerce на Битриксе.

Каталог 1С-Битрикс YML-фид offers + цены Яндекс Маркет Яндекс Директ VK / MyTarget Google Merchant экспорт площадка забирает фид по URL
Схема: каталог на 1С-Битрикс генерирует YML-фид, который площадки и рекламные системы забирают по URL и превращают в карточки и объявления.

Структура YML: shop, categories, offers

Чтобы настраивать выгрузку осознанно, нужно понимать анатомию YML-файла. Он состоит из нескольких вложенных блоков, и у каждого своя роль. Разберём структуру сверху вниз на упрощённом примере.

<?xml version="1.0" encoding="UTF-8"?>
<yml_catalog date="2026-07-02 09:00">
  <shop>
    <name>Мой магазин</name>
    <company>ООО «Компания»</company>
    <url>https://example.ru/</url>
    <currencies>
      <currency id="RUR" rate="1"/>
    </currencies>
    <categories>
      <category id="1">Электроника</category>
      <category id="2" parentId="1">Смартфоны</category>
    </categories>
    <offers>
      <offer id="1024" available="true">
        <!-- поля предложения -->
      </offer>
    </offers>
  </shop>
</yml_catalog>

Что здесь важно по блокам:

Ключевая связность: валюта offer должна быть в currencies, а его categoryId — в categories. Нарушьте эти связи — и предложение станет невалидным. Поэтому генератор фида в Битриксе сначала собирает полный список используемых валют и категорий, а уже потом выгружает offer, ссылающиеся на них.

Поля offer: обязательные и рекомендованные

Основная работа при настройке фида — это правильно заполнить offer. Разберём его поля и разделим их на обязательный минимум и рекомендованный слой, который улучшает карточку.

ТегЧто описываетСтатусПример
nameНазвание товараОбязательныйСмартфон Alpha X 128 ГБ
priceТекущая ценаОбязательный29990
oldpriceЦена до скидкиРекомендуемый34990
currencyIdВалюта предложенияОбязательныйRUR
categoryIdКатегория из дереваОбязательный2
pictureСсылка на изображениеОбязательныйhttps://…/alpha-x-1.jpg
urlСсылка на карточкуОбязательныйhttps://…/alpha-x/
vendorБренд / производительРекомендуемыйAlpha
vendorCodeАртикул производителяРекомендуемыйALP-X-128
descriptionОписание товараРекомендуемыйФлагманский смартфон…
paramХарактеристика (атрибут)РекомендуемыйЦвет: Чёрный
атрибут availableНаличие товараОбязательныйtrue / false

Логика простая: без name, price, currencyId, categoryId и хотя бы одного picture предложение либо не пройдёт как валидный товар, либо будет выглядеть ущербно. Атрибут available сообщает, есть ли товар в наличии. Рекомендованный слой — oldprice (показывает скидку и повышает кликабельность), vendor и vendorCode (помогают площадке сматчить товар и построить фильтры), description и param (питают характеристики и качество карточки). Чем полнее заполнен offer, тем лучше карточка ранжируется и конвертит.

Два типа offer: упрощённый и произвольный

В YML исторически есть два способа описать предложение, и это стоит понимать, потому что от типа зависит набор и трактовка полей.

Упрощённый тип (simplified)

Предложение описывается тегом name — единой строкой названия. Это универсальный вариант, который подходит для большинства товаров и проще в генерации: вы просто отдаёте готовое название, цену, категорию и картинки. Именно его чаще всего используют магазины на Битриксе.

Произвольный тип (vendor.model)

Вместо единого name предложение описывается парой vendor (производитель) и model (модель), а также может содержать typePrefix (тип товара). Такой формат исторически использовался для техники и товаров, где важна связка «бренд + модель». Он даёт площадке более структурированное представление, но и требует, чтобы данные в каталоге были аккуратно разложены на эти составляющие.

<offer id="1024" type="vendor.model" available="true">
  <typePrefix>Смартфон</typePrefix>
  <vendor>Alpha</vendor>
  <model>X 128 ГБ</model>
  <price>29990</price>
  <currencyId>RUR</currencyId>
  <categoryId>2</categoryId>
</offer>

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

Штатная выгрузка на экспорт в 1С-Битрикс

Теперь к практике на Битриксе. В коробочной редакции с модулем «Торговый каталог» есть штатный механизм экспорта каталога в YML — его не нужно писать с нуля для типового случая. Он живёт в административной части в разделе экспорта данных торгового каталога.

Что делает штатная выгрузка «из коробки»:

Путь настройки в общих чертах такой: в административной части открываете экспорт торгового каталога, создаёте профиль экспорта в формат Яндекс Маркет (YML), выбираете инфоблок-каталог, задаёте, какие разделы и товары выгружать, сопоставляете поля и свойства, включаете автоматическое обновление. На выходе получаете URL фида, который отдаёте площадке. Это фундамент; тонкая настройка полей и категорий — в следующих разделах.

Важная оговорка: штатная выгрузка хорошо закрывает базовый сценарий, но у неё есть потолок гибкости. Когда нужны нестандартный маппинг категорий, свои param под требования конкретной системы, UTM-метки, разные фиды под разные каналы или высокая производительность на большом каталоге — штатного механизма перестаёт хватать, и его либо расширяют своим кодом (через события и API Битрикса), либо заменяют кастомным генератором. Такие доработки мы делаем в рамках проектов по интеграции магазина с площадками.

Настройка профиля выгрузки

Профиль экспорта — это набор правил, по которым Битрикс превращает каталог в конкретный YML-файл. Один профиль = один фид. Разберём, из чего он состоит и на что обращать внимание.

Ключевые настройки профиля:

Хорошая практика — не пытаться уместить всё в один «универсальный» профиль, а держать по профилю на канал. Тогда для Маркета вы отдаёте один набор полей и фильтров, для Директа — другой, для агрегатора — третий, и изменение требований одной площадки не ломает остальные фиды. Профили удобно называть по каналу (например, «YML — Маркет», «YML — Директ смарт-баннеры»), чтобы не путаться при поддержке.

Сопоставление категорий с деревом площадки

Один из самых частых источников проблем с фидом — категории. В YML вы отдаёте своё дерево категорий (из разделов каталога Битрикса), но площадка сопоставляет его со своей номенклатурой. Если товар попал в неподходящую с точки зрения площадки категорию, карточка не пройдёт модерацию или встанет не туда.

Что важно сделать правильно:

Если площадка «не принимает категории», в 90% случаев дело в одном из этих пунктов: нарушенная иерархия, неуникальные id или несоответствие вашего дерева ожиданиям площадки. Для крупных каталогов имеет смысл вести отдельную таблицу маппинга «раздел каталога → категория площадки» и применять её при генерации фида, а не полагаться на автоматический перенос дерева один в один.

Сопоставление свойств с param

Характеристики товара передаются в YML через теги param: у каждого есть атрибут name (название характеристики) и значение. Это то, из чего площадка строит фильтры и что показывает в карточке. Чем полнее и точнее заполнены param, тем выше качество карточки и тем по большему числу фильтров товар находится.

<offer id="1024" available="true">
  <name>Смартфон Alpha X 128 ГБ</name>
  <price>29990</price>
  <currencyId>RUR</currencyId>
  <categoryId>2</categoryId>
  <vendor>Alpha</vendor>
  <param name="Цвет">Чёрный</param>
  <param name="Объём памяти" unit="ГБ">128</param>
  <param name="Диагональ экрана" unit="дюйм">6.5</param>
</offer>

При настройке выгрузки на Битриксе вы сопоставляете свойства инфоблока с param фида: свойство «Цвет» → param name="Цвет", свойство «Память» → param name="Объём памяти" и так далее. Тонкости, которые важно учитывать:

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

Товар в каталоге • Название • Цена / старая цена • Раздел • Фото • Бренд / артикул • Свойства • Остаток маппинг <offer available="true"> <name> … </name> <price> · <oldprice> <currencyId>RUR</currencyId> <categoryId> · <url> <picture> … </picture> <vendor> · <vendorCode> <param name="Цвет"> … <param name="Память"> … </offer>
Схема: поля товара из каталога Битрикса маппятся в теги offer — name, price, categoryId, picture, vendor и param — и в атрибут available.

Цены в фиде: price, oldprice, currencyId

Цена — одна из двух самых чувствительных сущностей в фиде (вторая — наличие). Ошибка в цене видна покупателю сразу и бьёт по деньгам. Разберём три связанных тега.

Практические моменты. Во-первых, цена в фиде должна совпадать с ценой на карточке сайта: если площадка перейдёт по url и увидит другую цену, это провоцирует претензии и понижение доверия к магазину. Во-вторых, для рекламных и торговых каналов иногда заводят отдельный тип цены, чтобы управлять ценой канала независимо от розницы на сайте, — тогда в профиле фида выбирают именно этот тип цены. В-третьих, при акциях важно, чтобы price и oldprice обновлялись синхронно с сайтом, иначе площадка покажет скидку, которой уже нет.

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

Остатки и доступность: available

Наличие товара в YML передаётся атрибутом available у тега offer: true — товар доступен к заказу, false — нет. Это самая динамичная информация в фиде: остаток меняется при каждой продаже во всех каналах сразу.

Почему это критично именно для фида:

Здесь важно, чтобы каталог Битрикса корректно вёл количество и признак наличия, а генератор фида отдавал available на основе актуального остатка. Если у вас единый источник остатков (в 1С), он раздаётся и на сайт, и в фид, поэтому наличие в фиде совпадает с реальным складом. Тему единого пула остатков и защиты от продаж несуществующего товара мы подробно разбираем в статье про интеграцию Битрикса с маркетплейсами — она напрямую связана с тем, насколько честен ваш фид по наличию.

Актуальность цен и остатков в фиде

Мы дважды упомянули, что цены и остатки должны быть свежими. Разберём отдельно, что это значит на практике и как этого добиваются. Проблема в том, что фид — это статический файл, снимок каталога на момент генерации. Между двумя генерациями данные в фиде «замороженные».

Есть два принципиальных подхода к обновлению:

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

Обновление по расписанию: агент и cron

Автоматическое обновление фида в Битриксе реализуют двумя основными механизмами, и выбор между ними влияет на надёжность и точность расписания.

Агенты Битрикса

Агент — это внутренний механизм отложенных заданий Битрикса. Штатная выгрузка YML по умолчанию обновляется именно агентом. Плюс — не нужно ничего настраивать на уровне сервера, всё внутри CMS. Минус — агенты на «хитовом» запуске выполняются во время посещений сайта, поэтому их точность и регулярность зависят от трафика, а тяжёлая генерация может тормозить ответ пользователю.

Cron

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

  1. Определите частоту. Отдельно для карточек (реже) и для цен/остатков (чаще), исходя из динамики каталога и нагрузки на сервер.
  2. Вынесите тяжёлую генерацию в скрипт. Полную перегенерацию фида делайте отдельным процессом, а не «на хите» во время визита пользователя.
  3. Запускайте по cron. Настройте запуск генератора по расписанию на уровне сервера, чтобы он не зависел от посещаемости.
  4. Пишите в файл атомарно. Генерируйте во временный файл и подменяйте боевой только после успешного завершения — площадка никогда не должна увидеть наполовину записанный фид.
  5. Логируйте и оповещайте. Фиксируйте время и результат генерации; при сбое присылайте оповещение, чтобы фид не «протух» незаметно.

Правильно настроенный cron превращает фид из «файла, который кто-то иногда обновляет руками» в надёжный автоматический процесс. Это тот случай, когда полчаса на настройку расписания экономят дни разбирательств с площадкой из-за устаревших данных.

cron по расписанию Генератор сборка YML Каталог цены · остатки Временный файл → атомарная замена feed.xml боевой фид площадка забирает по URL
Схема: cron по расписанию запускает генератор, тот собирает свежие цены и остатки из каталога, пишет во временный файл и атомарно подменяет боевой фид, который забирает площадка.

Несколько фидов под разные площадки

Мы уже отмечали: один универсальный фид «на всех» — плохая идея. Разберём почему и как организовать несколько фидов из одного каталога.

Причины держать отдельные фиды:

Организационно это делается через несколько профилей выгрузки поверх единого каталога: источник данных один, а «упаковка» разная. Так вы ведёте товар один раз, а система отдаёт его в нужном виде под каждый канал. Добавление новой площадки становится добавлением ещё одного профиля, а не переделкой всего. Это и есть подход «единый каталог — много фидов», который масштабируется без хаоса.

Фильтрация товаров в фид

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

Хорошая практика — вести флаг участия в фиде как свойство товара, а не хардкодить условия. Тогда контент-менеджер управляет составом фида из привычной карточки товара, а не через программиста. А базовые фильтры (в наличии, с картинкой, с ценой) применяются автоматически на этапе генерации, отсекая заведомо невалидные предложения ещё до отправки площадке.

UTM-метки в ссылках фида

Ссылка на карточку товара живёт в теге url каждого offer. Для рекламных и товарных фидов к ней добавляют UTM-метки, чтобы в аналитике отделять переходы из фида от остального трафика и понимать, какой канал и какая кампания приносят продажи.

<url>https://example.ru/catalog/alpha-x/?utm_source=market&amp;utm_medium=cpc&amp;utm_campaign=feed</url>

На что обратить внимание при добавлении UTM в фид:

Аккуратно проставленные UTM превращают фид из «чёрного ящика» в измеримый канал: вы видите в сквозной аналитике, сколько трафика и выручки приносит каждый фид, и можете принимать решения на цифрах, а не на ощущениях. Как выстроить эту связку до уровня выручки, мы разбираем в материале про сквозную аналитику ecommerce на Битриксе.

Фиды для рекламы: Директ, VK, Google

Товарный фид — это топливо не только для маркетплейсов, но и для рекламы. Разберём, как фид используется в рекламных системах и чем их требования отличаются.

Яндекс Директ: товарные и динамические кампании

На основе YML-фида Директ строит смарт-баннеры, динамические объявления и товарные кампании: система сама берёт из фида название, цену, картинку и ссылку и собирает объявление по товару. Здесь особенно важны корректная цена, рабочая картинка, доступность и ссылка с UTM. Фид для рекламы обычно фильтруют жёстче: только товары в наличии, с картинкой и адекватной ценой.

VK Реклама / MyTarget

Динамический ретаргетинг и товарные карусели строятся на фиде с идентификаторами товаров, ценами, картинками и ссылками. Требования к полям и формату могут отличаться от классического YML, поэтому под этот канал нередко готовят отдельный фид.

Google Merchant Center

У Google собственный формат фида (XML или CSV) со своими полями в пространстве имён g:: g:id, g:title, g:description, g:price, g:availability, g:image_link, g:brand, g:gtin и другие. YML сюда напрямую не подходит — нужен отдельный генератор под спецификацию Google.

СистемаТип кампанийФормат фидаАкцент в полях
Яндекс ДиректСмарт-баннеры, динамические, товарнаяYMLname, price, picture, url+UTM, available
VK / MyTargetДинамический ретаргетинг, карусельYML / свойid, price, picture, url, available
Google MerchantТоварные объявления, бесплатные карточкиСвой XML/CSV (g:)g:id, g:title, g:price, g:availability, g:image_link

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

Валидация фида и типовые ошибки

Никогда не отдавайте фид площадке, не проверив его валидатором. Валидация ловит проблемы до того, как их увидит площадка и до того, как они превратятся в отклонённые товары или слитый бюджет. Разберём, что проверяют и какие ошибки встречаются чаще всего.

ОшибкаВ чём проявляетсяКак лечится
Нет обязательных полейПредложение без цены, валюты, категории или картинки отклоняетсяФильтровать неполные товары и заполнять обязательный минимум
Битые картинкиСсылка в picture ведёт на 404 или недоступнаПроверять доступность URL картинок, отдавать абсолютные ссылки
Устаревшие ценыЦена в фиде не совпадает с ценой на карточкеЧастое обновление фида, единый источник цены
Категория не принятаТовар в неподходящей или несуществующей категорииКорректный маппинг и целостная иерархия category
Неэкранированные символыАмперсанд или угловые скобки ломают XMLЭкранировать &, <, > сущностями
Валюта offer вне currenciescurrencyId ссылается на валюту, которой нет в спискеСинхронизировать валюты offer и блок currencies
oldprice ≤ priceСтарая цена не больше текущей — скидка невалиднаВыгружать oldprice только когда он реально больше price
Available не отражает складТовара нет, а в фиде available="true"Отдавать наличие из актуального остатка

Порядок проверки обычно такой: сначала прогоняют фид через валидатор формата (проверка XML-схемы и обязательных полей), затем — через валидатор конкретной площадки (Маркета, Merchant Center), который дополнительно проверяет свои требования к категориям и атрибутам. Только после того как обе проверки чистые, фид выводят в бой. Для больших каталогов валидацию встраивают в сам процесс генерации: если после сборки файл не проходит базовые проверки, боевой фид не подменяется, а поднимается оповещение.

Фид собран YML-файл Валидатор формата XML · обяз. поля Валидатор площадки категории · атрибуты Площадка Ошибки: нет полей · битые фото · цена · категория → вернуть на исправление, боевой фид не подменять
Схема: собранный фид проходит валидатор формата и валидатор площадки; при ошибках он возвращается на исправление и боевой файл не подменяется, а чистый фид уходит на площадку.

Большой каталог и производительность

Пока в каталоге пара тысяч товаров, о производительности выгрузки можно не думать. Но на десятках и сотнях тысяч предложений наивная генерация «выбрать всё и собрать документ в памяти» упирается в лимиты памяти и времени выполнения. Разберём приёмы, которые делают выгрузку большого каталога реальной.

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

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

Частые ошибки

Проблемы с фидами повторяются из проекта в проект. Зная их заранее, вы избежите большей части боли с модерацией и рекламой.

Чек-лист фида

Короткий список, по которому удобно свериться перед тем, как отдать фид площадке:

  1. Валидность XML. Файл в UTF-8, все спецсимволы экранированы, структура yml_catalog → shop → offers соблюдена.
  2. Обязательные поля offer. У каждого предложения есть name, price, currencyId, categoryId, picture, url и корректный available.
  3. Валюты и категории. Все currencyId есть в currencies, все categoryId — в дереве category, иерархия целостна.
  4. Маппинг категорий. Разделы сопоставлены с категориями площадки, а не выгружены «как есть».
  5. Цены. Цена совпадает с сайтом, oldprice больше price там, где указан.
  6. Остатки. available отражает реальный склад, товары без остатка отфильтрованы (особенно в рекламе).
  7. Картинки. Абсолютные рабочие ссылки, картинки доступны по URL.
  8. UTM. В ссылках проставлены метки под канал, амперсанды экранированы, дубли для SEO не создаются.
  9. Обновление. Настроен запуск по cron, файл пишется атомарно, есть логирование и оповещение о сбоях.
  10. Валидация. Фид прошёл валидатор формата и валидатор площадки до вывода в бой.

Вывод

Экспорт товаров в YML-фиды на 1С-Битрикс — это не «выгрузка файла раз и навсегда», а живой процесс, от качества которого зависит, как ваш каталог выглядит и продаёт во внешних каналах. YML — строгий диалект XML со своей структурой: shop, валюты, дерево категорий и список offer с фиксированными полами. Штатная выгрузка Битрикса закрывает базовый случай, а под нестандартные требования — маппинг категорий, свои param, UTM, несколько фидов, большой каталог — её расширяют или заменяют кастомным генератором.

Главное помнить: критичнее всего актуальность цен и остатков, поэтому фид обновляют часто и по расписанию через cron, а не руками; под разные каналы держат разные фиды со своими форматами, полями и UTM; каждый фид обязательно проверяют валидатором до вывода в бой. Начните с чистого каталога и корректного маппинга категорий, настройте обновление и фильтрацию, добавьте UTM и мониторинг — и фид станет надёжным управляемым каналом продаж и рекламы, а не источником отклонённых товаров и слитого бюджета.

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

Чем YML отличается от обычного XML и CSV-прайса?

YML (Yandex Market Language) — это не отдельный язык, а строгий диалект XML с заранее определённой структурой: корневой элемент yml_catalog, внутри shop, а в нём валюты, дерево категорий и список offer с фиксированным набором тегов. То есть любой YML — это валидный XML, но не любой XML является YML. От произвольного CSV-прайса YML отличается тем, что описывает не просто строки «название — цена», а полноценную товарную карточку с категорией, картинками, характеристиками (param), брендом, доступностью и ссылкой. Именно поэтому площадки и рекламные системы принимают YML как товарный фид, а не как простой прайс: из него можно собрать полноценную карточку и объявление, а не только строку в таблице.

Обязательно ли использовать штатную выгрузку Битрикса или лучше писать свою?

Для типового каталога штатная выгрузка модуля «Торговый каталог» закрывает базовую задачу: она умеет отдавать YML с ценами, остатками, разделами и свойствами и обновляться по агенту. Проблемы начинаются, когда нужны нестандартные вещи: разные фиды под разные площадки с разным набором полей, свой маппинг категорий на дерево Маркета, UTM-метки в ссылках, специфические param под требования конкретной системы, фильтрация по сложным условиям или высокая производительность на большом каталоге. Тогда штатной выгрузки не хватает по гибкости, и её либо расширяют своим кодом, либо заменяют кастомным экспортом, который формирует нужный XML напрямую из инфоблоков. На практике часто начинают со штатной выгрузки, а по мере роста требований переходят на собственную.

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

Зависит от того, что в фиде важнее всего и как быстро это меняется. Цены и особенно остатки — самая динамичная часть: если фид обновляется раз в сутки, площадка целый день может показывать неактуальную цену или предлагать товар, которого уже нет, что ведёт к отменам и претензиям. Для активной торговли остатки и цены в фиде обновляют часто — несколько раз в день или чаще, вплоть до близкого к реальному времени, если позволяет каталог. Карточки (название, описание, картинки) меняются редко, их можно перегенерировать реже. Разумный подход — не гонять полную выгрузку огромного каталога каждые пять минут, а балансировать частоту так, чтобы цены и наличие были свежими, а нагрузка на сервер оставалась приемлемой.

Нужен ли отдельный фид под каждую площадку?

Почти всегда да. Даже если формат везде называется YML, требования площадок различаются: у Яндекс Маркета своё дерево категорий и обязательные поля, у товарных и динамических кампаний Яндекс Директа свои акценты, у VK/MyTarget и Google Merchant вообще свои форматы (у Google — собственный XML/CSV со своими полями g:). Пытаться обслужить всех одним универсальным файлом — значит везде отдавать компромисс и ловить ошибки валидации. Правильнее держать несколько профилей выгрузки: под каждый канал свой фид со своим набором полей, своей фильтрацией товаров и своими UTM-метками. Хаб на Битриксе как раз позволяет вести единый каталог, но отдавать его в разных «упаковках» под разные площадки.

Почему Яндекс Маркет не принимает мои категории?

Самая частая причина — категории в фиде не совпадают с деревом категорий площадки. В YML вы отдаёте своё дерево (теги category с id и parentId), но площадка сопоставляет его со своей номенклатурой категорий, и если товар попал в неподходящую или несуществующую с её точки зрения категорию, карточка не проходит модерацию. Помогает аккуратный маппинг: осознанно сопоставить свои разделы каталога с категориями площадки, а не выгружать дерево «как есть». Вторая частая причина — нарушенная иерархия: parentId ссылается на категорию, которой нет в файле, или id категорий не уникальны. Стоит проверить, что каждая категория имеет уникальный id, а все parentId указывают на реально существующие в фиде разделы.

Можно ли добавить UTM-метки в ссылки фида?

Да, и для рекламных фидов это почти обязательно. В теге url каждого offer вы отдаёте ссылку на карточку товара, и к ней можно добавить UTM-параметры (utm_source, utm_medium, utm_campaign и при необходимости utm_content с идентификатором товара), чтобы в сквозной аналитике отделять переходы из фида от остального трафика. Важно делать это аккуратно: параметры должны корректно экранироваться в XML (символ амперсанда в URL записывается как сущность), а на стороне сайта UTM-хвост не должен ломать канонический адрес карточки и создавать дубли для поисковых систем. Обычно метки добавляют прямо на этапе генерации фида, чтобы в разных фидах под разные каналы были разные utm_source.

Что делать, если фид формируется слишком долго на большом каталоге?

На каталоге в десятки и сотни тысяч предложений наивная генерация «выбрать все товары со всеми свойствами и ценами одним махом» упирается в память и время выполнения. Лечится это несколькими приёмами: выгрузка порциями (пагинация по товарам, потоковая запись XML в файл вместо сборки всего документа в памяти), выборка только нужных полей и свойств, кэширование редко меняющейся части (категории, описания) и разделение потоков — часто обновлять только цены и остатки, а полную перегенерацию карточек делать реже. Ещё помогает генерировать фид фоновым процессом по расписанию и отдавать площадке уже готовый статический файл, а не собирать XML на каждый её запрос. Для очень больших каталогов это вопрос архитектуры выгрузки, а не одной галочки в настройках.

Какие поля offer обязательные?

Минимальный обязательный набор для товарного предложения — это название (name), цена (price), валюта (currencyId), категория (categoryId) и хотя бы одна картинка (picture), плюс ссылка на карточку (url) и атрибут доступности (available). Без цены, валюты и категории предложение в принципе не пройдёт как валидный товар, а без картинки и адекватного названия карточка будет плохо выглядеть и хуже проходить модерацию. Дальше идёт рекомендованный, но не строго обязательный слой: oldprice для показа скидки, vendor и vendorCode (бренд и артикул), описание и характеристики через param. Точный список обязательных полей зависит от площадки и типа предложения, поэтому перед запуском его всегда сверяют с актуальными требованиями конкретной системы.

Поделиться:

Нужна настройка YML-фидов на 1С-Битрикс под Маркет и рекламу?

Настроим экспорт каталога в YML: поля offer, маппинг категорий и свойств, актуальные цены и остатки, обновление по cron, отдельные фиды под Маркет, Директ, VK и Google с UTM и валидацией. Рассчитаем работу по вашему проекту.

Игорь Воскресенский

Технический редактор блога B2Bsite. Проектирует и внедряет интеграции интернет-магазинов на 1С-Битрикс: выгрузку каталога в YML-фиды, обмен с 1С, связь с маркетплейсами и рекламными системами, актуальные цены и остатки, товарные фиды под Яндекс Маркет, Директ, VK и Google Merchant.

← Все статьи блога