TL;DR
Shopify has its own attribution system, separate from GA4 and separate from what Meta or Google Ads report. It uses a Last non-direct click model by default, with four other models you can switch to inside a report, and a 30-day lookback. Orders pile up under Direct for structural reasons, not because tracking is broken: cookies expire, links arrive untagged, payment redirects wipe the referrer, and renewals have no browsing session at all. The three systems disagree because they use different models, different windows, and different identity signals. You cannot make them agree. You can keep your UTMs clean, keep buyers on one domain, and make sure every order is at least delivered to each platform.
Key Takeaways
- Shopify's default model is Last non-direct click over a 30-day window, not plain last-click. It credits the most recent channel that was not direct.
- Shopify offers five models total: Last non-direct click, Last click, First click, Any click, and Linear. You switch between them inside the report, not in a global setting.
- An order is labeled Direct when its journey contains no non-direct referrer. That includes typed URLs, untagged links, stripped email referrers, and payment-redirect hops.
- GA4 uses a different default (data-driven, since November 2023) and dropped its first-click, linear, and other older models, so Shopify and GA4 name different winners for the same order.
- Renewals, subscriptions, and admin-created orders have no session, so they are structurally Direct in Shopify and unattributed in GA4 everywhere.
- You cannot reconcile the three systems to one number. You can fix UTM hygiene, landing-domain consistency, and whether every order reaches each platform at all.
What attribution model does Shopify use?
Shopify Admin's marketing reports attribute every order to a channel using a selectable model, and the default is Last non-direct click. That model gives 100% of the credit to the most recent channel a shopper engaged with before buying, while ignoring direct visits. The lookback is 30 days: if a shopper does not buy within 30 days of a session, Shopify resets the stored referrer to whatever comes next.
You are not locked into that model. When a report combines a sales metric with a marketing dimension, an Attribution menu appears in the report's configuration, and you can switch the whole report between five models:
| Model | Who gets credit |
|---|---|
| Last non-direct click (default) | The last channel before purchase, excluding direct |
| Last click | The last channel, including direct |
| First click | The first channel in the journey |
| Any click | Every channel touched, each credited fully |
| Linear | Every channel, credit split evenly |
The important detail is that this is a per-report choice, not a store setting. There is no single switch that changes "your store's attribution model." You pick the model when you read the report, which means two people looking at the same orders can see different channel winners simply because they left the menu on different settings. Shopify also reorganized these reports in April 2025: the older Conversion by last interaction, Conversion by first interaction, and Attribution model comparison reports were retired in favor of the marketing channel performance report, so older tutorials point at screens that no longer exist.
Why do so many orders show as Direct?
Direct is not a channel. It is the bucket Shopify uses when it cannot find a non-direct source in the order's journey, and most stores have more of it than they expect. The causes are mechanical:
- Typed and bookmarked visits. A shopper who types your domain or opens a bookmark arrives with no referrer. Real demand, no source.
- Untagged links. A link in an SMS, a PDF, a podcast description, or a partner site with no UTM parameters lands as direct because nothing identifies where it came from.
- Stripped referrers. Many email clients and messaging apps open links in a context that drops the referrer, so email clicks can land as direct unless the link itself carries UTMs.
- Payment-redirect hops. When checkout bounces through an external payment step and back, that redirect can become the last referrer Shopify sees, overwriting the real source. Because Shopify reads the referrer right before the order, a redirect late in the journey can erase an earlier real click.
- Cross-device journeys. Someone who discovers you on a phone and buys on a laptop breaks the cookie chain, and the laptop session often looks direct.
- Sessionless orders. Subscription renewals, draft orders, and POS sales have no browsing session, so there is nothing to attribute. These are structurally direct, the same orders that show up as unattributed in GA4 and need their own handling for subscriptions.
Under the default Last non-direct click model, an order whose entire journey was direct has nothing else to credit, so it stays direct. A high direct share is a signal to audit link tagging and the checkout path, not proof that your tracking failed.
Why do Shopify, GA4, and ad platforms disagree?
Three systems look at the same order and give three answers, and all three are internally correct.
Shopify uses Last non-direct click over 30 days, reading the referrer at the point of order. It is counting orders it can see in its own database.
GA4 uses a data-driven model by default, which Google made the GA4 default in November 2023, and at the same time it removed the first-click, linear, time-decay, and position-based models that older guides still describe. GA4 also excludes direct unless the whole path is direct, the same rule as Shopify, but its identity is the _ga cookie and its session logic is its own. The mechanics of GA4's models are covered in GA4 attribution models on Shopify.
Ad platforms each claim conversions on their own click and view windows. Meta counts a purchase inside its attribution window if it can match the buyer to an ad exposure, and so does TikTok, and so does Google Ads, which is why their numbers added together can exceed your real order count. That overlap, and why it is expected rather than a bug, is the subject of why ad platforms disagree on ROAS.
The takeaway is not "pick the right one." It is that Shopify counts orders, GA4 models sessions, and ad platforms claim credit, so they will never produce one shared number. The same reason Shopify and GA4 revenue never match applies to attribution: different counters, different rules.
How to trace one order's attribution
The fastest way to understand your own data is to follow a single order through both systems. Pick a recent order and open it in Shopify Admin. The order's conversion summary shows the visit history Shopify recorded for that customer, which tells you what journey it saw. Then open your marketing channel performance report for the same window and note which channel the order's model credits.
Now look at the same purchase in GA4 under Explore, filtered to the transaction_id that matches the Shopify order number, and check its session source. If Shopify says one channel and GA4 says another, you have just watched two correct models disagree, and you will stop expecting them to match. If both say direct, you have found a sessionless or untagged order, which is a tagging problem to fix upstream, not a number to reconcile.
What you can actually fix
You cannot make attribution exact, because it depends on cookies and referrers that are lossy by design. What you can control is upstream of all three systems:
- UTM hygiene. Tag every link you control, email, SMS, partner placements, QR codes, with consistent campaign parameters so they stop landing as direct.
- Landing-domain consistency. Keep shoppers on one domain through checkout where you can, so a stray redirect does not become the last referrer.
- Delivery, not metaphysics. Make sure every order actually reaches each platform, even the ones whose source is unknowable. An order that never arrives at Meta cannot be attributed by any model.
That last point is where server-side delivery earns its place. WeltPixel Conversion Tracking sends every order to GA4, Meta, TikTok, Google Ads, and Reddit server-side from the Shopify order webhook, with consistent transaction and event IDs, so your attribution debates start from a complete set of conversions instead of a set with gaps. It does not rewrite which channel deserves credit, no tool can settle that, but it guarantees the order is in the room to be argued over.
FAQ
What is Shopify's default attribution model?
Last non-direct click, over a 30-day window. It credits the most recent non-direct channel a shopper used before buying. You can switch a report to Last click, First click, Any click, or Linear from the Attribution menu in the report's configuration.
Why are so many of my Shopify orders showing as Direct?
Because their journey had no non-direct referrer Shopify could read: typed URLs, untagged links, email referrers that got stripped, payment redirects that overwrote the source, cross-device paths, or sessionless orders like subscription renewals. A large direct share usually points to link-tagging gaps, not broken tracking.
Why does Shopify attribution not match GA4?
They use different models (Shopify defaults to last non-direct click, GA4 to data-driven), different lookback windows, and different identity cookies. GA4 also dropped its first-click, linear, time-decay, and position-based models in November 2023. Two correct systems with different rules will credit different channels for the same order.
Can WeltPixel Conversion Tracking fix my Direct orders?
It cannot invent a source that never existed, and no tool can. What it does is make sure every order, attributed or not, is delivered to each ad platform and to GA4 with consistent IDs, so unknowable-source orders are still counted rather than missing.
Start from complete conversion data
Attribution will always be an argument between systems that count differently. The one thing worth removing from that argument is missing data. WeltPixel Conversion Tracking delivers every Shopify order to GA4, Meta, TikTok, Google Ads, and Reddit server-side, with the transaction and event IDs that let each platform dedupe and match, so the debate is about credit, not about gaps.
Install WeltPixel Conversion Tracking on the Shopify App Store