Доставка конверсий: проверяем, что каждая конверсия дошла до Meta, Google и трекера

За клик вы уже заплатили. Если депозит, который он принёс, так и не долетел до Meta или Google, оптимизатор платформы продолжает закупать похожих на тех, кто не конвертится. Если S2S-постбэк в партнёрский трекер не прошёл, конверсии нет и в вашей собственной статистике. Страница «Доставка конверсий» - единственный экран, который отвечает на вопрос «долетела ли каждая конверсия на самом деле»: карточки CAPI по каждой площадке, карточки постбэков по каждому правилу, таблица всего застрявшего и кнопка «Переотправить» для ручного восстановления.

Как читать карточки

Вверху страницы - по карточке на каждую CAPI-площадку: Meta, Google и TikTok, все три отправляют серверно. Ниже - по карточке на каждое правило постбэка, по которому была хотя бы одна доставка за последние 7 дней. CAPI-площадка может показать карточку и с нулём доставок - если за это окно она не отправляла конверсии, а пропускала их; это ровно тот случай, для которого ниже есть блок «Пропущено».

Каждая карточка считает доставки в двух окнах, «24 ч» и «7 дн», по пяти статусам:

  • Отправлено - платформа или трекер приняли конверсию. Готово.
  • В очереди - доставка ждёт, воркер подхватит её за секунды.
  • Сбои - строки, у которых попытка завершилась ошибкой. У CAPI до 5 попыток с экспоненциальной задержкой (паузы 5с, 10с, 20с и 40с - около полутора минут на всю цепочку); у постбэка до 3 попыток, и он укладывается в секунды. Часто строка сама доезжает до «Отправлено» ещё в этом окне. Когда падает последняя попытка, строка автоматически становится «Мёртвая» - без cron-джобы и без ручных действий.
  • Мёртвые - все автоматические попытки исчерпаны. Дальше без вас ничего не произойдёт.
  • Подавлено - доставку удержала дедупликация по пользователю: у кампании (для CAPI) или у правила постбэка включён режим, при котором на одного человека уходит одна конверсия. Это честный терминальный статус, а не сбой: такие строки не ретраятся, не становятся мёртвыми и в таблицу проблемных доставок не попадают.

Бейдж работает как светофор: Без проблем, когда проблем нет, Есть сбои (жёлтый), если что-то упало, Есть мёртвые (красный), если хотя бы одна доставка умерла. На каждой карточке также показан текст последней ошибки с таймстампом - обычно этого достаточно, чтобы опознать протухший токен, не открывая логи.

У карточки любой CAPI-площадки есть ещё один блок - Пропущено (не отправлено). Он появляется, как только за окно набрался хотя бы один пропуск, и показывает счётчики «Сегодня» и «7 дн» с разбивкой по причине: «Площадка не подключена», «Нет CAPI-аккаунта для пикселя», строка про click ID, «Клик устарел» и «Событие не сопоставлено». Строку про click ID подписывает площадка той карточки, на которой она стоит, потому что идентификатор у каждой площадки свой: «Нет Google click ID (gclid)» у Google, «Нет TikTok click ID (ttclid)» у TikTok и нейтральное «Нет click ID» на карточке площадки, которая эту причину не пишет вовсе. Сообщают её ровно два адаптера - Google пропускает клик без gclid/gbraid/wbraid, TikTok - клик без ttclid, - а «Клик устарел» принадлежит одному Google (клик старше 89 дней, сутки запаса под 90-дневным окном загрузки), поэтому на карточке Meta обе строки всегда нули. Третья, «Событие не сопоставлено», общая для площадок: её пишет диспетчер, когда тип события не входит в маппинг площадки и имя события не задано вручную, так что на карточке Meta эта строка вполне может быть ненулевой. Самая первая строка, «Площадка не подключена», отвечает на вопрос раньше всех остальных: у кампании нет ключа этой площадки в интеграциях вовсе, то есть настройку не начинали. Так выглядит запуск трафика до привязки пикселя - клики идут, событий в площадку не уходит ни одного, и до появления этого счётчика такие события не оставляли вообще никакого следа: ни строки доставки, ни ошибки, ни записи в журнале. Отличайте её от следующей строки: там настройку начали и не закончили, и чинится она сверкой идентификаторов, а не привязкой пикселя. Строка «Нет CAPI-аккаунта для пикселя» стоит второй не случайно: остальные причины отсекают часть трафика, а эта означает, что у организации нет CAPI-аккаунта с тем pixel ID, который записан в интеграции кампании, - до площадки не доходит ни одна конверсия этой кампании. Чаще всего пиксель поменяли в одном месте и не поменяли в другом. Ненулевое значение здесь - повод сверить pixel ID кампании с тем, что стоит в CAPI-аккаунте, прежде чем разбираться с чем-либо ещё. Пропуск - это осознанный отказ от отправки, а не сбой: он вообще не создаёт строку доставки и никогда не попадает ни в счётчики сбоев и мёртвых, ни в таблицу ниже. Это и есть прямой ответ на вопрос, почему на смешанной кампании Meta+Google по Google конверсий заметно меньше, чем по Meta - сначала загляните в этот блок, прежде чем считать что-то сломанным.

Карточки доставки конверсий по CAPI-площадкам и правилам постбэковКарточки доставки конверсий по CAPI-площадкам и правилам постбэков

Таблица проблемных доставок

Под карточками - таблица с пагинацией, в ней только сбойные и мёртвые строки, две вкладки: CAPI и Постбэки. На вкладке CAPI - платформа, Event ID, статус, число попыток, ошибка и время создания. На вкладке «Постбэки» добавляются HTTP-метод и код статуса, который вернул endpoint вашего трекера. 500 от трекера и таймаут сети дебажатся совсем по-разному.

Переотправка: что она делает на самом деле

  1. Сначала устраните причину: обновите access token Meta, верните доступ сервисному аккаунту Google, включите правило постбэка.
  2. Нажмите «Переотправить» на строке. Кнопка сменится на В очереди: новая попытка доставки идёт через обычную очередь с полной цепочкой ретраев и тем же payload.
  3. Доставка асинхронная: обновите страницу через минуту - если переотправка сработала, строка станет «Отправлено» и уйдёт из списка проблемных.

Переотправка честно отказывает, а не делает вид, что сработала. Переотправить можно только сбойные и мёртвые строки. Если пиксель убрали из кампании или удалили CAPI-аккаунт, вы получите «Платформа больше не настроена на кампании»: поставить строку в очередь всё равно означало бы получить ещё одну мёртвую строку. «Событие не тарифицировано» значит, что событие заблокировал биллинг - сначала пополните баланс. Переотправка постбэка отказывает точно так же, если правило удалено или отключено: ручной повтор не может тихо обойти правило, которое вы сами выключили.

Защита от задвоения: переотправка постбэка использует тот же самый fire ID, что и оригинал - если первая попытка реально дошла до трекера, повтор гасится ещё до HTTP-запроса. У CAPI своя защита - дедупликация по event ID на стороне площадки: у Meta окно дедупликации около 48 часов, так что переотправка сильно более старых строк может задвоить конверсии в Ads Manager.

Когда волноваться, а когда нет

  • Волноваться стоит, когда «Мёртвые» больше нуля или повторяется одна и та же последняя ошибка: протухший access token, отозванный доступ сервисного аккаунта, неверный dataset или ID действия-конверсии.
  • Не волноваться стоит, если на смешанном трафике Google показывает меньше конверсий, чем Meta. У конверсии, пришедшей с Meta-объявления, нет gclid, поэтому Google осознанно её пропускает, а не роняет с ошибкой - точную причину и счётчик смотрите в блоке «Пропущено» на карточке Google. Ещё Google пропускает клики старше 89 дней - сутки запаса под его 90-дневным окном загрузки.

Частые грабли

  • Переотправка без устранения причины просто плодит новые мёртвые строки: кнопка повторяет отправку, а не чинит конфигурацию.
  • Строки Meta старше примерно 48 часов рискованно переотправлять: дедупликация площадки их уже не прикрывает.
  • Приостановленный воркспейс блокирует события на уровне биллинга, поэтому их доставки отказывают как «не тарифицировано». Сначала проверьте баланс, а потом уже грешите на интеграцию.
  • Карточка Google с нулём доставок на трафике, где преобладает Meta - это норма, а не поломка. Причину объясняет блок «Пропущено» на этой карточке.
  • У TikTok карточки не будет вообще. Серверная доставка для него ещё не запущена, так что пустое место там - не баг конфигурации.