Выгрузка в Яндекс Маркет из Битрикса: настройка с первого раза
Профиль экспорта в Битриксе создаётся за несколько минут, но Маркет отклоняет товары из-за картинок, id и пустых брендов. Разбираем три способа получить фид и то, что надо проверить до запуска.

Штатный профиль экспорта в Битриксе настраивается за несколько минут. Проблемы начинаются потом: Маркет принимает файл, но часть товаров отклоняет из-за картинок с относительными ссылками, пустых брендов и повторяющихся id. Причина чаще лежит не в настройках профиля, а в данных каталога и в окружении вокруг файла. Ниже: три способа получить фид, что подготовить в карточках, как выглядит правильная позиция и что ломается чаще всего.
Три способа получить фид
Материал написан для «1С-Битрикс: Управление сайтом» с модулем «Торговый каталог», ядро 23.x и новее. Названия пунктов меню отличаются между редакциями и версиями, поэтому ориентируйтесь на смысл, а не на точный путь. Требования к формату сверяйте с актуальной спецификацией Маркета: она обновляется.
Штатный профиль экспорта
Торговый каталог выгружает данные профилями. В разделе экспорта данных (Магазин, затем Каталог или Товары, затем Экспорт данных, путь зависит от версии) создаётся профиль для Яндекс Маркета: вы выбираете инфоблоки, разделы, тип цены, валюту и путь к файлу. Выигрыш: ничего не покупать и не писать. Цена: правила одни на весь профиль, любое исключение приходится решать данными в карточках.
Запуск из админки на большом каталоге упирается в ограничения времени выполнения PHP, поэтому профиль ставят на cron. Готовую команду с вашими путями Битрикс показывает в самом профиле. Берите её оттуда, а не из чужих статей.
Модуль из Маркетплейса 1С-Битрикс
Сторонние модули дают несколько фидов, фильтры по складам, ценам и брендам, правила для отдельных категорий. Выигрыш: гибкость без разработки. Цена: лицензия, зависимость от автора и совместимость с вашей версией ядра. Данные в карточках всё равно должны быть в порядке. Конкретные модули я не называю: перед покупкой проверьте дату последнего обновления и поддержку вашей версии ядра и PHP.
Собственный генератор
Агент или cron-скрипт на PHP читает каталог и пишет YML. Выигрыш: любые правила и контроль над временем и памятью. Цена: спецификацию, экранирование и изменения формата вы отслеживаете сами. Два правила стоит заложить сразу. Первое: писать XML потоково, а не собирать весь документ в памяти. Второе: писать во временный файл и затем переименовывать его, иначе Маркет может скачать файл в момент записи и получить обрубок.
| Способ | Что получаете | Чем платите | Когда подходит |
|---|---|---|---|
| Штатный профиль | Работает из коробки, без доплат | Единые правила на профиль, исключения только через данные | Один каталог, один фид |
| Модуль из Маркетплейса | Несколько фидов, фильтры и правила по категориям без кода | Лицензия, зависимость от автора, проверка совместимости | Разные условия для разных фидов, нет разработчика |
| Свой генератор | Любые правила, контроль времени и памяти | Разработка и поддержка формата лежат на вас | Тяжёлый каталог или данные из внешних систем |
Пояснение. YML (Yandex Market Language) это XML-формат фида: список категорий и товарных позиций с ценами, ссылками и параметрами. Торговое предложение (SKU) в Битриксе это вариант товара, например цвет или размер, со своей ценой и остатком. В фид оно уходит отдельной позицией.
Что должно быть в каталоге до первого экспорта
Фид зеркалит каталог. Если в карточке пусто, в файле будет пусто, и настройка профиля этого не исправит. Проверьте шесть вещей.
- Стабильный id позиции. Обычно это ID элемента или торгового предложения. Не артикул и не название: для Маркета id это идентификатор позиции, при его смене старая позиция исчезает, а новая появляется.
- Бренд. Маркет требует производителя для многих категорий. В Битриксе бренд обычно лежит в свойстве инфоблока, а профиль берёт то свойство, которое вы указали. Убедитесь, что выбрано нужное.
- Картинки. Файл в карточке и ссылка в фиде это разные вещи. Нужен публичный адрес по https, открывающийся без авторизации.
- Цена. Определите, какой тип цены уходит в фид и учитываются ли скидки. Покупатель, перешедший по ссылке, не должен увидеть другую цену.
- Торговые предложения. Названия и параметры (цвет, размер) должны различать варианты. Два SKU с одинаковым названием и одной ссылкой выглядят как дубли.
- Адрес сайта. Полные ссылки строятся из адреса сервера в настройках сайта. Тестовый домен или http вместо https в этом поле попадёт в каждую ссылку фида.
Фид не исправляет каталог, он его публикует. Каждая дыра в карточках превращается в отклонённую позицию.
Как выглядит правильная позиция
Ниже фрагмент одного offer внутри shop/offers. Шапку с currencies и categories генерирует профиль. Проверьте, что categoryId ссылается на существующую категорию из списка.
<!-- Фрагмент: одна позиция из блока offers -->
<offer id="1042" available="true">
<url>https://example.com/catalog/kofemashiny/aroma-300/</url>
<price>24990</price>
<oldprice>27990</oldprice>
<currencyId>RUR</currencyId>
<categoryId>12</categoryId>
<!-- Полный https-адрес, не /upload/... -->
<picture>https://example.com/upload/iblock/3f1/aroma-300.jpg</picture>
<vendor>Aroma</vendor>
<vendorCode>AR-300</vendorCode>
<name>Кофемашина рожковая Aroma 300, 15 бар</name>
<!-- HTML в описании только внутри CDATA -->
<description><![CDATA[<p>Рожковая кофемашина с капучинатором.</p>]]></description>
<param name="Цвет">Чёрный</param>
</offer>Допустимый набор HTML-тегов в описании и обязательные поля для вашей категории смотрите в спецификации Маркета. Амперсанд в тексте должен быть записан как &, иначе XML перестанет читаться целиком.
Проверка файла до отправки в Маркет
Эти команды выполняются в обычном терминале Linux. Утилита xmllint входит в пакет libxml2-utils в Debian и Ubuntu.
# Заголовки: ожидаем код 200 и xml в Content-Type, без редиректа на авторизацию
curl -sI https://example.com/upload/yandex-market.xml
# Скачиваем файл и проверяем, что это корректный XML (тишина значит успех)
curl -s https://example.com/upload/yandex-market.xml -o feed.xml
xmllint --noout feed.xml
# Повторяющиеся id: пустой вывод значит дублей нет
# (команда рассчитана на id как первый атрибут offer)
grep -o '<offer id="[^"]*"' feed.xml | sort | uniq -d
# Относительные и http-ссылки на картинки: ожидаем 0 в обоих случаях
grep -c '<picture>/' feed.xml
grep -c '<picture>http://' feed.xmlКогда что выбирать
- Штатный профиль: один фид, единые правила для всех разделов, карточки заполнены полностью. Если это про вас, остальное не нужно.
- Модуль: нужны два и более фида с разными условиями или правила по отдельным категориям, а PHP-разработчика в команде нет.
- Свой генератор: генерация идёт дольше интервала между запусками cron либо правила зависят от данных вне каталога, например от остатков по складам из внешней системы.
Что ломается чаще всего
- Картинки отклоняются. Относительные пути, http вместо https или защита, которая не пускает робота: basic-авторизация, WAF, правила против ботов. User-Agent робота Маркета смотрите в его справке.
- XML не читается. Кодировка в декларации не совпадает с реальной (файл в windows-1251 при заявленном UTF-8 или наоборот) либо в названии остался неэкранированный амперсанд. Для нового фида берите UTF-8.
- Фид устарел. После переезда на другой сервер cron не запускается или в нём старый путь к PHP, а профиль продолжает отдавать прежний файл. Смотрите атрибут
dateу корневого элементаyml_catalog. - Цены расходятся с сайтом. В профиле выбран не тот тип цены, скидки считаются иначе, чем на витрине, или витрина показывает закешированное значение.
- Распроданное продолжает продаваться. Проверьте, как профиль определяет доступность: по общему остатку или по выбранным складам.
- Дубли id. Элемент лежит в нескольких разделах или SKU ушёл и как товар, и как предложение. Ловится командой выше.
Что делать дальше
Добавьте ссылку на фид в кабинете Маркета и дождитесь первой проверки. Отчёт об отклонённых позициях разбирайте по группам причин, а не по товарам: одна причина обычно закрывает сразу много позиций. Затем поставьте профиль на cron и заведите четыре показателя: дата в yml_catalog, время генерации, доля отклонённых позиций, расхождение цен с сайтом. Обновление цен и остатков через API Маркета это отдельная тема, здесь она не разбирается.
Инфографика для маркетплейса: Три главных преимущества товара короткими фразами, выноски в безопасной зоне превью, точный размер площадки.
Спросить за 60 ₽Источники: Документация 1С-Битрикс для разработчиков, Справка Яндекс Маркета для партнёров
Частые вопросы
Как часто Маркет забирает фид и как часто его обновлять?
А если у меня другая версия Битрикса и пункты меню не совпадают?
Фид выгрузился, но Маркет отклоняет позиции. Что делать?
Можно ли отдавать фид динамически, генерируя его при каждом обращении робота?
Что будет, если сменить id позиций после запуска?
Подойдёт ли тот же файл для других площадок?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.