A merchant looks at a Shopify analytics screen, sees “Direct” as the fastest-growing channel, and concludes nothing is working, while ChatGPT quietly sends the store its best-converting traffic of the quarter. AI chat attribution breaks in predictable places: some assistants send clean referrers, some append their own UTM parameters, some send nothing at all, and the journey through a checkout can drop whatever survived. Building UTM attribution for AI chat traffic is less about one tracking trick and more about assembling a chain of custody, from the answer click to the order row, with a known failure mode at every link.
What does each AI surface actually send?
A mixed bag you should verify quarterly rather than assume. ChatGPT appends a utm_source identifying chatgpt.com on many outbound clicks; Perplexity generally passes a referrer, and documents its agents in its crawler guide; Gemini and AI Overviews traffic arrives largely indistinguishable from Google organic; in-app browsers and privacy settings strip referrers unpredictably, landing sessions in Direct. The baseline inventory, which engines send what today and how to catch each one in GA4, is the groundwork laid in tracking generative AI referrals in GA4; this post is about getting those signals through checkout to revenue.
| Signal | Where it appears | Failure mode |
|---|---|---|
| utm_source from the engine | Landing page URL | Stripped by redirects, app browsers |
| Referrer header | GA4 session source | Privacy settings, HTTPS downgrades |
| Your own UTMs | Links you control in cited content | Only covers pages you tagged |
| Landing page pattern | Pages mainly cited by AI | Circumstantial, needs corroboration |
| Order attribution | Shopify order source | Last-click only, loses assists |
Which UTMs should you set yourself?
Tags on every link you control that AI surfaces might relay: your content cited in answers, your Shop listings, feeds, and any chat-commerce integrations. Use one stable convention, utm_source for the surface, utm_medium as something like ai_referral so reporting can group it, utm_campaign for the page family, and never retag mid-quarter, because renamed parameters orphan your history. What you cannot tag is the engine’s own behavior, so the convention’s job is coverage of your half plus consistency that makes the engine’s half recognizable next to it.
How does attribution survive the checkout?
This is where Shopify specifics matter. The session that lands on your storefront carries its UTMs and referrer into GA4; the checkout continues the session, but any domain change, legacy checkout domains, headless storefronts handing off to checkout, payment redirects that bounce through a wallet or bank, risks restarting it. The defenses: keep GA4 installed through checkout via the official integration, list any cross-domain hops in GA4’s cross-domain settings, and spot-check by running a tagged test purchase and confirming the order’s session source survived. In GA4, build a custom channel group that catches your ai_referral medium plus the known engine sources, per Google’s channel group documentation, so AI chat traffic stops dissolving into Referral and Direct.
How do you report revenue per engine honestly?
Accept that you are reporting a floor, not a total. Stripped referrers mean real AI revenue hides in Direct, and last-click models hand assisted conversions to whatever channel closed. Report per-engine revenue from your channel group as the confirmed minimum, watch Direct’s growth curve for the shadow, and corroborate with landing-page patterns: pages that mainly earn AI citations suddenly converting is signal, not coincidence. The full framework, dashboards, assisted views, and the floor-versus-shadow distinction, is in measuring GEO revenue in GA4. Remember the upstream half too: answers are composed from your indexed content, as Google’s AI features documentation describes, so attribution gaps never excuse skipping the visibility work that creates the traffic.
What does this change for paid budgets?
Attribution is the hinge between GEO and PPC. Once AI chat revenue is visible as a channel, even as a floor, you can compare its CAC, effectively the content cost amortized over orders, against paid search line by line, and shift budget where the blended number wins. Most stores discover their AI-referred cohort converts above site average, which argues for funding the content and data work that earns citations, the budget logic worked through in bridging PPC and AI search. Without the attribution chain, that argument never gets its numbers.
Nivk.com supplies the other side of the ledger for Shopify stores: it tracks which engines cite you, for which prompts, against which competitors, so rising AI revenue in your reports can be traced back to the visibility that produced it.
Perplexity referrals deserve their own segment in this setup: they are verification clicks from buyers checking an answer’s sources, with conversion to match. How stores earn those citations in the first place is in how luxury stores earn the Sources link in Perplexity.
App-first stores have an extra leg in this funnel: assistant referral to web mirror to app install to first order. The mirror architecture that makes app-exclusive commerce visible to assistants at all is in making your Tapcart app visible to LLM discovery.
Attribution tells you the conversation happened; the next step is keeping its intent: question themes routed into CRM properties make post-sale flows continue the conversation. The merge architecture is in feeding conversational search data into Klaviyo flows.
Frequently asked questions
What is the best way to attribute ChatGPT traffic to Shopify orders?
Catch the engine’s utm_source and referrer in GA4, group them in a custom channel group with your own ai_referral tagging, keep GA4 alive through checkout with cross-domain settings, and verify with a tagged test purchase. Report the result as a confirmed floor.
Why does AI chat traffic show up as Direct?
In-app browsers, privacy settings, and redirect chains strip referrers and parameters. Some loss is unavoidable; the channel group catches what survives, and Direct’s growth curve tells you roughly what did not.
Should I use different UTMs per AI engine?
Same medium, different source: utm_medium groups the channel for reporting while utm_source preserves the per-engine split. Keep the convention stable across quarters or you orphan your trend lines.
Does Shopify’s own order attribution capture AI referrals?
Partially: order source data is last-click and inherits the same stripped-referrer blindness. Treat Shopify’s number as a second floor and reconcile monthly against the GA4 channel group.


