Modo híbrido
Despacho server-side más el browser pixel de la plataforma, ambos disparando el mismo evento con el mismo event_id estable. La plataforma deduplica, tú no duplicas el conteo, y la plataforma puede ver sus cookies first-party para mejor atribución.
Qué hace
Para 9 de los 10 canales soportados puedes activar un toggle por canal que carga el browser pixel de la propia plataforma (fbq para Meta, ttq para TikTok, pintrk para Pinterest y demás) encima del despacho server-side de Beaconry. Navegador y servidor envían el mismo evento con el mismo event_id, la lógica de dedup propia de la plataforma los une en una sola conversión. Mantienes la resistencia a adblocker del server-side como suelo, y ganas las cookies first-party (fbp, _ttp, li_fat_id) que el browser pixel deja, lo que sube el match-rate un par de puntos.
Trade-off: envías unos pocos KB de JavaScript de vendor a cada visitante con consentimiento. Los adblockers seguirán bloqueando el pixel para la fracción de usuarios que los corren, así que el lift solo aplica sobre la fracción no bloqueada. Por defecto OFF en cada canal.
Cómo activar
wp-admin, Beaconry, pestaña Tracking. Cada canal con soporte híbrido muestra un toggle "Browser pixel" justo debajo de su bloque de credenciales. Guarda los ajustes, la siguiente carga de página en el frontend ya carga el pixel.
Cómo funciona (bajo el capó)
- Init config inline en
BCNR_Tracking. Cuando un toggle híbrido está activo, el pixel ID de ese canal se pasa en la llamadaNLData.init({...})que arrancanl-data.jsen el navegador. Las claves sonmetaPixelId,tiktokPixelId,linkedinPartnerId,microsoftUetTagId,pinterestTagId,redditPixelId,snapchatPixelId,xAdsPixelIdygoogleAdsConvId. - El bundle del navegador carga el vendor pixel.
nl-data.jscontiene un loader pequeño por canal (cada uno una docena de líneas del snippet oficial de la plataforma). Los loaders solo corren cuando el ID correspondiente está presente en el init config y se ha dado el consentimiento de analytics. Sin inyección dinámica descripta menos que ambas condiciones pasen. - Cada evento lleva un
event_idcompartido. El forwarder genera un UUID4 por cada evento originado en navegador, o un determinísticobcnr_purchase_<order_id>para compras WooCommerce (para que un refresco de la página de gracias nunca cuente dos veces). El bundle del navegador lee ese mismo ID desde el payload del evento y lo entrega al vendor pixel como la dedup key documentada de la plataforma. - La plataforma deduplica server-side. Cada plataforma de ads soporta dedup cross-source, pero el nombre de la clave y la posición del argumento difieren. Beaconry conoce las particularidades por vendor y usa el campo correcto cada vez, ver la matriz abajo.
Matriz por canal
Cada plataforma tiene su propia dedup key y su propia posición de argumento. Beaconry se ocupa de todas, la tabla está aquí para que puedas verificar el wire format en DevTools al depurar.
| Canal | Dedup key del navegador | Notas |
|---|---|---|
| Meta | fbq('track', name, data, { eventID }) | 4º argumento, clave es eventID (con ID en mayúsculas). |
| TikTok | ttq.track(name, data, { event_id }) | 3er argumento, clave es event_id (snake_case, no eventID). |
pintrk('track', name, { event_id }) | El 2º argumento lleva la dedup key, no un objeto de opciones aparte. | |
rdt('track', name, { conversionId }) | Reddit llama a la dedup key conversionId, no event_id. | |
| Snapchat | snaptr('track', name, { event_id }) | Ventana de dedup de 48 horas sobre (event_id, event_name). |
| Microsoft UET | uetq.push('event', '', { event_id }) | Dedup por evento añadido por Microsoft en 2024, exige el string de acción vacío. |
lintrk('track', { event_id }) | Dedup por evento añadido por LinkedIn en 2024. | |
| X Ads | twq('event', name, { conversion_id }) | X llama a la dedup key conversion_id, ventana de 48 horas. |
| Google Ads | Audiences-only, gtag con AW-XXX | Sin dedup por evento, ver caso especial abajo. |
| GA4 | No soportado | GA4 es server-only con dedup por transaction_id en compra, ver caso especial abajo. |
Dos casos especiales
Google Ads, Audiences-only
El toggle híbrido de Google Ads no dispara conversiones por evento desde el navegador. Carga gtag.js solo con el conversion-id AW-XXXXXXXXX y send_page_view: false, lo que permite a Google Ads construir audiencias de remarketing a partir de tus visitantes pero deja el tracking de conversión real entero al broker server-side de Beaconry. No hay dedup por event_id porque no hay evento de conversión en navegador con el que deduplicar. El trade-off es intencional: los clientes pidieron construcción de audiencias sin pagar el coste de auditoría de un camino de conversión en navegador.
GA4, server-only
GA4 no tiene toggle híbrido. El Measurement Protocol es server-only dentro de Beaconry, y el dedup contra cualquier gtag.js paralelo en la misma página ocurre por transaction_id para eventos de compra, no por event_id. Si ya corres un GA4 web stream desde otro plugin, pon el mismo transaction_id allí que en tus pedidos WooCommerce y no duplicarás compras.
Constantes para power-users
Ninguna. Los toggles híbridos son únicamente checkboxes por canal en la pestaña Tracking, no existe ni hace falta un override en wp-config.php.
Troubleshooting
- "Veo conversiones duplicadas en la plataforma": abre DevTools, pestaña Network, encuentra un evento. Verifica que el mismo
event_id(oconversion_id/conversionId, ver matriz) aparece en la petición del browser pixel y en el payload server-side de Beaconry. Si difieren, la dedup key está rota y vas a duplicar, abre un ticket de soporte. Si coinciden y la plataforma sigue duplicando, revisa la ventana de dedup propia de la plataforma (Snap y X Ads necesitan ambos eventos dentro de 48 horas). - "DevTools muestra el pixel cargando pero ningún evento": el visitante bloqueó el pixel con un adblocker. El evento server-side pasó igualmente, lo puedes verificar en el events manager de la plataforma. El modo híbrido no ayuda a los visitantes con adblocker a aportar más datos de match, pero tampoco perjudica.
- "Quiero desactivar los browser pixels en una página concreta": actualmente no se expone como ajuste. La solución más sencilla es añadir la página a la lista de excluded-pages en la pestaña Dashboard, lo que desactiva Beaconry entero en esa URL.