TL;DR
Cross-domain tracking advice for Shopify is dominated by articles written for a problem that no longer exists. Checkout has lived on the storefront's domain for nearly a decade, so the classic "my sessions break at checkout.shopify.com" issue is history [1]. What remains are three configurations where domains genuinely change mid-journey: headless storefronts that hand off to Shopify-hosted checkout, brands running separate country domains, and traffic arriving from marketplaces. This article maps what actually breaks in each, what GA4's linker fixes, and what server-side tracking makes irrelevant.
Key Takeaways
- Shopify checkout has run on the shop's own domain since July 2017; standard stores have no cross-domain hop to repair [1].
- Shopify's app pixels do not fire on Hydrogen or headless storefront pages, only on Shopify-hosted surfaces like checkout. Shopify staff confirm this directly [2]; Hydrogen ships its own
Analyticscomponent for the storefront side [3]. - For headless stores, server-side purchase tracking through the order webhook works unchanged, because webhooks do not care which domain the buyer browsed.
- GA4's cross-domain linker (the
_glURL parameter) is configured in GA4 itself: Admin → Data streams → Configure tag settings → Configure your domains [4]. It is platform configuration, not something a tracking app implements. - Multi-domain international stores on one Shopify shop can use multi-pixel on the Plus plan to feed up to 5 destinations per channel, with the honest caveat that every pixel receives every event; there is no per-domain routing.
- Marketplace-to-store funnels lose attribution at the marketplace boundary, not on your site; capture click IDs on the landing and accept that the marketplace click is the source.
Do standard Shopify stores need cross-domain tracking?
No. This is the most persistent myth in Shopify analytics, and it expired in July 2017, when Shopify moved checkout from checkout.shopify.com onto the shop domain the customer is browsing [1]. A buyer on yourstore.com checks out on yourstore.com. Cookies persist, sessions continue, and GA4 sees one journey.
The myth survives because the symptom it explains, self-referrals and split sessions, still appears, just with different causes: payment-provider redirects, consent tools reloading the page, or untagged email links. Before you configure anything cross-domain, check whether you actually have a second domain in the journey. Most stores do not.
The quick test: open Reports → Acquisition → Traffic acquisition in GA4 and look for your own domain or your payment provider appearing as a session source. Your own domain as a referrer signals a session break, but on a standard store the fix is referral exclusions or tagging hygiene, not cross-domain linking. For how identity persists across visits on a single domain, see first-party cookies on Shopify.
What breaks on Hydrogen and headless storefronts?
The browser side, structurally. A Hydrogen storefront on store.example.com renders pages outside Shopify's pixel system, and app pixels registered through the Web Pixels API do not run there. This is not a vendor gap; Shopify staff state it plainly: Hydrogen's built-in analytics do not include events from app pixels [2]. Web pixels fire on the Shopify-hosted checkout your headless store hands off to, and on nothing before it.
In practice, a headless store running any Web Pixels-based tracking tool gets this split:
| Journey stage | Surface | App pixel fires? |
|---|---|---|
| Browsing, product pages, cart | Hydrogen / headless frontend | No [2] |
| Checkout steps | Shopify-hosted checkout | Yes |
| Purchase confirmation | Shopify checkout + order webhook | Yes, browser and server |
| Subscription renewals, drafts | No surface at all | Server-side only |
Two consequences follow. First, the pre-purchase funnel (view-item, add-to-cart) must be instrumented inside the headless app itself; Shopify's current recommendation is Hydrogen's Analytics component, where your own code subscribes to events and forwards them to third parties [3]. Second, the events that determine revenue accuracy, purchases, survive intact: the order webhook fires regardless of frontend, so server-side purchase events to GA4, Meta, TikTok, Google Ads, and Reddit arrive with full order data either way.
The cookie handoff is the subtle part. Click IDs landing on store.example.com live in that domain's cookies; the Shopify checkout on a different domain cannot read them unless the handoff URL carries them across. If your headless build forwards the GA4 linker parameter into the checkout URL, sessions stitch; if not, expect checkout sessions to start cold. That is build-level work in the headless app, which is exactly why Shopify's own analytics guidance for Hydrogen centers on instrumenting the frontend rather than relying on pixels [3].
How do multi-domain and multi-country stores split their tracking?
It depends on which of two architectures you run, and the decision criteria are clean.
One Shopify store, multiple domains (example.com, example.co.uk pointing at the same shop with localized experiences): tracking-wise this is one store. One set of pixels receives everything, and the separation you want is analytical: segment by domain, currency, or market inside GA4 rather than splitting pixels. If you need genuinely separate destinations, say a regional GA4 property per market or different Meta ad accounts, multi-pixel on the Plus plan supports up to 5 instances per channel, each with its own destination ID. The architectural honesty from multi-pixel tracking still applies: instances broadcast, every enabled pixel receives every event, and there is no URL-path or domain-based routing. Filter on the platform side.
Separate Shopify stores per country: each store is its own tracking universe with its own pixels and webhook. Cross-domain linking between them matters only if buyers actually cross from one store to the other mid-session, which for country-targeted stores is rarer than teams assume. Check your real cross-store traffic in GA4 before engineering for it. Larger international operations weighing this architecture should also read Shopify Plus tracking surfaces.
When you genuinely need GA4's cross-domain linker
The linker exists for one job: carrying GA4's client ID across a registrable-domain boundary inside one user journey, via the _gl URL parameter [4]. You need it when buyers move between domains you control mid-session: headless frontend to checkout on another domain, a separate landing-page domain into the store, or store-to-store hops you actually observe.
Configure it where Google built it:
- In GA4, go to Admin → Data streams and open your web stream.
- Click Configure tag settings → Configure your domains.
- Add each domain in the journey, then Save. GA4 begins decorating outbound links between listed domains with
_glautomatically [4]. - Verify by clicking from one domain to the other and checking the landing URL for
_gl=in the address bar, then confirm in Reports → Realtime that the session continued instead of restarting.
Note what this is: GA4 tag configuration. It is not something a Shopify tracking app implements for you, and a tool claiming otherwise deserves skepticism. App pixels run in Shopify's sandbox without DOM access, so they cannot decorate your storefront's links even in principle; the decoration happens in Google's tag on the pages themselves. WeltPixel Conversion Tracking does not modify domain-linking behavior, by design: the browser side reports events, GA4 handles session stitching, and the server side does not need either.
What works regardless of domain setup
Purchases. The orders/create webhook fires when Shopify records the order, identified by the shop, not by whichever domain the buyer browsed [5]. Server-side purchase events flow to all five channels with order data, captured click IDs, and deduplication intact whether the buyer came through a standard storefront, a Hydrogen frontend, three country domains, or a marketplace link.
That changes where cross-domain effort should go. Revenue accuracy is already covered by the server path; the remaining cross-domain work is about pre-purchase behavior and session attribution, which is real but secondary. Fix purchasing data first (server-side, domain-agnostic), then decide how much engineering the funnel analytics on a secondary domain are worth. For most multi-domain stores, GA4's linker plus segmented reporting answers it without custom build work.
FAQ
Does Shopify still use checkout.shopify.com?
No. Since July 2017, checkout occurs on the shop's own domain, either the myshopify.com address or your custom domain [1]. If you read advice about fixing the checkout.shopify.com cross-domain hop, it predates that change and no longer applies.
Do Shopify app pixels work on Hydrogen storefronts?
No. App pixels and the Web Pixel system do not run on Hydrogen pages; they fire on Shopify-hosted surfaces like checkout [2]. Hydrogen provides an Analytics component for instrumenting the storefront, and you forward events to third parties from there [3].
Do I need cross-domain tracking for multiple country domains?
Only if buyers move between the domains within a session. If each market's buyers stay on their own domain, you need market segmentation in reporting, not cross-domain linking. Check actual cross-domain journeys in GA4 before configuring anything.
Can a tracking app fix cross-domain sessions for me?
No, and be wary of any that claims to. GA4 session stitching across domains is configured in GA4's admin (the _gl linker) [4], and link decoration happens in page-level tags, which Shopify's sandboxed app pixels cannot touch. What an app can guarantee across any domain setup is the server-side purchase stream.
Track purchases on every domain you run
WeltPixel Conversion Tracking sends purchase events server-side from the order webhook, so revenue reaches GA4, Meta, TikTok, Google Ads, and Reddit regardless of which domain, frontend, or marketplace the buyer came through. Multi-domain operations on Plus can point up to 5 pixels per channel at separate GA4 properties or ad accounts. Browser-side session stitching stays where it belongs, in GA4's linker settings, and your conversion data stops depending on it.
Install WeltPixel Conversion Tracking on the Shopify App Store
Sources
- Shopify Changelog: Checkouts occur at the shop domain instead of checkout.shopify.com (July 2017)
- Shopify Hydrogen discussion #2556: app pixels do not fire on Hydrogen storefronts (Shopify staff)
- Shopify Hydrogen: Analytics setup and tracking
- Google Analytics Help: Set up cross-domain measurement
- Shopify Web Pixels API Reference