СтатьяРеклама

Как проверить categoryId после перестройки каталога

Сравнение двух версий YML: изменения справочника categories, переносы товаров и ссылки на отсутствующие categoryId.

Два распечатанных YML-фида и бумажное дерево категорий, где один товар перенесён в неверную ветку.

После перестройки каталога 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.

Сравнение categoryId между двумя версиями YML: один перенос подтверждается, один требует проверки, одна ссылка ведёт на отсутствующую категорию.

Скрипт отмечает изменение, а решение принимает владелец каталога: одинаковый перенос может быть ожидаемым для одного товара и ошибочным для другого.

Учебный пример

В первой версии три категории и три товара. Во второй появилась категория 11, категория 10 получила новое название, два общих товара сменили ветку, а новый товар LAMP-301 ссылается на отсутствующую категорию 99.

ОбъектВерсия 1Версия 2Результат
категория 10КреслаДомашние креслапроверить изменение смысла ID
категория 11—Офисные креслановая категория
CHAIR-1011011подтвердить ожидаемый перенос
CHAIR-1021020проверить ошибку: кресло попало в столы
DESK-2012020без изменений
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 пять строк:

СтатусТипОбъектСтарое → новое
INFOCATEGORY_ADDED11— → Офисные кресла
REVIEWCATEGORY_CHANGED10Кресла → Домашние кресла
REVIEWOFFER_CATEGORY_CHANGEDCHAIR-10110 → 11
REVIEWOFFER_CATEGORY_CHANGEDCHAIR-10210 → 20
ERRORBROKEN_CATEGORY_REFERENCELAMP-301— → 99

Скрипт останавливается при повторяющемся category id или offer id. Такие дубли разрушают однозначное сопоставление, поэтому выбирать последнюю запись по позиции в XML нельзя.

Как принять изменения

Исправьте ссылки в пустоту

ERROR означает, что categoryId товара отсутствует в текущем справочнике. Добавьте категорию, исправьте сопоставление либо исключите товар до повторной генерации. Затем проверьте весь файл, а не только один пример.

Разберите каждый перенос

Для REVIEW добавьте в отчёт причину и владельца решения. Полезный минимальный набор полей: offer_id, старый categoryId, новый categoryId, основание, задача или заявка на изменение. Массовый перенос допустим, если команда заранее согласовала новую структуру и состав товаров в ветке.

Не переиспользуйте ID молча

Если категория 10 называлась «Кресла», а теперь называется «Домашние кресла», старый ID получил более узкий смысл. Проверьте все товары, которые остались в 10: часть офисных кресел могла не переехать в новую категорию 11.

Сверьте несколько карточек вручную

Откройте товары из каждой изменённой группы и проверьте название, тип товара и посадочную страницу. Автоматический дифф видит связь идентификаторов, но не определяет, подходит ли товар категории по смыслу.

Критерий готовности

Новая версия проходит локальную приёмку, когда:

  1. каждый categoryId из предложений существует в categories;
  2. нет повторяющихся ID категорий и товаров;
  3. все изменения названия и parentId объяснены;
  4. каждый перенос общего offer id подтверждён или исправлен;
  5. ручная выборка совпала с карточками сайта;
  6. рекламная система обработала именно проверенную версию файла.

Начать можно с анализатора товарных фидов WiseLab: он проверяет YML и сравнивает две версии по товарам и полям. После исправлений пройдите приёмку товарного фида и сохраните отчёт вместе с хешами файлов и временем загрузки в кабинет.

Ограничения проверки

Локальный дифф подтверждает структуру двух сохранённых файлов. Он не показывает, какую версию уже скачал Яндекс, не проверяет правила конкретной рекламной кампании и не доказывает, что выбранная категория улучшит показы. Эти вопросы проверяются после загрузки по диагностике площадки и фактической версии фида.

Источники

Материал подготовлен редакцией WiseLab с помощью AI. Источники и фактические утверждения проверены при подготовке.

Загружаем рейтинг…

Насколько полезен материал?

Выберите оценкуСлева — меньше пользы, справа — больше

Загружаем вашу оценку…

Что думаете?

Загружаем комментарии…

СЛЕДУЮЩИЙ ШАГ

Что ещё поможет в этой задаче