Кабинет продавца пишет «загружено N товаров из M поданных» и на этом останавливается. Какие именно позиции не прошли, за что и что с ними теперь делать — не сказано. Владелец берёт онлайн-валидатор, тот считает структуру файла и ставит сто баллов. Дальше вопрос уходит к разработчику, разработчик открывает фид в браузере, видит нормальный XML и отвечает, что со стороны сайта всё отдаётся правильно. Оба правы, и именно поэтому дело не движется.
Пятого сентября 2026 мы собрали 28 публичных адресов YML-фидов чужих магазинов и прогнали их через ядро нашего валидатора с пресетом Rozetka, а поверх — дополнительные проверки по официальной справке площадки «Требования к XML-файлу», снятой в тот же день. Разобрался 21 фид, в них 88 991 товар. Девять из них сделаны именно для Rozetka — это видно по адресу, — и в этих девяти 30 279 позиций. Семь адресов не разобрались: четыре мёртвые или закрытые, один упёрся в лимит запросов, два имеют сломанную структуру, о них ниже.
Главный результат прогона такой. Базовая структура — идентификатор, цена, валюта, категория — цела в 16 фидах из 21. Это ровно то, что проверяет большинство онлайн-валидаторов, и ровно то, за что они ставят сто баллов. А без единого нарушения обязательных элементов Rozetka оказалось два фида, причём один из них всё равно отпадает целиком из-за отсутствия currencyId. Реально чистым остаётся один. В нём 28 товаров.
Что Rozetka считает обязательным
Справка площадки перечисляет обязательные элементы прямо: yml_catalog, shop, currencies, categories, offers, offer с id и available, stock_quantity или quantity_in_stock, price, currencyId, categoryId, picture, vendor, name или model, description, param. О характеристиках сказано отдельно: «название и значение обязательно должны быть заполнены». Об остатках: «позиции без этого тега будут иметь статус „нет в наличии“». Об идентификаторе: «допускается использование символов: Aa-Zz и 0-9, не допускается использование кириллицы и пробелов».
Половина этого списка — не структура, а содержание. Валидатор структуры увидит отсутствующий param только тогда, когда его специально научили, что для Rozetka этот тег обязателен. Вот как часто содержания не хватало в прогоне 05.09.2026.
| Чего не хватает | Фидов из 21 | Товаров из 88 991 | Из 9 фидов для Rozetka |
|---|---|---|---|
характеристики (param) |
15 (71 %) | 16 040 (18,0 %) | 7 |
бренд (vendor) |
12 (57 %) | 11 128 (12,5 %) | 5 |
описание (description) |
9 (43 %) | 5 698 (6,4 %) | 3 |
остатки (stock_quantity) |
6 (29 %) | 38 069 (42,8 %) | 1 |
картинки (picture) |
5 (24 %) | 1 794 (2,0 %) | 3 |
Порядок в двух правых колонках разный, и это самое интересное в таблице. Характеристики выпадают чаще всего по фидам, остатки — больнее всего по товарам: шесть файлов, но почти 43 % всей выборки. Причина в том, что остатков не бывает «немного»: либо тег стоит во всех позициях, либо ни в одной. В оптовом прайсе посуды и товаров для дома на 19 907 позиций тега остатков нет нигде. Магазин привык к атрибуту available="true" и считает вопрос наличия закрытым, а Rozetka держит позицию в продаже только пока число остатка больше нуля.
Правая колонка таблицы нужна, чтобы снять самое лёгкое возражение: мол, в выборке много универсальных файлов, которые никто на Rozetka и не собирался отдавать. Среди девяти фидов, сделанных именно для этой площадки, характеристик нет в семи, бренда — в пяти, описания — в трёх. Значит, дело не в том, что файл «не для Rozetka», а в том, что модуль выгрузки везде работает одинаково.
Мелочи, которые таковыми не являются
Описание короче 50 символов — 13 фидов из 21 (62 %), 1 726 товаров. В фиде сувенирной продукции это 500 позиций из 551. Формально описание заполнено, требование справки соблюдено, а карточка при этом пустая.
Дубли названий — 11 фидов (52 %), 903 товара. Справка формулирует требование так: «не должно быть больше одной позиции с абсолютно одинаковым названием». На практике это один и тот же товар в разных цветах или размерах, у которого отличие не вынесено в название. В фиде автотоваров таких 529 позиций, то есть 13 % файла, в фиде косметики оптом — 101 позиция, 15 %.
Идентификаторы с дефисом и двоеточием (277685-07, MO:39689-5546) стоят в трёх фидах, и это 23 926 товаров — 26,9 % выборки. Здесь нужна честность: формально такие символы вне разрешённого набора, а на практике дефис обычно проходит. Мы не видели отклонения именно из-за него и не утверждаем, что оно будет. Но перед выгрузкой большого каталога это тот пункт, который дешевле проверить отдельно, чем выяснять постфактум.
Картинки по http вместо https — один фид, зато целиком: 5 088 товаров. Больше пятнадцати картинок на позицию — три фида, 319 товаров; последствие здесь мягкое, площадка просто возьмёт первые пятнадцать.
Когда отпадает не товар, а весь файл
В четырёх фидах ошибка в одной строке снимает каталог полностью.
В фиде E, сделанном для Rozetka, во всех 6 108 позициях стоит currencyId со значением BRG, а блок currencies пуст. По справке площадка принимает только гривну, доллар и евро, так что в этом файле нет ни одной позиции с допустимой валютой — похоже, это ошибка настройки модуля, которую никто не заметил. В фиде N валюта объявлена как id="1.00000000" вместо кода, поэтому UAH в товарах не совпадает с объявленным: 1 103 позиции. В фиде O пусты все currencyId, а описание пустое у 978 товаров из 981. В фиде T на 31 товар currencyId нет вообще — это и есть тот второй «чистый» файл, который отпадает не по содержанию, а по валюте.
Ещё два файла не разобрались вовсе. Фид со спорттоварами на 11 410 позиций имеет корень shop без yml_catalog: формально это не YML, и разбор останавливается на первой строке. В фиде одежды и подарков на 2 661 позицию товары завёрнуты в item вместо offer, а картинки лежат в image — собственный формат, который ни один маркетплейс не читает как YML.
Откуда это берётся
Модуль выгрузки делает формат YML, а не фид для конкретной площадки. Он берёт поля, которые уже есть в базе магазина, и раскладывает их по тегам: название, цена, категория, картинка, признак наличия. Всё, чего Rozetka требует сверх этого, в магазине обычно тоже есть — но лежит не там, откуда модуль читает.
Характеристики живут в атрибутах товара или просто в тексте описания, а в фид их надо класть отдельными param с заполненными названием и значением. Бренд во многих каталогах либо пуст, либо подменён артикулом. Остаток есть в учётной системе, но в тег stock_quantity его никто не мапил, потому что для другой площадки хватало атрибута available. Файл при этом валиден, парсится, весит свои десятки мегабайт — в прогоне 05.09.2026 три фида были больше 60 МБ, самый большой 89 МБ — и на вид вполне рабочий.
Дополнительное наблюдение о происхождении этих файлов. Шесть из одиннадцати фидов, найденных перебором типичных путей, отдаются одним и тем же модулем экспорта для OpenCart. То есть ошибка здесь не персональная: магазины выгружают каталог одним инструментом с одинаковыми настройками по умолчанию.
Что с этим делать
Первое — прогнать свой файл пресетом Rozetka в валидаторе YML-фида. С 05.09.2026 он проверяет именно эти элементы и возвращает конкретные offer id с названием проверки, а не общую оценку. Как читать результат и что из него передать разработчику, разобрано в семи причинах, по которым площадка не принимает фид — здесь не повторяемся.
Второе — смотреть на списки позиций, а не на баллы. Сто баллов означает, что файл структурно цел, и ничего больше: в нашем прогоне такую оценку получили 16 фидов из 21, среди них и тот, у которого нет ни одной характеристики ни в одном товаре.
Третье, и это честный предел инструмента: валидатор не знает, пройдёт ли модерацию сама карточка. Он видит файл, а не требования конкретной категории площадки, не качество фотографий и не то, соответствует ли описание товару. Проверку в кабинете продавца он не заменяет — только сокращает количество заходов в неё.
Когда же выясняется, что поля надо менять на стороне магазина, а не в файле, начинается работа с каталогом и маппингом: как мы её делаем, описано на странице интеграции с Rozetka.
Порядок работ из этого списка напрашивается сам. Сначала валюта и корень файла, потому что они снимают каталог целиком. Потом остатки: они молча переводят позицию в статус «нет в наличии», и покупатель видит карточку, которую не может купить. Дальше бренд и характеристики, без которых карточка не проходит требования категории. Дубли названий и слишком короткие описания — в последнюю очередь: они нарушают требование справки, но разбор файла не останавливают.
Чего этот прогон не доказывает
Магазины для него найдены через открытые адреса фидов: перебор типичных путей на 118 доменах дал 11 файлов (9 %), ещё 12 адресов нашёл поиск по открытому коду на GitHub, и пять из них уже мёртвые или закрытые. Такой способ смещает выборку — в ней больше OpenCart и дропшиппинг-складов, чем на рынке в целом.
Двенадцать фидов из 21 сделаны не для Rozetka, а для других площадок или как универсальный YML. Требования Rozetka мы применили к ним как к кандидатам: а если этот же файл отдать Rozetka. Ситуация не выдумана, именно так магазины и делают, когда выходят на вторую площадку. Но цифры по всей 21 и цифры по девяти профильным фидам отличаются, поэтому в таблице стоят обе колонки.
И последнее. Прогон 05.09.2026 описывает состояние файлов, а не результат импорта: фиды меряны снаружи, и в кабинеты этих магазинов мы их не загружали.

