Интеграции / Каталоги
Импорт товаров из XML, CSV и API: как построить надёжный каталог
Импорт товаров — не задача «распарсить XML и вывести карточки». Если каталог объединяет нескольких поставщиков, необходимо решить, кому принадлежит идентификатор, как обновляется наличие, какие атрибуты обязательны и что происходит при ошибке фида.

Почему простой импорт ломается на масштабе
На тестовой загрузке 100 товаров разработчик может сопоставить поля вручную. На десятках тысяч карточек появляются дубли, разные единицы измерения, лишние символы, конфликтующие остатки и валюты. Один поставщик называет цвет navy, другой — «тёмно-синий»; один отдаёт цену за штуку, другой — за комплект. Если всё напрямую публикуется на сайте, пользователь получает неверные сравнения, а менеджер — некорректные заявки.
Архитектура каталога должна разделять внешние данные поставщика и собственную товарную модель. Это полезно и для UX, и для SEO: нормализованные характеристики можно использовать в фильтрах, карточках и структуре большого B2B-каталога.
Три формата источников
| Источник | Сильная сторона | Риск | Когда подходит |
|---|---|---|---|
| XML | Иерархия, повторяемая схема | Непоследовательные поля, тяжёлые файлы | Каталоги поставщиков |
| CSV | Простая обработка таблиц | Кодировки, разделители, потеря типов | Выгрузки цен и остатков |
| API | Данные по запросу, частые обновления | Лимиты, авторизация, нестабильность | Наличие, цены, заказы |
Формат сам по себе не гарантирует качество. Начните с договора о данных: кто отвечает за значения, как часто приходит обновление, какие поля обязательны и что означает удаление позиции из фида.


Архитектура из пяти слоёв
1. Получение и сохранение исходного снимка
Забирайте источник по расписанию или через webhook; сохраняйте время загрузки, версию и хеш. Полезно хранить исходный файл или безопасный архив на ограниченный срок: без него трудно выяснить, почему цена изменилась вчера. Для крупных XML используйте потоковую обработку, чтобы не держать весь документ в памяти.
2. Staging — временная зона
Не записывайте непроверенные данные сразу в публичные карточки. В staging находятся сырой SKU, цена, единица измерения, атрибуты и ошибки валидации. Товар с отрицательной ценой, отсутствующим идентификатором или битым изображением не должен молча публиковаться.
3. Нормализация
Создайте словари единиц, категорий, цветов и свойств. Например, pcs, шт. и piece можно привести к одному внутреннему значению, сохранив исходник для отладки. Размеры храните числом и единицей, а не строкой «около 30 см» во всех фильтрах.
4. Сопоставление и дедупликация
Внутренний product_id должен быть стабильным и не зависеть от порядкового номера строки в XML. Внешний идентификатор храните как пару supplier_id + supplier_sku: одинаковые артикулы у разных поставщиков могут означать разные товары. Дубли объединяйте только по проверяемым ключам, а не по похожему названию.
5. Публикация и мониторинг
Обновление должно быть атомарным: либо новая версия данных прошла проверки и опубликована, либо сайт продолжает использовать предыдущий корректный снимок. Логируйте изменения цен, числа товаров, количества пустых категорий и доли карточек без изображений.
Как обновлять цены, остатки и ассортимент
Один фид может приходить раз в сутки, остатки — каждые 15 минут, а описание — раз в месяц. Не нужно перегенерировать тысячи страниц при каждом изменении остатка, если архитектура позволяет обновлять динамический блок отдельно. Но цена, доступность и условия в интерфейсе должны оставаться согласованными с формируемым КП.
Если товар исчез из одного фида, не удаляйте карточку немедленно. Уточните семантику источника: это «нет в наличии», «поставщик временно не передал» или «выведено из ассортимента»? От этого зависит UX, доступность URL и поисковая стратегия. Массовое удаление при сбое одного файла может создать тысячи ошибок 404 и разрушить внутренние ссылки.
Для мультивалютного каталога разделяйте исходную валюту, курс расчёта, валюту отображения и правила округления. Значение 100 без валюты и единицы цены недопустимо.
Что происходит с товаром при импорте
- 01ПолучитьXML, CSV или API
- 02НормализоватьЦена, валюта, остаток
- 03ПроверитьКлюч и обязательные поля
- 04СохранитьОбновить или создать запись
Товарная модель для SEO и фильтров
У каждой категории должна быть собственная схема атрибутов. Для текстиля важны материал, размер и плотность; для электроники — интерфейс, ёмкость и совместимость; для упаковки — размеры, материал и тираж. Общий словарь свойств полезен, но нельзя принуждать все товары к одной гигантской анкете.
Выберите индексируемые поля, пригодные для формирования метатегов: тип, бренд, модель, ключевой параметр. Не создавайте псевдоуникальные описания генерацией случайных синонимов. Лучше иметь точные структурированные данные и фотографии, чем длинный бессодержательный текст. Это напрямую влияет на SEO фильтров.
Ошибки, от которых защищают тесты
- Поставщик изменил название поля — импорт не должен превращать все цены в нули.
- Из фида пропало 80% товаров — остановить публикацию и поднять предупреждение.
- Сменился разделитель CSV — определить ошибку до записи.
- Два артикула стали совпадать после очистки — записать конфликт, а не удалить один молча.
- Изменился курс — пересчитать по документированному правилу и показать дату применённого курса, если это существенно для покупателя.
- Сайт недоступен в момент импорта — повторить задачу безопасно и без удвоения карточек.
Пример минимальной проверки качества
Для ежедневной задачи импорта задайте пороги, подтверждённые особенностями конкретного ассортимента: число позиций по сравнению с предыдущей загрузкой, доля пустых изображений, доля цен <= 0, дубли идентификаторов, число неизвестных единиц. Не существует универсальной нормы «допустимо 3% ошибок»: для стоимости товара даже единичная ошибка может иметь коммерческие последствия.
В кейсе MOLE можно увидеть конечную роль большой товарной матрицы в B2B-системе. Отдельно от интерфейса стоит документировать источник данных, способ сопоставления и логику обновлений — именно они определяют устойчивость каталога.
Один товар в трёх форматах
Условная запись с одинаковыми артикулом, ценой и остатком. Переключите формат, чтобы сравнить поля.
CSV
supplier_id,sku,name,price,currency,stock
demo,AB-101,Термокружка,8.90,USD,12XML
<product supplier_id="demo" sku="AB-101">
<name>Термокружка</name>
<price currency="USD">8.90</price>
<stock>12</stock>
</product>API / JSON
{
"supplier_id": "demo",
"sku": "AB-101",
"name": "Термокружка",
"price": "8.90",
"currency": "USD",
"stock": 12
}Ключ импорта — пара supplier_id и sku. Повторная загрузка по этому ключу обновляет товар.
Сверьте две последовательные загрузки
Сохраните снимок до публикации и отчёт об изменениях после импорта. Для повторной загрузки того же файла ожидайте ноль изменений. Отдельно протестируйте пропавшую позицию, пустую цену и изменение фасовки: у каждого случая должно быть своё правило.
Как данные выглядят в интерфейсе
FAQ
Что лучше для большого каталога — XML или API?
Зависит от поставщика и частоты обновлений. XML часто удобен для полной номенклатуры, API — для оперативных цен и остатков. Можно использовать оба способа.
Как часто обновлять остатки?
По реальному риску продажи недоступного товара и возможности источника. Для позиций с высокой оборачиваемостью нужны более частые обновления, чем для стабильных справочных данных.
Нужно ли удалять карточки, которых больше нет в фиде?
Не автоматически. Сначала определите причину исчезновения, альтернативного поставщика и поисковую ценность URL.
Как бороться с дублями одного товара у разных поставщиков?
Использовать устойчивые атрибуты и модель «товар — предложения поставщиков». Автоматическое слияние только по названию создаёт ошибки.
Можно ли построить статический сайт на базе XML-фидов?
Да. Страницы могут формироваться на этапе сборки, а оперативные цены и остатки — подгружаться через защищённый сервис. Архитектура зависит от нужной свежести данных.
Следующий шаг
Прежде чем писать импортёр, согласуйте таблицу полей, правила ошибок и сценарий отката. Для проектирования интерфейса после импорта полезен материал «UX B2B-каталога: от поиска до КП». Если проектируется система целиком, см. разработку сайтов и каталогов.
Источники: Google: URL для e-commerce; OWASP: проверка входных данных.

