Настройка фида для Яндекс.Маркет (товарная реклама) 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка фида для Яндекс.Маркет (товарная реклама) 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка фида для Яндекс.Маркет (товарная реклама) 1С-Битрикс

Яндекс.Маркет принимает фид в формате YML (Yandex Market Language) — XML со своей схемой. В Битрикс есть встроенный модуль YML-экспорта, но для товарной рекламы (Performance) требования к полноте данных выше, чем для простого листинга. Неполный фид — значит часть товаров не попадает в рекламу, а Google Shopping-like кампании работают хуже из-за отсутствия атрибутов.

Формат YML для Яндекс.Маркет

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2024-01-15 10:00">
  <shop>
    <name>Название магазина</name>
    <company>ООО «Компания»</company>
    <url>https://your-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://your-site.ru/catalog/product-123/</url>
        <price>14990</price>
        <oldprice>17990</oldprice>
        <currencyId>RUR</currencyId>
        <categoryId>2</categoryId>
        <picture>https://your-site.ru/upload/img/product-123.jpg</picture>
        <name>Смартфон BrandName Model X 128GB</name>
        <vendor>BrandName</vendor>
        <vendorCode>MODEL-X-128</vendorCode>
        <barcode>4607086560001</barcode>
        <description>Описание товара</description>
        <sales_notes>Доставка от 290 руб., самовывоз бесплатно</sales_notes>
        <param name="Память">128 ГБ</param>
        <param name="Цвет">Чёрный</param>
        <param name="Гарантия">12 месяцев</param>
      </offer>
    </offers>
  </shop>
</yml_catalog>

Встроенный YML-экспорт Битрикс

В административной панели: Каталог → Экспорт → Добавить профиль → Яндекс.Маркет (YML).

Настройки профиля:

  • Выбор инфоблока каталога
  • Маппинг свойств: BRAND → vendor, ARTICLE → vendorCode, BARCODE → barcode
  • Фильтр: только активные товары с ненулевым остатком
  • Путь файла: /upload/yandex_market.yml

Стандартный экспорт не умеет корректно выгружать <param> из свойств инфоблока без доработки. Параметры товара (Память, Цвет, Размер) критичны для товарной рекламы — по ним Яндекс матчит запросы.

Доработка экспорта: добавление <param> из свойств

// /local/php_interface/init.php — хук на генерацию строки оффера
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'catalog',
    'OnGetYmlOfferXml',
    function (\Bitrix\Main\Event $event) {
        $offer = $event->getParameter('OFFER');
        $xml   = $event->getParameter('XML');

        // Добавляем параметры из свойств инфоблока
        $paramProps = ['COLOR' => 'Цвет', 'MEMORY' => 'Память', 'SCREEN_SIZE' => 'Диагональ экрана'];
        foreach ($paramProps as $propCode => $paramName) {
            if (!empty($offer['PROPERTIES'][$propCode]['VALUE'])) {
                $xml .= sprintf(
                    '<param name="%s">%s</param>',
                    htmlspecialchars($paramName),
                    htmlspecialchars($offer['PROPERTIES'][$propCode]['VALUE'])
                );
            }
        }

        return new \Bitrix\Main\EventResult(
            \Bitrix\Main\EventResult::SUCCESS,
            ['XML' => $xml]
        );
    }
);

Кастомный генератор YML-фида

Если стандартный экспорт не устраивает — полностью кастомный генератор:

// /local/cron/yandex_market_feed.php

$categories = getIblockSections($IBLOCK_ID);
$tmpFile = tempnam(sys_get_temp_dir(), 'yml_');
$xml = new XMLWriter();
$xml->openUri($tmpFile);
$xml->startDocument('1.0', 'UTF-8');
// ... генерация структуры yml_catalog

Генерацию больших каталогов (>50K товаров) делаем через XMLWriter с потоковой записью — не накапливаем DOM в памяти.

Частые ошибки при загрузке фида

  • Неверный формат даты в yml_catalog — дата должна быть в формате YYYY-MM-DD HH:MM
  • Дублирующийся id оффера — если торговые предложения и основные товары выгружаются с одинаковыми ID
  • Недопустимый символ в XML — амперсанд & в названии не экранирован (&amp;)
  • Нет обязательного тега price — товары без цены не выгружаются, Яндекс отклоняет

Сроки настройки

Настройка стандартного YML-профиля Битрикс с маппингом свойств и добавлением <param> через хуки — 4–8 часов. Кастомный генератор для сложного каталога с торговыми предложениями и параметрами — 1–2 рабочих дня.