Статті ·

Чому Prom не приймає фід: сім причин і як їх знайти за хвилину

Розбір причин, через які Prom, Rozetka й Хорошоп відхиляють товари під час імпорту YML-фіду, і як знайти конкретні offer id без розробника.

Найгірше в імпорті фіду — не сама помилка, а те, як про неї повідомляють. Майданчик пише «завантажено 1 842 з 2 100 товарів» і не каже, які саме 258 не пройшли. Далі починається листування з розробником магазину, який теж не знає, бо у нього фід «віддається нормально».

Причин, через які товар відвалюється, насправді небагато. Ось вони в порядку від найчастішої, з поясненням, чому саме так.

1. Ціна нульова або відсутня

Класика для товарів «під замовлення» і «ціна за запитом». У магазині це може виглядати нормально, але у фіді <price>0</price> означає для майданчика некоректну позицію, і він її просто не бере.

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

2. Категорія, якої немає в списку категорій

У товара стоїть categoryId, якого немає в блоці <categories>. Зазвичай так стається після чистки каталогу: категорію видалили, а товари на неї ще посилаються.

<categories>
  <category id="1">Інструменти</category>
</categories>
<offers>
  <offer id="103">
    <categoryId>99</categoryId>  <!-- категорії 99 не існує -->

Такі товари не потрапляють у каталог, навіть якщо решта полів заповнена бездоганно.

3. Валюта поза блоком currencies

У товара <currencyId>USD</currencyId>, а в <currencies> оголошена лише гривня. Трапляється, коли частину каталогу завантажили від постачальника, що працює в доларах.

4. Символ & без екранування

Ця помилка ламає не окремий товар, а весь файл: XML перестає парситися, і майданчик відхиляє фід цілком. У назві «Ключі & біти» амперсанд має бути записаний як &amp;.

5. Немає зображення

Prom товар без картинки прийме, але покаже його гірше. Google Merchant Center відхилить. Якщо ви вивантажуєте фід ще й у Merchant, це критично. Для Rozetka картинка за довідкою обов’язкова: від однієї до п’ятнадцяти, лише по https і без кирилиці та пробілів в адресі.

6. HTML-теги в назві

Назва Лійка <b>садова</b> у картці показується як текст із символами тегів. Виглядає це так, ніби магазин зламався.

Окремо підступний випадок: деякі парсери на такій назві повертають порожній рядок або службовий текст, і товар імпортується з назвою на кшталт [object Object].

7. Дублі id і дублі товарів

Однакові id у двох товарів — імпорт залишить лише один. Складніший випадок: id різні, але це один і той самий товар, просто від двох постачальників. Такі картки ділять між собою покази, відгуки й посилання, і жодна не набирає достатньо сигналів, щоб вийти в топ.

Як знайти конкретні товари

Усе вище перевіряється автоматично. Валідатор YML-фіду приймає посилання на фід або сам XML і повертає список offer id з поясненням, що саме не так із кожним.

Обов’язкові поля відрізняються по майданчиках, тому в інструменті окремі пресети для Prom, Rozetka, Хорошопу й Merchant Center. Артикул для Rozetka якраз необов’язковий — а от vendor, description, хоча б один заповнений param і stock_quantity (або quantity_in_stock) за довідкою Rozetka обов’язкові в кожній позиції. Без тега залишків позиція отримує статус «немає в наявності»: атрибута available для цього замало. Тому те саме вивантаження може пройти на одному майданчику й відвалитись на іншому.

Наш прогін двадцяти одного публічного фіду це підтверджує: базова структура — id, ціна, валюта, категорія — була ціла у шістнадцяти фідах, а без порушень обов’язкових елементів Rozetka виявився лише один. Найчастіше бракувало характеристик (15 фідів із 21), бренду (12) і залишків — залишки випадали в шести фідах, але це 43 % усіх товарів вибірки.

Що передати розробнику

  1. Вивантажте CSV зі списком проблемних offer id.
  2. Додайте назву перевірки — вона вже є в таблиці.
  3. Цього достатньо: розробнику не треба пояснювати, що таке YML, він побачить конкретні позиції й поле.

Що перевірити перед кожним вивантаженням

  • усі ціни більші за нуль;
  • кожен categoryId має відповідник у <categories>;
  • валюти товарів оголошені в <currencies>;
  • у текстах немає голого &;
  • назви без HTML;
  • id унікальні;
  • для Rozetka: у кожній позиції є vendor, description і хоча б один заповнений param;
  • для Rozetka: є stock_quantity або quantity_in_stock цілим числом — інакше позиція йде як «немає в наявності»;
  • для Rozetka: від однієї до п’ятнадцяти картинок, лише https, без кирилиці й пробілів в адресі;
  • для Rozetka: назва до 255 символів і не повторює дослівно іншу, currencyId — UAH, USD або EUR, файл у UTF-8.

Це п’ять хвилин перед вивантаженням проти двох днів листування після нього.