Hybrid-Modus
Server-Side-Dispatch plus der Browser-Pixel der Plattform. Beide feuern dasselbe Event mit derselben stabilen event_id. Die Plattform dedupliziert, du zählst nicht doppelt, und die Plattform sieht ihre First-Party-Cookies für besseres Matching.
Was es macht
Für 9 von 10 unterstützten Kanälen kannst du einen Per-Kanal-Toggle umlegen, der zusätzlich zum Server-Side-Dispatch den Browser-Pixel der Plattform lädt (fbq für Meta, ttq für TikTok, pintrk für Pinterest und so weiter). Browser und Server senden dasselbe Event mit derselben event_id, die Dedup-Logik der Plattform fasst sie zu einer Conversion zusammen. Die Adblocker-Resistenz von Server-Side bleibt als Untergrenze, dazu gewinnst du die First-Party-Cookies (fbp, _ttp, li_fat_id), die der Browser-Pixel setzt, was die Match-Rate um ein paar Prozentpunkte hebt.
Trade-off: ein paar KB Vendor-JavaScript pro zustimmendem Besucher. Adblocker blocken den Pixel weiterhin für den Anteil der Nutzer mit aktivem Blocker, der Lift gilt also nur auf dem nicht geblockten Anteil. Standardmäßig OFF für jeden Kanal.
Wie aktivieren
wp-admin, Beaconry, Tab Tracking. Jeder Kanal mit Hybrid-Support zeigt direkt unter seinem Credentials-Block einen Toggle "Browser-Pixel". Speichern, der nächste Page-Load im Frontend lädt den Pixel.
Wie es funktioniert (unter der Haube)
- Inline-Init-Config in
BCNR_Tracking. Bei aktivem Hybrid-Toggle wird die Pixel-ID des Kanals in denNLData.init({...})-Aufruf eingespielt, dernl-data.jsim Browser bootet. Die Keys heißenmetaPixelId,tiktokPixelId,linkedinPartnerId,microsoftUetTagId,pinterestTagId,redditPixelId,snapchatPixelId,xAdsPixelIdundgoogleAdsConvId. - Das Browser-Bundle lädt den Vendor-Pixel.
nl-data.jsenthält pro Kanal einen kleinen Loader (jeweils ein gutes Dutzend Zeilen offizielles Plattform-Snippet). Loader laufen nur, wenn die passende ID im Init-Config steht und die Analytics-Einwilligung gegeben wurde. Kein dynamischesscript-Inject, solange nicht beide Bedingungen erfüllt sind. - Jedes Event trägt eine geteilte
event_id. Der Forwarder generiert eine UUID4 pro Browser-Event, oder eine deterministischebcnr_purchase_<order_id>für WooCommerce-Purchases (sodass ein Refresh der Danke-Seite nie doppelt zählt). Das Browser-Bundle liest dieselbe ID aus dem Event-Payload und übergibt sie dem Vendor-Pixel als dokumentierten Dedup-Key. - Die Plattform dedupliziert server-side. Jede Ad-Plattform unterstützt Cross-Source-Dedup, aber Key-Name und Position des Arguments unterscheiden sich. Beaconry kennt die Per-Vendor-Eigenheiten und nutzt jedes Mal das richtige Feld, siehe Matrix unten.
Pro-Kanal-Matrix
Jede Plattform hat ihren eigenen Dedup-Key und ihre eigene Argument-Position. Beaconry kümmert sich um alle, die Tabelle steht hier zur Verifikation des Wire-Formats in DevTools beim Debugging.
| Kanal | Browser-Dedup-Key | Anmerkung |
|---|---|---|
| Meta | fbq('track', name, data, { eventID }) | 4. Argument, Key ist eventID (großes ID). |
| TikTok | ttq.track(name, data, { event_id }) | 3. Argument, Key ist event_id (snake_case, nicht eventID). |
pintrk('track', name, { event_id }) | 2. Argument trägt den Dedup-Key, kein separates Options-Objekt. | |
rdt('track', name, { conversionId }) | Reddit nennt den Dedup-Key conversionId, nicht event_id. | |
| Snapchat | snaptr('track', name, { event_id }) | Dedup-Fenster 48 Stunden auf (event_id, event_name). |
| Microsoft UET | uetq.push('event', '', { event_id }) | Per-Event-Dedup von Microsoft 2024 nachgereicht, leerer Action-String ist Pflicht. |
lintrk('track', { event_id }) | Per-Event-Dedup von LinkedIn 2024 nachgereicht. | |
| X Ads | twq('event', name, { conversion_id }) | X nennt den Dedup-Key conversion_id, 48-Stunden-Fenster. |
| Google Ads | Audiences-only, gtag mit AW-XXX | Kein Per-Event-Dedup, siehe Spezialfall unten. |
| GA4 | Nicht unterstützt | GA4 ist server-only mit transaction_id-Dedup auf Purchase, siehe Spezialfall unten. |
Zwei Spezialfälle
Google Ads, Audiences-only
Der Google-Ads-Hybrid-Toggle feuert keine Per-Event-Browser-Conversions. Er lädt gtag.js nur mit der AW-XXXXXXXXX-Conversion-ID und send_page_view: false, was Google Ads erlaubt, Remarketing-Audiences aus deinen Besuchern zu bauen, das eigentliche Conversion-Tracking aber komplett bei Beaconrys Server-Side-Broker lässt. Es gibt keine event_id-Dedup, weil es kein Browser-Conversion-Event zum Deduplizieren gibt. Der Trade-off ist absichtlich: Kunden wollten Audience-Building ohne den Audit-Aufwand eines Browser-Conversion-Pfads.
GA4, server-only
GA4 hat keinen Hybrid-Toggle. Das Measurement Protocol ist innerhalb von Beaconry server-only, und Dedup gegen ein parallel laufendes gtag.js-Setup auf derselben Seite passiert auf transaction_id für Purchase-Events, nicht auf event_id. Falls du bereits einen GA4-Web-Stream aus einem anderen Plugin betreibst, setze dort dieselbe transaction_id wie in deinen WooCommerce-Bestellungen, dann zählst du Purchases nicht doppelt.
Konstanten für Power-User
Keine. Hybrid-Toggles sind ausschließlich Per-Kanal-Checkboxen im Tab Tracking, ein wp-config.php-Override existiert nicht und ist nicht nötig.
Troubleshooting
- "Ich sehe doppelte Conversions in der Plattform": DevTools öffnen, Network-Tab, ein Event suchen. Verifiziere, dass dieselbe
event_id(oderconversion_id/conversionId, siehe Matrix) im Browser-Pixel-Request und im Beaconry-Server-Payload steht. Wenn sie sich unterscheiden, ist der Dedup-Key kaputt und du zählst doppelt, dann Support-Ticket. Wenn sie übereinstimmen und die Plattform trotzdem doppelt zählt, prüfe das Dedup-Fenster der Plattform (Snap und X Ads brauchen beide Events innerhalb von 48 Stunden). - "DevTools zeigt den Pixel laden, aber keine Events": der Besucher hat den Pixel mit einem Adblocker geblockt. Das Server-Event ging trotzdem durch, du kannst es im Events Manager der Plattform verifizieren. Der Hybrid-Modus hilft Adblocker-Besuchern nicht beim Match-Daten-Gewinn, schadet aber auch nicht.
- "Ich will Browser-Pixel auf einer bestimmten Seite ausschalten": aktuell nicht als Setting freigelegt. Workaround: die Seite in die Excluded-Pages-Liste auf dem Dashboard-Tab eintragen, das deaktiviert Beaconry komplett auf dieser URL.