В момент, когда Pixel и CAPI работают вместе, каждая конверсия срабатывает дважды — один раз из браузера, один раз с сервера. Без дедупликации это задвоенные конверсии и сигнал для оптимизации, который вдвое более шумный, чем должен быть.
Основной механизм дедупликации Meta — сопоставление по паре event_id + event_name. Генерируйте один event_id на реальную конверсию и передавайте его одинаковым и в событии Pixel, и в парном событии CAPI, с одинаковым event_name с обеих сторон (Purchase и там, и там — не Purchase с одной стороны и purchase_complete с другой). Meta видит совпадающую пару, оставляет одну копию, отбрасывает дубль.
Есть более слабый резервный механизм — сопоставление по куки _fbp плюс event_name, когда event_id отсутствует — но он менее точен и может изредка пропустить реальный дубль или склеить два разных события, пришедших близко по времени.
Частые причины, почему дедупликация ломается на практике:
- Несовпадающий или отсутствующий event_id между вызовом Pixel и вызовом сервера — самая частая причина.
- Разные значения event_name с двух сторон, даже для одного и того же логического события.
- Генерация ID только на клиенте, когда браузер заблокирован — сервер так и не узнаёт ID, который должен переиспользовать.
- Задержка серверной пакетной отправки, из-за которой событие выходит за пределы окна сопоставления Meta.
Проверить, что дедупликация реально работает, просто: в Events Manager сверить, что число конверсий примерно соответствует реальному числу заказов/лидов, а не удваивает его, и что события отображаются как дедуплицированные, а не как две отдельные записи.