- Install
- One script in the site header. No plugin to install
- Detection
- Recognises WooCommerce from its page markers
- Purchase capture
- On the order confirmation page, when your pixel reports the purchase or the page heading reads like "Order received"
- Order number
- The number in the /checkout/order-received/ URL
- Order value from
- Your data layer purchase event, order structured data, or the confirmation page totals
- Deduplication
- By order number, so a reloaded confirmation page is not counted twice
- Coexists with
- Your existing Meta Pixel, Google tag and TikTok pixel
- Custom events
- sb_track() for anything the script does not detect
- Not included
- Refund, cancellation and fulfilment events, which need order data from the store
How it works
The script loads on every page
Served from your own subdomain if you set up a custom domain, otherwise from SignalBridge's default domain. It records the visitor's landing page, campaign parameters and ad click IDs.
It recognises the store
WooCommerce is identified from its own page markers. From then on the script looks for product pages, add to cart actions, the checkout page and the order confirmation page.
It follows your existing pixels
If your Meta Pixel or TikTok pixel fires a purchase or add to cart, SignalBridge mirrors that event with the same event ID, so the platform counts the browser and server copies once. When the page has no Meta Pixel, a purchase from your Google tag is mirrored instead, with its transaction ID as the order number.
It captures the purchase
On the confirmation page it takes the order number from the URL. If your Meta, Google or TikTok pixel reports the purchase, SignalBridge uses that call, including its value. Otherwise it recognises the page from its heading and reads the total from your data layer, order structured data or the order summary. One Purchase is sent.
The server delivers it
Consent is applied, then each connected platform receives the event through its own queue with retries. The purchase is matched back to the ad click captured on arrival.
What the script captures on a WooCommerce store
Events are inferred from the page, so the table also shows where each one comes from.
| Event | Detected from | Notes |
|---|---|---|
| PageView | Every page load | Includes the page type, such as product, cart or checkout. |
| ViewContent | Product page markup | Uses product structured data, page metadata and the add to cart button on single product pages. |
| AddToCart | Your pixel, or add to cart button clicks | The click fallback runs only when no ad pixel on the page reports the event. |
| InitiateCheckout | A checkout URL | Reported when the visitor reaches the checkout page. |
| Purchase | The order confirmation page | Recognised when a pixel reports it there or the page heading reads like "Order received". The order number comes from the URL, so a repeat of the same order can be merged. |
| Lead and other events | Forms and sb_track() | Contact, sign-up and booking forms are detected, and you can send your own events. |
Where the order value is read from
The script tries these sources in order and stops at the first that gives a value.
| Source | Example |
|---|---|
| Data layer purchase event | A GA4 purchase event with ecommerce value, currency and transaction ID, pushed by a tag manager or a plugin. |
| Order structured data | JSON-LD on the confirmation page describing the order. |
| Order summary on the page | The order total element on the standard order received page. |
| Text on the page | A line such as Order total followed by an amount. |
| Meta tag | An order total meta tag, if your theme provides one. |
Requirements
- A WooCommerce store on WordPress and permission to add scripts to the site header.
- A header scripts plugin such as WPCode or Insert Headers and Footers, or a theme that has a header scripts field.
- A SignalBridge pixel and the ad platforms you want to connect.
- Optionally, a subdomain for first-party tracking, with access to your DNS.
Set up WooCommerce
Copy the snippet
Open your pixel in SignalBridge, choose Install, select the WordPress tab and copy the snippet. It uses your custom domain automatically when one is active.
Add it to the header
With WPCode or Insert Headers and Footers, paste the snippet into the header section and save. Make sure it loads on every page, including checkout and the order received page.
Exclude it from script delay and caching
If a performance plugin delays, combines or defers JavaScript, add the SignalBridge script to its exclusions, and clear the cache. A script that loads late can miss the confirmation page.
Connect your ad platforms
In the pixel's settings connect Meta, Google Ads, TikTok or any other destination you use.
Place a test order
Complete a real or low-value order with a test payment method, and watch the event stream for one Purchase with the order number, value and currency.
Verify it works
Check the Purchase event
It should appear once, show the WooCommerce order number as its order ID, and carry the order total and currency.
Reload the confirmation page
Refresh the order received page. No second Purchase should be recorded for the same order.
Check the platform
In Meta Events Manager and your other platforms, look for the server event and confirm it matches the browser event where one exists.
Troubleshooting
No Purchase appears after a test order
Confirm the script loads on the order received page by viewing the page source or the browser network tab. A caching or script-delay plugin is the most common cause, so exclude the script from it.
The Purchase has no value or the wrong value
Some themes and the block-based order confirmation expose the total in markup the script does not read. Push a purchase event to the data layer, or send the order yourself with sb_track.
Large orders show a value that is far too small
When the total is read from page text, an amount with a thousands separator, such as 1,234.50, can be misread. Prefer a purchase value from your Meta Pixel, a data layer purchase event or order structured data, and check a test order above 1,000 if your orders reach that size.
The same order is counted twice
Check that two copies of the script are not installed, for example one in the theme and one in a plugin. The order number in the URL lets SignalBridge merge repeats of the same order.
Customers pay on another site and the order never appears
If the buyer does not return to the order received page after paying, the script cannot see the order. Make sure your payment gateway redirects back to the store.
Add to cart events are missing
The click fallback matches common button patterns. If your theme uses unusual buttons or a drawer, send the event with sb_track from your own code.
A platform shows duplicate purchases
Platforms deduplicate on event name and event ID. SignalBridge reuses the ID of the browser event when it sees your pixel fire it, so check that the pixel on the page is the one connected in SignalBridge, and that no second plugin sends purchases with different IDs.
What to know before you rely on it
Where this integration stops, so the numbers you see are read correctly.
- There is no WooCommerce order feed. Refunds, cancellations, status changes and orders created outside the browser, such as manual orders, are not seen.
- A purchase is only captured when the buyer reaches the order confirmation page in a browser that runs the script.
- Order details depend on what the confirmation page exposes. Check the value and currency on your own theme and checkout.
- Plugins that delay or block JavaScript can prevent or postpone capture.
- Visitors who have not agreed to marketing tracking are not sent to ad platforms where consent applies.
Questions about this integration
Is there a SignalBridge WordPress or WooCommerce plugin?
No. SignalBridge is a script you add to the site header, which you can do with a header scripts plugin. The script itself is not a plugin and nothing is added to the WooCommerce admin.
Will it work with my Facebook for WooCommerce or Google Site Kit setup?
Yes. SignalBridge reads the events those tools fire in the browser and mirrors them to the server, so you keep your existing setup and add reliable server delivery. It reuses the event ID of a Meta Pixel or TikTok Pixel call, so those platforms count the browser and server copies once. When the page has no Meta Pixel, it mirrors the Google tag's purchase with its transaction ID as the order number. If the page runs a TikTok Pixel as well as a Meta Pixel, each pixel's events go only to its own platform.
Does it work with block-based checkout?
The script runs on the checkout and order received pages either way. What differs is how the order total is exposed on the confirmation page, so check a test order and use a data layer event or sb_track if the value is missing.
How does it avoid duplicate purchases?
The order number from the confirmation URL identifies the order. Repeats of the same order, such as a page reload, are recognised and not counted again.
How does my cookie banner connect to SignalBridge?
The script does not read a cookie banner on its own, apart from Silktide's. Your banner has to tell it: call sb_consent(true) when a visitor accepts marketing cookies and sb_consent(false) when they decline. Set window.SB_REQUIRE_MARKETING_CONSENT = true before the SignalBridge snippet if visitors who have not chosen yet must not be tracked. Without that setting, a visitor with no recorded choice is treated as allowed. Decline once on a test device and confirm that no ad platform event appears.
Can I track refunds?
Not automatically. Without an order feed from WooCommerce, SignalBridge only sees what happens in the browser. You can send a custom event if you need one.
Do I need a custom domain?
No, but serving the script from your own subdomain keeps requests first-party, which helps against blockers that match third-party tracking domains.
Which events can I send myself?
Any. Call sb_track with an event name and properties such as value, currency, order_id and user_data, from your own code or a tag manager.
Does it slow my store?
The script loads asynchronously. Keep it excluded from delay plugins so it runs when the page loads, and test your pages as usual.