Генерація фіду товарів для Яндекс.Маркет (YML)

Генерація фіду товарів для Яндекс.Маркет (YML)

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Генерація фіду товарів для Яндекс.Маркет (YML)
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1248
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    984
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Генерація фіду товарів для Яндекс.Маркет (YML)

Відзначимо: коли фід блокується через невірний тег oldprice, кампанія втрачає до 70% трафіку за добу. Цю ситуацію ми спостерігали у клієнта з каталогом на 15 000 позицій: Яндекс повернув помилку «ціна на сайті відрізняється від фіду більш ніж на 1%» для половини оферів. Причина — несинхронізоване оновлення цін у CRM та фіді. YML (Yandex Market Language) — строгий XML-діалект, і кожна помилка зупиняє всю кампанію.

Чому товари блокуються на Яндекс.Маркеті?

Яндекс звіряє кожну позицію: ціну на сайті та у фіді, доступність зображення, довжину опису. Помилка в одному офері — і вся кампанія зупиняється. Наприклад, різниця в ціні більш ніж 1% — товар не потрапляє в індекс. Або зображення не відкривається — офер виключається.

Яндекс.Маркет повертає детальний звіт по кожному оферу. Найпоширеніші проблеми пов'язані з ціною: якщо вона дорівнює нулю або відсутня, товар автоматично виключається з індексу. Також Яндекс звіряє ціну у фіді з ціною на сторінці товару — різниця більш ніж 1% блокує офер. Зображення перевіряються при первинному завантаженні та повторно при кожному обході, тому недоступне зображення — часта причина виключення. Довжина опису не повинна перевищувати 3000 символів для більшості категорій. В одному проєкті ми виявили, що 80% помилок викликані відсутністю barcode для категорії «Побутова хімія». Додали заповнення цього поля в ERP — помилки зникли.

«Після налаштування фіду кількість виключених товарів знизилася з 2000 до 0 за перший тиждень», — власник інтернет-магазину.

Оновлення фіду: YML проти Price API

Мінімальна періодичність оновлення — раз на 24 години, але ми рекомендуємо оновлювати раз на годину, якщо ціни змінюються часто. Для оперативної зміни цін підключають Price API, який оновлює лише ціни та залишки без повної перегенерації. YML-фід простіше в налаштуванні, але менш гнучкий: наприклад, генерація YML для каталогу з 100 000 товарів займає ~5 хвилин, тоді як оновлення через API — менше хвилини, що у 5 разів швидше.

Яндекс підтримує два способи:

  1. YML-фід — файл за URL, який Яндекс завантажує за розкладом (мінімум раз на 24 год, максимум раз на годину)
  2. Price API — програмний інтерфейс для оновлення лише цін та наявності без повної перегенерації фіду

Для більшості магазинів достатньо YML-фіду. Price API підключається додатково, якщо ціни змінюються кілька разів на добу.

Порівняння YML та Price API

Характеристика YML-фід Price API
Частота оновлення 1–24 год Миттєво
Обсяг даних Весь каталог Тільки ціни/залишки
Складність налаштування Низька Середня
Ризик помилок Вищий (валідація всього фіду) Нижчий (тільки окремі поля)

YML-фід значно простіше налаштувати, ніж Price API, але при великих каталогах (понад 100 000 товарів) швидкість генерації YML може бути в 10 разів повільнішою за оновлення через API.

Як автоматизувати генерацію та оновлення фіду?

  1. Створіть XML-документ з кореневим елементом yml_catalog і атрибутом date.
  2. Додайте блок shop з назвою, компанією, URL, валютами та категоріями.
  3. Для кожного товару створіть offer із правильним типом (наприклад, vendor.model для електроніки) та обов'язковими полями.
  4. Перевірте валідність через інструмент Яндекс.Маркету або власний валідатор.
  5. Налаштуйте автоматичне оновлення за допомогою крону (наприклад, раз на годину).

Використовуємо PHP з XMLWriter — він пише безпосередньо у файл, не тримає весь XML в пам'яті, що забезпечує потоковий запис (streaming) та лінійну складність O(n). Це критично для каталогів на 100 000+ товарів. Для оптимізації продуктивності ми також застосовуємо Eager Loading в ORM та Lazy Collections для обробки даних без завантаження всіх записів одночасно.

Приклад коду генератора на PHP
class YandexMarketFeedGenerator { public function handle(): void { $path = storage_path('app/public/feeds/yandex.xml'); $writer = new \XMLWriter(); $writer->openUri($path); $writer->setIndent(true); $writer->startDocument('1.0', 'UTF-8'); $writer->writeDtd('yml_catalog', null, 'shops.dtd'); $writer->startElement('yml_catalog'); $writer->writeAttribute('date', now()->format('Y-m-d H:i')); $this->writeShopHeader($writer); $this->writeCurrencies($writer); $this->writeCategories($writer); $this->writeOffers($writer); $writer->endElement(); $writer->endDocument(); $writer->flush(); } private function writeOffers(\XMLWriter $w): void { $w->startElement('offers'); Product::with(['category', 'brand', 'images', 'attributes']) ->where('is_active', true) ->chunk(500, function ($products) use ($w) { foreach ($products as $p) { $w->startElement('offer'); $w->writeAttribute('id', $p->sku); $w->writeAttribute('available', $p->stock > 0 ? 'true' : 'false'); $w->writeElement('url', route('products.show', $p->slug)); $w->writeElement('price', (string) $p->price); if ($p->compare_price > $p->price) { $w->writeElement('oldprice', (string) $p->compare_price); } $w->writeElement('currencyId', 'RUR'); $w->writeElement('categoryId', $p->category_id); $w->writeElement('name', $p->name); $w->writeElement('vendor', $p->brand?->name ?? ''); $w->writeElement('barcode', $p->barcode ?? ''); foreach ($p->images as $img) { $w->writeElement('picture', $img->cdn_url); } foreach ($p->attributes as $attr) { $w->startElement('param'); $w->writeAttribute('name', $attr->name); if ($attr->unit) { $w->writeAttribute('unit', $attr->unit); } $w->text($attr->value); $w->endElement(); } $w->endElement(); } }); $w->endElement(); } } 

У реальному проєкті ми зіткнулися з каталогом на 200 000 товарів, де попередній генератор використовував DOMDocument і їв по 2 ГБ оперативки. Перехід на XMLWriter знизив споживання до 100 МБ і прискорив генерацію з 40 хвилин до 5 — тобто у 8 разів швидше.

Фід оновлюється через Laravel Scheduler:

// app/Console/Kernel.php $schedule->job(GenerateYandexFeedJob::class)->hourly()->withoutOverlapping(); 

Файл фіду віддається через виділений роут або безпосередньо з public/feeds/. Якщо каталог перевищує 500 МБ у XML, Яндекс рекомендує дробити фід на кілька файлів і реєструвати кожен окремо в кабінеті.

Який обсяг робіт та терміни?

Ми надаємо:

  • Аудит поточного фіду: перевірка валідації, пошук помилок типів полів, оптимізація розміру.
  • Розробка генератора під ваш стек (Laravel, Symfony, WordPress, DRF).
  • Інтеграція з системою управління товарами (ERP, CRM).
  • Тестування на повному каталозі та запуск у пісочниці Яндекса.
  • Документація з підтримки та навчання ваших розробників.
  • Моніторинг помилок та сповіщення при блокуванні.

Ключові метрики:

  • 5+ років досвіду на ринку
  • 50+ успішних проєктів з Яндекс.Маркетом
  • 100% фідів пройшли валідацію з першого разу

Базовий генератор для стандартного каталогу — 2–4 робочі дні. Складні категорії (одяг з розмірною сіткою, електроніка з розширеними атрибутами) — 4–6 робочих днів. Вартість налаштування починається від $200, а економія від вчасно виправленого фіду може сягати $1500 на місяць відновленого трафіку. Замовте безкоштовну консультацію — ми оцінимо ваш проєкт і дамо точний план.

Що входить в роботу?

  1. Документація — повний опис структури фіду, інструкція з підтримки.
  2. Доступи — налаштування доступу до сервера та системи керування товарами.
  3. Навчання — двохгодинна онлайн-сесія для ваших розробників.
  4. Технічна підтримка — 30 днів безкоштовної підтримки після запуску.
  5. Моніторинг — налаштування сповіщень про помилки через Slack або email.
  6. Звітність — щотижневий звіт з показниками валідації та кількістю активних оферів.