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

Как сверить offer id фида с товарами в событиях Метрики

Проверяем связь YML с просмотрами, корзиной и покупками: точные ID, варианты, пустые ключи и воспроизводимая сверка восьми учебных строк.

Карточки товарного каталога и событий сопоставляются по одинаковым меткам, несовпавшая метка вынесена под лупу.

Начните со сверки двух наборов: offer id из той версии YML, которая передана в Директ, и товарных ID из событий сайта. Если просмотр, корзина или покупка отправляют другой ключ, исправный XML ещё не обеспечивает связь поведения посетителя с товаром.

В требованиях Яндекс Директа к YML прямо указано: товарные ID электронной коммерции должны совпадать с offer id для корректного офферного ретаргетинга в РСЯ. Ниже — протокол проверки этой связи для магазина, у которого такой сценарий уже доступен в аккаунте. Он подходит и для команды в Беларуси: сверка выполняется локально, без покупки сервиса и передачи клиентских данных.

Сначала определите, какой объект обозначает ID

Одна карточка может объединять модель кресла и несколько вариантов цвета. Если фид описывает чёрный вариант как CHAIR-202-BLACK, а событие корзины передаёт родительский CHAIR-202, это разные ключи. Одинаковое название и правильная цена расхождение не устраняют.

Зафиксируйте единицу учёта вместе с разработчиком: модель, вариант или комплект. Затем укажите поле-источник в CMS для выгрузки и каждого события. Не начинайте с удаления префиксов или ведущих нулей: сначала нужно доказать, что обе записи относятся к одному объекту.

В собственном формате электронной коммерции Метрики товар находится в массиве products, его ключ — id. Для описания товара справка допускает id или name, но наличие одного названия не решает задачу сопоставления с фидом. ID покупки в purchase.actionField.id обозначает заказ; сравнивать его с offer id нельзя. Для сайта с GA4-форматом сначала проверьте фактический items[].item_id и способ его обработки вашей интеграцией.

Соберите проверяемый срез

Сохраните файл фида, URL источника, время скачивания и контрольную сумму. Проверьте его в анализаторе товарных фидов: структура и уникальность ключей нужны до межсистемной сверки. Если в файле два одинаковых offer id, сначала разберите дубли идентификаторов.

Для событий подготовьте таблицу: одна строка — один товар внутри одного события. Покупка с тремя товарами даст три строки с общим идентификатором события. Количество единиц товара остаётся отдельным полем и не увеличивает число строк автоматически.

Минимально сохраните row_id, время, действие, исходный товарный ID, URL карточки и выбранный вариант. Укажите также источник наблюдения: сообщение в dataLayer, отправленный запрос или обработанные данные. Эти уровни проверки дают разные доказательства. Выберите контрольные товары с вариантами, числовыми ID, ведущими нулями и недавними изменениями; такая выборка помогает найти дефекты, но не измеряет весь трафик магазина.

Таблицу можно собрать при контрольном проходе: открыть карточку, выбрать вариант, добавить его в корзину и оформить разрешённый тестовый заказ. Не отправляйте вымышленные покупки в рабочий счётчик без согласованного способа исключения теста. Для каждого шага сохраните исходное значение, не меняя регистр, пробелы, префикс или формат числа. Телефоны, email, имена покупателей и содержимое заказа для этой задачи не нужны.

Учебный пример: три совпадения из восьми строк

В вымышленном фиде четыре уникальных ID: 00101, CHAIR-202-BLACK, 303 и SPARE-404. Проверяем восемь товарных строк событий. Это синтетические данные для воспроизведения метода.

СтрокаДействиеID в событииРезультат точной сверки
R1просмотр00101найден в фиде
R2корзина101не найден: проверьте потерю нулей
R3просмотрCHAIR-202-BLACKнайден в фиде
R4корзинаCHAIR-202не найден: проверьте модель и вариант
R5покупкаSKU-303не найден: проверьте источник префикса
R6просмотрпустоID отсутствует
R7покупка303найден в фиде
R8просмотрOLD-9не найден: проверьте состав выгрузки

Получились три точных совпадения, четыре ненайденных ключа и одна пустая строка. Локальная доля совпавших товарных строк — 3 / 8 = 37,5%. Знаменатель включает пустой ID; исключить его молча означало бы скрыть часть дефектов. Это результат учебной выборки, а не показатель сопоставления из Директа и не доля потерянных продаж.

Учебная сверка восьми товарных строк: три ID совпали с фидом, четыре не найдены, у одной строки ID отсутствует.

Схема основана на таблице выше. Ненайденный ключ требует разбора причины; он не всегда означает ошибку магазина.

OLD-9 может принадлежать товару, который сознательно исключён из рекламного ассортимента. Тогда нужно подтвердить правило исключения и выделить такую строку в отдельную группу. SPARE-404 присутствует в фиде, но не встречается в контрольных событиях: само по себе это нормально. Посетители и тестировщик не обязаны просмотреть каждый товар каталога.

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

Для небольшого согласованного среза достаточно Python 3. Сохраните ниже events.csv и запустите код рядом с доверенным YML-файлом feed.yml. CSV хранит ID как текст. Скрипт поддерживает обычный YML без XML-пространств имён; он не скачивает файлы и не отправляет данные в аналитику.

Для воспроизведения чисел сохраните такой минимальный feed.yml. Это сокращённый XML только для локальной сверки ID; для загрузки в Директ нужны остальные поля полноценного товарного фида.

<yml_catalog><shop><offers>
  <offer id="00101"/>
  <offer id="CHAIR-202-BLACK"/>
  <offer id="303"/>
  <offer id="SPARE-404"/>
</offers></shop></yml_catalog>
row_id,action,item_id
R1,detail,00101
R2,add,101
R3,detail,CHAIR-202-BLACK
R4,add,CHAIR-202
R5,purchase,SKU-303
R6,detail,
R7,purchase,303
R8,detail,OLD-9
import csv
from collections import Counter
from xml.etree import ElementTree as ET

root = ET.parse("feed.yml").getroot()
ids = [offer.get("id", "") for offer in root.findall("./shop/offers/offer")]
if not ids or any(not value.strip() for value in ids):
    raise ValueError("Нет офферов или найден пустой offer id")
if any(count > 1 for count in Counter(ids).values()):
    raise ValueError("Сначала устраните дубли offer id")
feed_ids = set(ids)

with open("events.csv", encoding="utf-8-sig", newline="") as src:
    rows = list(csv.DictReader(src))
if not rows:
    raise ValueError("Нет товарных строк событий")
row_ids = [row["row_id"] for row in rows]
if any(not value.strip() for value in row_ids) or len(set(row_ids)) != len(rows):
    raise ValueError("row_id должен быть непустым и уникальным")
for row in rows:
    value = row["item_id"]
    if value is None:
        raise ValueError("Неполная строка CSV")
    row["status"] = ("MISSING_ID" if not value.strip() else
                     "MATCH" if value in feed_ids else "NOT_IN_FEED")

with open("audit.csv", "w", encoding="utf-8-sig", newline="") as dst:
    out = csv.DictWriter(dst, fieldnames=["row_id", "action", "item_id", "status"])
    out.writeheader()
    out.writerows({key: row[key] for key in out.fieldnames} for row in rows)
print(dict(Counter(row["status"] for row in rows)))

На учебных файлах результат: MATCH: 3, NOT_IN_FEED: 4, MISSING_ID: 1. Для своего магазина используйте сохранённую версию рекламного фида и собственную таблицу контрольных наблюдений. Совпадение проверяется посимвольно; код специально не превращает 00101 в 101 и не заменяет SKU-303 на 303.

Передайте исправление конкретному владельцу

Для R2 сопоставьте исходный ID в CMS с шаблонами просмотра и корзины: если просмотр сохраняет нули, а корзина их теряет, ошибка находится между этими слоями. Для R4 проверьте передачу выбранного варианта после смены цвета. Для R5 выясните, какой модуль добавил префикс. Это направления проверки, а не доказанные причины по одному внешнему виду ключа.

Задача разработчику должна содержать строку отчёта, URL и вариант, ожидаемый offer id, фактический ID события, способ воспроизведения и версию фида. Например: «После выбора чёрного кресла событие add передаёт CHAIR-202; фид содержит CHAIR-202-BLACK. Согласуйте источник ID варианта, затем повторите просмотр, корзину и покупку». Массово менять ключи фида ради одного сломанного события без проверки действующих связей рискованно.

Примите исправление на двух уровнях

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

Затем проверьте фактическое получение данных по инструкции Метрики и состояние фида в рекламном аккаунте. Запись в контейнере браузера ещё не доказывает доставку события; наличие ключа в скачанном YML не подтверждает, что площадка уже обработала именно эту версию. Полную настройку событий продолжайте по руководству по электронной торговле, приёмку файла — по чек-листу исправленного фида.

Готовый результат проверки — версия фида, исходные наблюдения, таблица исключений и повторный контроль после исправления. Даже полное совпадение ID в выборке не подтверждает доступность рекламного формата для аккаунта, настройки аудиторий, модерацию, показы или рост продаж.

Источники

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

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

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

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

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

Что думаете?

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

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

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