YML-фид: как устроен, где ломается и почему пропадают товары
YML-фид — это XML-файл с вашим каталогом, по которому Яндекс Маркет и рекламные площадки узнают, что и почём вы продаёте. Ломается он тихо: сайт работает, а половина товаров молча выпадает из выдачи. Разбираем структуру и типовые поломки.
Как устроен фид
Корневой элемент — yml_catalog с датой формирования. Внутри лежит секция магазина, а в ней по порядку идут валюты, категории и список предложений.
<yml_catalog date="2026-07-31 12:00">
<shop>
<currencies>...</currencies>
<categories>...</categories>
<offers>
<offer id="A-1024" available="true">...</offer>
</offers>
</shop>
</yml_catalog>
Каждое предложение описывается набором обязательных элементов. Если какого-то не хватает или он заполнен неверно, площадка отклоняет не весь фид, а конкретный товар — поэтому поломка и остаётся незамеченной.
| Элемент | Что задаёт | Где ошибаются |
|---|---|---|
| id | Уникальный идентификатор товара | Меняют при каждой выгрузке — площадка считает товар новым и теряет статистику |
| available | Есть ли товар в наличии | Ставят false при нулевом остатке на одном складе, хотя товар есть |
| url | Ссылка на карточку | Ведёт на 404 после смены структуры адресов |
| price и currencyId | Цена и валюта | Нулевая цена, копейки через запятую, валюта не из списка объявленных |
| categoryId | Категория товара | Ссылается на категорию, которой нет в секции categories |
| picture | Изображение товара | Картинка мельче 450×450 или недоступна по ссылке |
| name или vendor + model | Название товара | В названии оказываются служебные пометки вроде «(копия)» или артикул склада |
Пять поломок, из-за которых товары пропадают
Выгрузка не отработала. Cron-задача упала, а фид остался лежать со вчерашней датой. Площадка какое-то время использует старую версию, потом перестаёт ей доверять. Самая частая причина — переезд на другой хостинг или обновление CMS.
Файл сформировался наполовину. Скрипт упал на середине выгрузки, и XML оборвался посреди тега. Такой фид не парсится целиком — из каталога пропадает всё разом.
Битая кодировка или спецсимволы. Амперсанд или угловая скобка в названии товара без экранирования ломают XML в этой точке. Дальше по файлу площадка уже не читает.
Массовое переключение available в false. Сбой синхронизации с учётной системой — и весь каталог помечен как отсутствующий. Файл при этом валиден, дата свежая, размер прежний: формально всё в порядке.
Фид закрыт от площадки. Файл на месте, но отдаётся с ошибкой 403 или 500, попал под защиту от ботов, а иногда просто закрыт в robots.txt после планового обновления настроек.
Ни одна привычная метрика не сигналит: сайт открывается, трафик на месте, отчёты в аналитике выглядят обычно. Падают только продажи с площадки — и на фоне естественных колебаний спроса это списывают на «плохую неделю». Проходит десять дней, прежде чем кто-то догадается открыть сам файл.
Как проверить фид самому
Начните с самого грубого признака — числа предложений в файле. Если оно резко изменилось со вчерашнего дня, дальше можно не искать:
curl -s https://example.ru/products.yml | grep -c "<offer "
Затем убедитесь, что XML корректен целиком, а не только в начале. Любой валидатор XML покажет, где файл обрывается или где встретился неэкранированный символ. И проверьте дату в корневом элементе: она должна совпадать с сегодняшней, иначе выгрузка не отработала.
Наконец, откройте адрес фида в режиме инкогнито и посмотрите на код ответа. Файл, который у вас открывается по ссылке из админки, для внешнего робота может отдавать 403.
Пруфен ежедневно разбирает товарные фиды и следит за числом предложений: когда каталог резко худеет, приходит уведомление — на Email, в Telegram, в Макс или звонком. Есть отдельные проверки для авто-фидов и фидов недвижимости, а проверка доступности ловит случай, когда сам файл начал отдавать ошибку. Бесплатно доступны 5 проверок без ограничения по времени.
Частые вопросы
Как часто обновлять фид? Ориентируйтесь на скорость изменения цен и остатков: интернет-магазину с активной торговлей разумно выгружать раз в несколько часов, каталогу со стабильным ассортиментом хватит раза в сутки. Важнее регулярности сам факт: устаревший фид приводит к отказам, когда покупатель видит одну цену, а на сайте другая.
Можно ли отдавать один фид всем площадкам? Как правило, да — базовая структура YML общая. Но у каждой площадки свои дополнительные требования к полям и категориям, поэтому под конкретную площадку фид обычно дорабатывают. Идентификаторы товаров при этом лучше держать одинаковыми во всех выгрузках.
Товары пропали, а фид валиден — где искать? Проверяйте не структуру, а содержимое: массовый available в значении false, нулевые цены, ссылки на несуществующие категории и карточки, отдающие 404. Формально корректный файл может описывать каталог, в котором нечего показывать.
Нужно ли закрывать фид от индексации? Разумно закрыть его от поисковых роботов в robots.txt, чтобы XML-файл не попадал в выдачу. Только убедитесь, что при этом он остаётся доступен для роботов площадок — иначе вы отключите загрузку каталога вместе с индексацией.