Architecture & Cache-Safe Deduplication
The Problem with Traditional Server-Side Tracking
On a typical WordPress site using full-page caching:
- Static HTML Caching: The server renders the HTML once and stores it on disk or in memory (WP Rocket, LiteSpeed, Cloudflare).
- ID Collision: If a plugin generates the
event_idin PHP during page generation, that single ID is frozen into the cached HTML. Every subsequent visitor receives the exact sameevent_id. - Lost Conversions: When two different visitors submit a form on the cached page, Meta sees the duplicate
event_idand discards the second real conversion as a duplicate.
[ Visitor A ] ──▶ Loads cached page (event_id: "xyz-123") ──▶ Submits Form ──▶ Meta records Lead[ Visitor B ] ──▶ Loads cached page (event_id: "xyz-123") ──▶ Submits Form ──▶ Meta DISCARDS (Duplicate) ❌SignalRelay Solution: Client-Generated event_id
SignalRelay decouples ID generation from server page rendering:
[ Visitor A ] ──▶ JS generates unique event_id "sr_a98f..." ──▶ Server dispatches CAPI with "sr_a98f..." ──▶ Meta Accepts ✅[ Visitor B ] ──▶ JS generates unique event_id "sr_b44c..." ──▶ Server dispatches CAPI with "sr_b44c..." ──▶ Meta Accepts ✅- Client-Side Generation: The lightweight
tracking.jsscript generates a unique cryptographic UUID v4 for each event at the exact instant an action occurs. - Dual-Channel Dispatch: The same
event_idis passed simultaneously to the browser pixel (fbq('track', 'Lead', {...}, {eventID: id})) and to the local SignalRelay REST endpoint (/wp-json/signalrelay/v1/event). - Server-Side Delivery: Your WordPress server receives the payload, verifies user consent, hashes customer data with SHA-256, and dispatches the conversion to the official API.
- Accurate Deduplication: Meta, TikTok, and Pinterest merge both signals using the matching
event_id, maximizing your Event Match Quality (EMQ) without double counting.