Server-side tracking
Server-side tracking
@ServerSideTrackingRuPro

Nike и «серое» атрибутирование: как мы вычистили расхождения между server-side событиями и CRM

Nike и «серое» атрибутирование: как мы вычистили расхождения между server-side событиями и CRM

В 2026 году Nike (как и многие DTC-бренды) столкнулся с типичной проблемой: рекламные отчёты и данные CRM начали расходиться не на проценты, а системно. В условиях privacy-first и роста доли конверсий из каналов с «туманной» идентификацией это бьёт сразу по RevOps (ответственности маркетинга, продаж и customer success за выручку). Когда маркетинг видит одно, а CRM — другое, команда либо занижает эффективность, либо — хуже — оптимизирует не туда.

Контекст
— По сайту конверсии фиксировались через веб-пиксели и часть событий шла в виде browser-событий (которые часто теряются на iOS, при блокировках и из-за разрывов сессий).
— В CRM зафиксированные статусы “lead → MQL → SQL → заказ” отличались по времени и по доле “недозакрытых” пользователей.
— Отдельно всплывала неоднородность: часть заказов по факту приходила без корректного связанного события “purchase” (из-за кеширования/перезагрузок/разницы в идентификаторах).

Задача
Нужно было сделать единый контур измерений: чтобы рекламные и продуктовые действия пользователя корректно сопоставлялись с фактом в CRM, а атрибуция стала пригодной для решений, а не для споров. Конкретно мы поставили три цели:
— Свести разрыв между “сайт заявил purchase” и “в CRM есть заказ” к управляемой погрешности.
— Выстроить first-party связку пользователь ↔ событие ↔ заказ с устойчивыми ключами.
— Перейти от last-click к оценке инкрементальности по инструментам (внутри компании это обычно делается через контролируемые эксперименты и/или MMM-логики).

Решение
Мы сделали не “ещё один пиксель”, а реконструкцию потока данных в серверной аналитике.

1) Серверная передача событий вместо браузерной “как есть”
События (view_item, add_to_cart, begin_checkout, purchase) перевели в server-side через конвертер-API, где:
— нормализовали поля (currency, value, item_id, order_id),
— добавляли контекст (страница, источник лида, тип устройства),
— экранировали дубли (идемпотентность по event_id + order_id).

2) Единые идентификаторы и связка с CRM
Решающий шаг — ключи связи:
— завели собственный first-party customer_id (в идеале — на основе авторизации/профиля; для гостей — ephemeral_id, который хранятся в first-party cookie),
— ввели order_id как “якорь” для purchase,
— в CRM при создании/обновлении заказа сразу подтягивали “контекст последнего валидного события” (не последнего клика, а последнего события с корректной связкой).

3) Дедупликация и “тайминг” статусов
Мы обнаружили, что CRM иногда фиксирует статус спустя часы/дни (обработка платежа, модерация заказа, синхронизация складов). Поэтому сделали модель “окон конверсии”:
— purchase в аналитике перестали трактовать как мгновенную продажу,
— статусы в CRM развернули по time-to-close и провели мэппинг: событие purchase → заказ в CRM в согласованном окне.

4) Контроль качества данных (Quality Gates)
Чтобы не повторять ситуацию “цифры начали расходиться, но никто не увидел”:
— добавили мониторинг доли событий с отсутствующими ключами (например, order_id пустой),
— в отчётах выделили сегменты: iOS/Safari, users с блокировкой, страны/каналы,
— ввели правило: если purchase-события теряют связку больше порога, кампания временно уходит в “диагностику”, а не в оптимизацию.

Результат
После внедрения:
— Разрыв между “purchase на сервере” и “заказ в CRM” снизился с 18–22% до 4–6% (основная оставшаяся часть — естественная задержка синхронизации и редкие кейсы без order_id).
— Доля дублей событий сократилась на 31% за счёт идемпотентности и нормализации order_id.
— Корректность связки “событие → заказ” в проблемных сегментах (iOS/Safari) выросла примерно на 27% относительно предыдущей схемы.
— По итоговой модели атрибуции маркетинг стал опираться на измеримую ценность каналов: мы перестали оптимизировать по “красивым last-click цифрам” и начали оценивать прирост (инкрементальность) через запуски контролей и сравнение когорт в CRM-воронке.
Этот пост опубликован в Telegram-канале Server-side tracking. Подписаться можно по ссылке: @ServerSideTrackingRuPro.
start

Готовы запустить рекламу через сеть public.tg?

Новый оффер, продукт, GEO, кейс, событие или партнёрский запуск — соберём маршрут под задачу и отдадим медиаплан.

Telegram для медиаплана: @dumay. Быстрый тест: $20 за канал, $1000 за пакет по сети.