Настройка YML-выгрузки 1С-Битрикс
YML (Yandex Market Language) — XML-формат, который давно вышел за пределы Яндекс.Маркета. Его используют прайс-агрегаторы (Товары Mail.ru, Price.ru), CRM-системы для импорта каталогов, партнёрские сети для товарных фидов. В 1С-Битрикс генерация YML — штатная функция модуля catalog, но настроек по умолчанию хватает только для простейших каталогов.
Базовая настройка профиля экспорта
Магазин → Настройки → Экспорт каталога → Добавить профиль → Яндекс.Маркет (YML). Параметры:
- Инфоблок каталога — из какого инфоблока выгружать товары.
-
Тип цены — какой тип цены попадёт в тег
<price>. Выбирается один. - Валюта — RUR, USD, EUR. Если в каталоге цены в нескольких валютах, в фид попадёт цена, сконвертированная в выбранную валюту.
- Разделы — можно ограничить выгрузку конкретными разделами инфоблока.
-
Свойства для экспорта — какие свойства инфоблока выгружать как
<param>. -
Файл экспорта — путь к результирующему файлу, например
/upload/yml/feed.xml.
После сохранения — кнопка «Экспортировать». Файл генерируется и доступен по URL.
Структура YML-файла
Валидный YML содержит:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-01-15 12:00">
<shop>
<name>Название магазина</name>
<company>Юрлицо</company>
<url>https://site.ru</url>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<category id="1">Электроника</category>
<category id="2" parentId="1">Смартфоны</category>
</categories>
<offers>
<offer id="123" available="true">
<url>https://site.ru/product/123/</url>
<price>79990</price>
<categoryId>2</categoryId>
<picture>https://site.ru/upload/photo.jpg</picture>
<name>Смартфон Samsung Galaxy S24</name>
<vendor>Samsung</vendor>
<param name="Память">256 ГБ</param>
</offer>
</offers>
</shop>
</yml_catalog>
<categories> формируется из разделов инфоблока. <offers> — из элементов. Связь через <categoryId> → id раздела.
Что стандартный профиль делает неправильно
1. Торговые предложения. Если у товара есть SKU (инфоблок торговых предложений), стандартный профиль генерирует <offer> для каждого предложения. Но <name> берёт из предложения, а не из основного товара. Результат: вместо «Кроссовки Nike Air Max» — «Кроссовки Nike Air Max — Белый, 42». Для Яндекс.Маркета это нормально, для прайс-агрегатора — нет.
2. Множественные фото. Стандартный экспорт берёт DETAIL_PICTURE как основное фото. Дополнительные фото из множественного свойства (например, MORE_PHOTO) нужно явно добавить в настройках профиля. Каждое фото — отдельный тег <picture>.
3. Фильтрация. Нет фильтра «только товары с остатком > 0». Выгружаются все активные элементы. Чтобы скрыть товары без остатка — либо деактивировать их (ломает SEO), либо дорабатывать профиль.
4. Спецсимволы. Символы &, <, > в описании ломают XML. Стандартный профиль экранирует их, но если в свойствах инфоблока встречается «сырой» HTML — фид может стать невалидным. Проверяйте через xmllint или онлайн-валидатор YML.
Доработка профиля экспорта
Файл обработчика: /bitrix/modules/catalog/load/yandex_run.php. Не редактируйте его напрямую — потеряется при обновлении. Скопируйте в /bitrix/php_interface/include/catalog_export/ под новым именем и зарегистрируйте как кастомный профиль.
Частые доработки:
-
Фильтр по остаткам. Добавьте в
arFilterусловие>CATALOG_QUANTITY=> 0 или проверку черезCCatalogStoreProductдля мультискладовости. -
Свой формат
<name>. Формируйте название как «Бренд + Модель + Ключевое свойство» вместо стандартногоNAME. -
<oldprice>для скидок. Стандартный профиль не выгружает зачёркнутую цену. Добавьте тег<oldprice>, подставляя значение из другого типа цены (например, «Розничная до скидки»). -
<delivery-options>. Тег для Яндекс.Маркета с условиями доставки. Не генерируется стандартным профилем. -
<sales_notes>. Примечание для покупателя (минимальная сумма заказа, условия). До 50 символов.
Автоматическая генерация
Cron-задача для регулярного обновления фида:
*/30 * * * * /usr/bin/php /var/www/bitrix/modules/catalog/load/yandex_run.php PROFILE_ID
Или через агент Битрикс в настройках профиля — опция «Периодический экспорт». Агент запускается через cron_events.php. Интервал — 30–60 минут для большинства магазинов.
Для каталогов 50 000+ товаров генерация YML может занимать 3–5 минут. Убедитесь, что max_execution_time в PHP достаточен, или используйте пошаговую генерацию (разбивка на части по N элементов за итерацию).
| Задача | Время |
|---|---|
| Базовая настройка стандартного профиля | 30 мин |
| Кастомный профиль с фильтрацией и доп. тегами | 3–5 ч |
| Профиль + cron + мониторинг валидности | 1 день |







