После перестройки каталога YML может оставаться корректным XML и содержать прежнее число товаров, хотя часть предложений уже попала в другие категории. Проверьте две точные версии файла по стабильному offer id: сначала связи с текущим справочником categories, затем изменения categoryId у общих товаров.
Почему счётчика товаров недостаточно
В YML categoryId связывает предложение с категорией магазина. В требованиях Яндекс Директа это положительное целое число длиной до 18 знаков; одно товарное предложение может принадлежать только одной категории.
После изменения структуры сайта встречаются четыре разных результата:
- новая категория появилась в справочнике и пока не используется;
- прежний ID сохранился, но у категории изменились название или родитель;
- товар с тем же
offer idполучил другойcategoryId; - товар ссылается на категорию, которой уже нет в блоке
categories.
Последний случай блокирует нормальную связь товара со справочником. Смена категории требует проверки: это может быть ожидаемый перенос или ошибка сопоставления в CMS.
Зафиксируйте две версии
Сохраните старый и новый YML как отдельные файлы. Для каждого запишите время получения, размер и контрольную сумму. Повторная загрузка по одному URL может вернуть уже другую генерацию, поэтому сравнение адресов без сохранённых файлов не воспроизводится.
До проверки категорий убедитесь, что offer id уникальны и означают один и тот же товар в обеих версиях. Если генератор поменял идентификаторы, дифф покажет удалённые и новые строки вместо реальных переносов. Для этого есть отдельная инструкция по проверке дублей и смены offer id.
Сравните справочник и товары отдельно
Справочник категорий удобно представить как таблицу из трёх полей:
| Поле | Что проверять |
|---|---|
id | уникальность и появление или удаление категории |
| название | не получил ли прежний ID другой смысл |
parentId | не переехала ли ветка в другую часть дерева |
Товары сравнивайте по offer id. Для общих ID сохраните старый и новый categoryId. Новые товары проверяйте отдельно: каждый их categoryId должен существовать в новой версии categories.
Скрипт отмечает изменение, а решение принимает владелец каталога: одинаковый перенос может быть ожидаемым для одного товара и ошибочным для другого.
Учебный пример
В первой версии три категории и три товара. Во второй появилась категория 11, категория 10 получила новое название, два общих товара сменили ветку, а новый товар LAMP-301 ссылается на отсутствующую категорию 99.
| Объект | Версия 1 | Версия 2 | Результат |
|---|---|---|---|
категория 10 | Кресла | Домашние кресла | проверить изменение смысла ID |
категория 11 | — | Офисные кресла | новая категория |
CHAIR-101 | 10 | 11 | подтвердить ожидаемый перенос |
CHAIR-102 | 10 | 20 | проверить ошибку: кресло попало в столы |
DESK-201 | 20 | 20 | без изменений |
LAMP-301 | — | 99 | ошибка: категории 99 нет |
Пример намеренно небольшой и не описывает реальный магазин. Его задача — показать различие между технической ошибкой ссылки и переносом, которому нужно бизнес-подтверждение.
Запустите воспроизводимый дифф
В комплекте сохранены feed-v1.xml, feed-v2.xml и скрипт compare_yml_categories.py. Он использует стандартный модуль Python xml.etree.ElementTree, строит два словаря категорий и сопоставляет товары по ID.
python3 compare_yml_categories.py feed-v1.xml feed-v2.xml category-diff-report.csvДля учебных файлов команда возвращает:
rows=5 errors=1 reviews=3Комплект добавлен 21 октября 2026 года. XML описывают вымышленный каталог; REVIEW требует решения владельца, а не доказывает ошибку категории. В архиве — полный скрипт, обе версии YML, README и CSV, созданный опубликованной командой. Скачать комплект.
В CSV пять строк:
| Статус | Тип | Объект | Старое → новое |
|---|---|---|---|
INFO | CATEGORY_ADDED | 11 | — → Офисные кресла |
REVIEW | CATEGORY_CHANGED | 10 | Кресла → Домашние кресла |
REVIEW | OFFER_CATEGORY_CHANGED | CHAIR-101 | 10 → 11 |
REVIEW | OFFER_CATEGORY_CHANGED | CHAIR-102 | 10 → 20 |
ERROR | BROKEN_CATEGORY_REFERENCE | LAMP-301 | — → 99 |
Скрипт останавливается при повторяющемся category id или offer id. Такие дубли разрушают однозначное сопоставление, поэтому выбирать последнюю запись по позиции в XML нельзя.
Как принять изменения
Исправьте ссылки в пустоту
ERROR означает, что categoryId товара отсутствует в текущем справочнике. Добавьте категорию, исправьте сопоставление либо исключите товар до повторной генерации. Затем проверьте весь файл, а не только один пример.
Разберите каждый перенос
Для REVIEW добавьте в отчёт причину и владельца решения. Полезный минимальный набор полей: offer_id, старый categoryId, новый categoryId, основание, задача или заявка на изменение. Массовый перенос допустим, если команда заранее согласовала новую структуру и состав товаров в ветке.
Не переиспользуйте ID молча
Если категория 10 называлась «Кресла», а теперь называется «Домашние кресла», старый ID получил более узкий смысл. Проверьте все товары, которые остались в 10: часть офисных кресел могла не переехать в новую категорию 11.
Сверьте несколько карточек вручную
Откройте товары из каждой изменённой группы и проверьте название, тип товара и посадочную страницу. Автоматический дифф видит связь идентификаторов, но не определяет, подходит ли товар категории по смыслу.
Критерий готовности
Новая версия проходит локальную приёмку, когда:
- каждый
categoryIdиз предложений существует вcategories; - нет повторяющихся ID категорий и товаров;
- все изменения названия и
parentIdобъяснены; - каждый перенос общего
offer idподтверждён или исправлен; - ручная выборка совпала с карточками сайта;
- рекламная система обработала именно проверенную версию файла.
Начать можно с анализатора товарных фидов WiseLab: он проверяет YML и сравнивает две версии по товарам и полям. После исправлений пройдите приёмку товарного фида и сохраните отчёт вместе с хешами файлов и временем загрузки в кабинет.
Ограничения проверки
Локальный дифф подтверждает структуру двух сохранённых файлов. Он не показывает, какую версию уже скачал Яндекс, не проверяет правила конкретной рекламной кампании и не доказывает, что выбранная категория улучшит показы. Эти вопросы проверяются после загрузки по диагностике площадки и фактической версии фида.
Источники
Материал подготовлен редакцией WiseLab с помощью AI. Источники и фактические утверждения проверены при подготовке.
Что думаете?
Загружаем комментарии…