UTM Parameters and Shopify Order Attribution That Survives Checkout
How to set up UTM tracking that actually persists through Shopify checkout and shows up on the order, not just the landing page.
Written by Mantas Jurgutis — Founder, Adsify — builds the Google & Meta automation merchants use daily
Editorially reviewed by Adsify Editorial on June 10, 2026 — Reviewed against Shopify, Google Ads and Meta official documentation.
What UTMs actually capture
UTM parameters (utm_source, utm_medium, utm_campaign, utm_content, utm_term) are just URL query string values with no special browser behavior of their own; Shopify happens to recognize them and, when present on a landing page URL, records the referring information into order attributes visible on the order detail page under 'Conversion summary' or similar depending on plan and app support. Without a UTM or without Shopify's own referrer detection, order attribution falls back to whatever the browser's referrer header reports, which is often blank for app-based traffic like Instagram or Facebook's in-app browser.
How Shopify records this on the order
Shopify's checkout attributes a session's first-touch (and in some cases last-touch) landing page and referrer to the resulting order, viewable in the Shopify admin order page and in Analytics > Reports under acquisition-related reports. This works based on Shopify's own session and cookie mechanism tied to the storefront, separate from any ad platform's own tracking, which is why it's a useful independent cross-check discussed in attribution-discrepancy troubleshooting.
Where UTM tracking commonly breaks
If a customer clicks an ad with UTM parameters, browses for a few minutes, then closes the tab and returns later by typing the domain directly or via a bookmark, Shopify's session-based attribution will show that later direct session, not the original UTM-tagged one, unless the store's session/cookie window covers the full gap. Also, some third-party checkout or subscription apps that redirect through their own domains can strip query parameters during the redirect, losing UTM data entirely before it reaches Shopify's checkout.
The role of Shopify's landing_site and referring_site fields
Behind the scenes, Shopify stores landing_site (the first page visited, including its full query string) and referring_site (the referrer URL) as order-level fields accessible via the Admin API and visible to apps building attribution reports. These fields are set at the start of a session, so a UTM-tagged link needs to be the actual first page a visitor lands on in that session for it to populate correctly; sharing a link that redirects through a URL shortener that drops query parameters will blank this out.
Multi-session customers and the limits of UTMs
A customer who clicks a Meta ad on Monday, doesn't buy, then returns via Google search on Thursday and completes checkout will have Thursday's session (organic/Google) recorded as the attributing session in Shopify's own order attribution, even though the original ad exposure happened Monday. This is expected behavior, not a bug, and it's why UTM-based order attribution and ad-platform-reported conversions (which use their own separate attribution windows) will diverge for any customer with a multi-session path to purchase.
Structuring UTMs for usable reporting
Use consistent, lowercase values for utm_source (e.g., google, facebook, klaviyo) and utm_medium (e.g., cpc, paid-social, email) across every campaign so that Shopify's and any analytics tool's reports group traffic correctly; inconsistent casing or naming, like 'Facebook' in one campaign and 'facebook' in another, creates fragmented, hard-to-reconcile reporting even though the underlying data was captured correctly.
UTMs and Google/Meta's own click identifiers
UTM parameters and platform click identifiers like gclid (Google) and fbclid (Meta) serve different purposes: UTMs are for human-readable campaign labeling inside Shopify and analytics tools, while gclid/fbclid are the technical identifiers Google and Meta use internally to match a session to the exact ad, keyword, or ad set that was clicked, which is what powers Enhanced Conversions and Conversions API matching. Losing gclid/fbclid hurts platform-side attribution and Enhanced Conversions matching; losing UTMs hurts your own internal Shopify-side reporting; both can happen independently.
Checking whether UTMs survive to the order
Place a test order by clicking a link with UTM parameters attached (e.g., yourstore.com/products/test?utm_source=test&utm_medium=test&utm_campaign=survival-check), complete checkout, then open that order in the Shopify admin and check whether the conversion/attribution section shows the utm_campaign value. If it shows blank or shows a different referrer, something in the funnel, a redirect, an app, or a cached page, is stripping the parameters before Shopify's session recording captures them.
Apps and themes that can interfere
Page speed or caching apps that serve a cached version of a landing page without preserving query parameters, and some cart/upsell apps that redirect customers through an external checkout or subscription domain, are common culprits for UTM loss. Testing the specific customer journey your ads actually drive traffic through, not just the homepage, is important, since a redirect issue on a specific product page might not show up if you only test from the homepage.
Reporting on UTM data at scale
Shopify's built-in Analytics reports include acquisition-related views that break down orders by referring channel; for deeper campaign-level UTM reporting, most merchants export order data via the Admin API or use an analytics/attribution app that reads the landing_site and referring_site order fields directly, since Shopify's native admin reporting UI has limited slicing by individual utm_campaign values.
Where this fits with server-side tracking
UTM-based order attribution in Shopify is a useful sanity check precisely because it's independent of gclid/fbclid cookie matching, Conversions API deduplication, or Enhanced Conversions modeling; if Shopify's own utm_source breakdown shows meaningfully more Google-attributed orders than Google Ads itself is reporting as conversions, that gap points to a tracking or matching problem on Google's side worth investigating with Enhanced Conversions or attribution window settings, rather than assuming the ads simply aren't working.
A practical UTM checklist
Standardize source/medium/campaign naming across every channel before launch. Test that a UTM-tagged link survives to the order's landing_site field through your actual customer funnel, not just a direct homepage visit. Re-test after installing any new caching, redirect, or checkout-related app. Use the resulting order-level data as a cross-check against Google Ads and Meta's self-reported conversions rather than as a replacement for either.
