WooCommerce sees the same customer on two devices as two different people. Over 65% of purchase journeys now span more than one device before checkout (WooCommerce Reporting Guide, 2025)—but WooCommerce’s session-based tracking has no way to connect them. The result is inflated new customer counts, deflated ROAS figures, and ad spend optimising toward the wrong signals.
This isn’t a configuration problem. It’s an architectural one. Here’s why it happens and what actually fixes it.
Why Half Your Customer Journey Is Invisible
A customer clicks your Facebook ad on their phone during their lunch break on Monday. They don’t buy—they browse, they leave. On Thursday, they Google your brand on their laptop, click an organic result, and complete the purchase.
WooCommerce reports that as: one anonymous mobile session (no conversion), one new organic customer (conversion credited to Google). Facebook invested in the awareness that drove the sale. WooCommerce has no record of it.
That’s not a reporting quirk. That’s your media buying decisions being made on structurally incomplete data.
The Structural Problem: Sessions, Not People
WooCommerce Analytics provides 5 order attribution reports—all of which only check the last touch of the individual session (WooCommerce Official Documentation, 2024). There’s no native concept of a customer identity that persists across devices or browsers.
Every anonymous visit generates a new session ID. When the same person switches devices, they generate a new session ID. WooCommerce has no mechanism to match those two sessions to a single human being unless that human logs into the same account on both devices—and most guests don’t.
Guest checkout, which the majority of WooCommerce orders use, is entirely session-based. No login, no cross-device link, no attribution continuity.
The knock-on effects compound quickly:
- Inflated new customer counts: The same returning customer on two devices registers as two new visitors
- Deflated repeat purchase rate: The second purchase looks unrelated to the first touchpoint
- Distorted channel performance: Channels that drive awareness (social, display) appear to under-convert; channels that capture intent (branded search) appear to over-perform
- CPAs that make no sense: Google Ads looks like a bargain; Facebook looks like it’s wasting money
You might be interested in: WooCommerce Attribution Is Just Last-Touch: Why Multi-Channel Marketing Can’t Be Measured Natively
Why GA4 Doesn’t Solve This Either
GA4’s data-driven attribution model can theoretically link cross-device journeys—but it requires minimum conversion thresholds that most small to mid-size WooCommerce stores never reach (Google Analytics Help, 2025). Below those thresholds, GA4 silently falls back to last-click attribution, which has the same device-blindness problem as WooCommerce native reporting.
75% of marketers now use multi-touch attribution models to measure performance (OWOX Research, 2025)—but that adoption hasn’t solved the underlying data problem. Multi-touch models only work if you have the data to model from. If your tracking can’t connect the mobile session to the desktop session, no attribution model can bridge the gap.
Translation: better attribution models don’t fix missing data. You need the data first.
What First-Party Persistent Identifiers Actually Change
The fix isn’t a different analytics model—it’s capturing a persistent identifier at the server level before session data fragments across devices.
Here’s how it works architecturally:
- When a customer first visits your store, a first-party identifier is set via a cookie on your domain (not a third-party domain)
- That cookie is set server-side, giving it a full lifespan—not the 7-day limit Safari’s ITP imposes on JavaScript-set cookies
- When the customer returns on a different device and logs in (even at checkout), the server matches their account to the existing identifier
- All prior anonymous sessions that share the same identifier can now be linked to the same person
This is how enterprise platforms like Salesforce Commerce Cloud and Shopify Plus handle identity resolution. The architecture has always existed—the implementation gap is what made it inaccessible to WooCommerce stores without a developer team.
You may be interested in: UTM Parameters Are Getting Stripped Before WooCommerce Ever Sees Them
The BigQuery Angle: Collect Now, Stitch Later
Even if you can’t implement identity resolution today, there’s a compounding advantage to capturing raw event data with persistent identifiers now: you can run the stitching analysis retroactively in BigQuery.
When your WooCommerce tracking pipeline stores events in BigQuery—including the persistent first-party identifier alongside each session event—you build a raw record that never depended on real-time identity matching. Six months from now, when a customer creates an account you can link to their earlier anonymous sessions, that historical data is already waiting.
Raw event data with persistent identifiers is the asset. BigQuery is where it pays back.
This is the “Data Trees” principle coined by Seresa: plant the data now, and harvest the insights later when your analytics infrastructure catches up to what you’ve already collected.
The practical implication: every week you run without raw event storage is a week of cross-device journey data you can’t recover. GA4 doesn’t expose raw session data. WooCommerce doesn’t store the event stream. BigQuery does—but only if you’re sending to it. The store that starts streaming events today has a six-month head start on the one that waits until the attribution problem feels urgent.
How to Capture Persistent Identifiers Without a Developer
Transmute Engine™ is a first-party Node.js server that runs on your subdomain (e.g., data.yourstore.com). The inPIPE WordPress plugin captures WooCommerce events and sends them via API to your Transmute Engine server, which assigns and tracks persistent first-party identifiers across sessions—then routes enriched events simultaneously to GA4, Facebook CAPI, Google Ads, and BigQuery. No GTM required, no developer dependency for ongoing maintenance.
Key Takeaways
- 65%+ of purchase journeys cross devices—WooCommerce sees each device as a separate anonymous customer
- WooCommerce’s 5 attribution reports are all last-touch, per session—there’s no native cross-device identity layer
- GA4 data-driven attribution requires conversion minimums most SMBs don’t reach, silently falling back to last-click
- Persistent first-party identifiers set server-side are the only architecture-level fix—and they survive Safari’s ITP restrictions
- Storing raw events in BigQuery now enables retroactive identity stitching later, even for sessions that were anonymous at the time
WooCommerce tracks anonymous sessions, not persistent customer identities. A returning customer who switches from mobile to desktop appears as two separate visitors—inflating new customer counts and understating repeat purchase rates.
GA4’s data-driven attribution model can link cross-device journeys, but it requires minimum conversion thresholds that most small to mid-size WooCommerce stores never reach. Below those thresholds, GA4 silently falls back to last-click—which has the same device-blindness problem as WooCommerce native analytics.
A persistent first-party identifier is a unique ID stored in a first-party cookie on your own domain that survives across browsing sessions and can link to the same customer when they log in on a different device. Unlike JavaScript-set cookies, server-set first-party cookies have full lifespans—not the 7-day limit Safari’s ITP imposes.
Server-side tracking alone doesn’t fix it—persistent customer identifiers do. The two work together: server-side tracking captures events and identifiers without browser restrictions, while the persistent ID links those events to the same customer across devices.
See how Transmute Engine captures persistent first-party identifiers for cross-device attribution at seresa.io.
