Skip to content

How to find why your direct traffic is high, step by step

Run four checks in order. Size Direct in GA4's Traffic acquisition report, and tap your own email, text and short links to see if the UTM tags survive. Then check the lookback window under Attribution settings and compare with Shopify's Sessions by referrer report.

By , Founder & CEOUpdated 7 min read

Run the numbers for your store: the free UTM coverage calculator.

Direct traffic is usually high because GA4 could not read where visits came from. To find the cause, size Direct in GA4, test that your links keep their UTM tags, check the lookback window, then compare with Shopify. Missing or broken tags are the cause you can fix fastest.

Step by step

  1. Size Direct before you chase it. In GA4, open Reports, then Acquisition, then Traffic acquisition. Its default dimension, Session default channel grouping, gives Direct its own row. Note Direct's share of sessions and of key events for your last full month, since the two can differ a lot. Menu path: Reports > Acquisition > Traffic acquisition.
  2. Look at the raw values behind the row. Pick Session source / medium as the table's dimension and type (direct) / (none) into the search bar above the table. GA4 calls a visit Direct only when the source is exactly (direct) and the medium is (none) or (not set). Every row you find arrived with no source at all. Menu path: Reports > Acquisition > Traffic acquisition, search bar above the table.
  3. Tap your own links the way a buyer would. On your phone, open a link from your last email, your last text and any shortened link you use. Google's help warns that redirects, such as a hop from https to http, and URL shorteners can strip UTM parameters. Check the address bar once the page has loaded. Menu path: your phone's address bar, no GA4 menu needed.
  4. Tag every link with utm_source, utm_medium and utm_campaign. GA4 files a visit as Email when the source or medium is email. It files one as Paid Social only when a social source carries a paid medium, such as cpc. A source and medium that match no rule land in Unassigned. Menu path: the link itself, then Reports > Acquisition > Traffic acquisition to confirm.
  5. Check how far back GA4 may look. GA4 gives a direct visit the user's earlier UTM values, and the key event lookback window also applies to that session attribution. For most key events the window defaults to 90 days, and you can choose 30 or 60 days. A shorter window can leave more return visits in Direct. Menu path: Admin > Data display > Events > Attribution settings.
  6. Read what Shopify saw. In your Shopify admin, go to Analytics, then Reports, click the Category filter and choose Acquisition. Open Sessions by referrer, which shows whether visitors came directly, from search or by a referral. Compare its direct share with GA4's for the same month, or group by Traffic type, which uses values such as direct, organic and paid. Menu path: Shopify admin > Analytics > Reports > Category: Acquisition > Sessions by referrer.
  7. Mark the dates that change the count. Shopify's help says its session measurement rollout runs from September 21 to 23, 2026. Treat comparisons across those days as a measurement change, and log your own site, checkout and tag changes beside them. A jump in direct that starts on one of those dates is a measurement story, not a marketing one. Menu path: Reports > Acquisition > Traffic acquisition, with the date range set either side of each change.

A worked example

For illustration, say Traffic acquisition shows 10,000 sessions last month, with 4,000 on the Direct row. Step 2 finds nearly all of them as (direct) / (none), so the channel rule is doing its job. Step 3 is where it breaks: the link in your weekly email runs through a shortener, and the tags vanish.

If you retag that link and Direct falls to 3,000 sessions the next month, look at the email row. If the email row rises by about the same amount, those 1,000 sessions were email clicks all along. If it does not move, the lost clicks came from somewhere else, so test the next link on your list.

Now one store's real export, which holds shares of revenue rather than sessions. On the Channels sheet, Direct holds 57.7% of revenue in last click, first click and touched views alike. The Journeys sheet puts 79.5% of revenue in journeys with 1 touch, with 0.5 days to buy.

For that store, step 5 would change little. A longer lookback window cannot help with a buyer GA4 met only once. The checks that matter are steps 3 and 4: did those single visits arrive with tags, and did the tags survive?

The same Channels sheet shows Paid Social at 0.0% in all three views. The export cannot say whether that store ran paid social at all. If you run Meta ads and your Paid Social row looks like that, go back to step 4. GA4 only files a visit there when a social source carries a paid medium.

What should you check when the report looks wrong?

  • Direct jumps on the day you send an email or text. The links went out untagged or lost their tags on the way. Run step 3 on that exact message.
  • Direct jumps on the day of a site change. A new redirect or link shortener can strip tags before GA4 reads them. Test your links again on the new pages.
  • Direct falls but Unassigned rises. Your new tags use a source and medium that GA4's rules do not match. Fix the values, as in step 4.
  • GA4 and Shopify disagree on direct. Each counts sessions its own way, and Shopify changed its session measurement in September 2026. Compare the trend over the same dates, not the raw totals.

Then most of what is left is direct by nature, or hidden by limits no tag can fix. Typed addresses, bookmarks and links in PDFs carry no source. Ad blockers can interfere with the tracking cookies that tell GA4 where a visit came from. A buyer on a new device can look like a stranger to it.

At that point, stop trying to shrink the row and ask what feeds it. A report cannot answer that, because it only shows the last source GA4 could read. A holdout test can. Pause one channel in some regions, keep it running in others, and compare total sales and Direct in each. If Direct drops where the channel went quiet, that channel was feeding it.

What to do this week

  1. Run steps 1 and 3 today. Note Direct's share in Traffic acquisition, then tap one link from every channel you send. Pass: every link lands with its utm_ parameters intact. Fail: any link lands bare, and that channel's clicks are sitting in Direct.
  2. Set the lookback window to 90 days if it is shorter. Open Admin > Data display > Events > Attribution settings. Pass: the key event lookback window reads 90 days. Fail: it reads 30 or 60 days, so return visits past that window can stay in Direct. Write down the date, because the change only applies going forward.
  3. Compare Shopify and GA4 over the same four weeks. Use Sessions by referrer in Shopify and Traffic acquisition in GA4. Pass: the two direct shares rise and fall together. Fail: GA4's Direct climbs while Shopify's direct stays flat, so look for a tracking change on the GA4 side.

Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework

Sources, 1 October 2026: Traffic acquisition report (Google); Default channel group (Google); Understand (direct) / (none) traffic (Google); Scopes of traffic-source dimensions (Google); Select attribution settings (Google); Acquisition reports (Shopify)

Frequently asked questions

  • Which GA4 report shows direct traffic?
    Traffic acquisition, under Reports, then Acquisition. Direct is a row of its default dimension, Session default channel grouping. For the raw values, pick Session source / medium as the dimension and search the table for (direct) / (none).
  • What utm_medium should I use so GA4 sorts my links correctly?
    Use a value GA4's default channel rules recognise. For email links, email works. For paid social, use a medium such as cpc or one that starts with paid. Values that match no rule land in Unassigned, not in the channel you meant.
  • Why do Shopify and GA4 show different direct traffic?
    Because each counts in its own way. Shopify sorts sessions by referrer using its own cookies, while GA4 gives a direct visit the user's earlier campaign when it recognises them. Compare the trend in both over the same dates rather than the totals.

Go deeper: Causal attribution, explained.

Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.

Keep reading

Terms in this article

Browse the full glossary

Your platforms guess.
We run the math.

Upload a GA4 export and see what each channel caused, next to last-click, in 1–2 minutes. The read is yours to keep.

Free, in your browser: your file is not uploaded. The full read is €99, refundable within 30 days. Prices exclude VAT.
Or book a 30-min call.