Skip to content

How to reduce direct traffic in GA4, step by step

Find where direct visits land in GA4, then remove the causes you control. Filter out your team and tag every owned link, Shopify email and ad. Check that redirects keep the tags, and catch new tags that land in Unassigned. What stays is mostly typed and bookmarked visits.

By , Founder & CEOUpdated 8 min read

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

To reduce direct traffic in GA4, first find where direct visits land, then remove the causes you control. Filter out your team, tag every owned link and ad, keep tags alive through redirects and catch tags that land in Unassigned. If you fix those, what stays in Direct is usually typed and bookmarked visits.

Step by step

Set the date range to the last full month and leave it there. Reading the reports needs only viewer access. Steps 3 and 8 need the Editor role on the GA4 property.

  1. Size Direct and see where it lands. In Traffic acquisition, switch the primary dimension to Session source / medium and add Landing page + query string as a secondary dimension. Then type (direct) / (none) into the search bar above the table. Google's help suggests this pairing to list the landing pages behind each traffic source. Menu path: Reports > Acquisition > Traffic acquisition.
  2. Split the landings into typed and clicked. Write down Direct's share of sessions first, so you can measure the change later. Home pages and short brand addresses are what people type or bookmark. Long product, offer and order URLs are what people click, so each one points to a link that lost its source. Menu path: the same table, sorted by Sessions.
  3. Filter out your team's visits. Staff, agencies and developers open the shop all day, often from a bookmark. Define internal traffic by IP address, then create an Internal Traffic data filter and leave it in Testing. Google's help warns that an active filter's effect is permanent, so watch it in Testing first. Menu path: Admin > Data collection and modification > Data streams > web stream > Configure tag settings > Show more > Define internal traffic. Then Admin > Data collection and modification > Data filters > Create Filter > Internal Traffic.
  4. Tag every link you own with three UTM parameters. Google's help says to always set utm_source, utm_medium and utm_campaign, and to use lower case as a standard practice. Pick a medium GA4's channel rules know, such as email, sms or affiliate. A UTM builder that shows the GA4 channel catches a bad value before the link goes out. Menu path: the link itself, then Reports > Acquisition > Traffic acquisition to confirm.
  5. Tag the emails Shopify sends for you. Order confirmations and shipping updates link back to your shop, and those clicks are easy to forget. Open each customer notification that links to your store and add UTM tags to those links. Menu path: Shopify admin > Settings > Notifications > Customer notifications.
  6. Check that ad clicks arrive tagged. In Meta Ads Manager, complete the ad until you reach Tracking, then fill the URL parameters field or click Build a URL parameter. Meta's help says it may already add a source of Facebook or Instagram and a medium of paid. In Google Ads, keep auto-tagging on so GA4 can read where each ad click came from. Menu path: Meta Ads Manager > your ad > Tracking > URL parameters. Google Ads > Admin > Account settings > Auto-tagging.
  7. Confirm nothing strips the tags on the way in. Click each tagged link once, then look for its campaign in GA4 the next day with the Session campaign dimension. If it is missing, suspect a redirect or a URL shortener: Google's help says both can strip UTM parameters. Menu path: Reports > Acquisition > Traffic acquisition, dimension Session campaign.
  8. Catch new tags that land in Unassigned. A tag whose medium matches no channel rule leaves Direct and lands in Unassigned. Copy the default channel group into a custom group and add a channel for your value. Google's help says custom channel groups can be applied to reports retroactively, so the fix reaches back. Menu path: Admin > Data display > Channel groups > Create new channel group.

A worked example

For illustration, say Traffic acquisition shows 20,000 sessions last month and Direct holds 7,000 of them. In this worked example, step 1 finds 2,000 of those direct sessions landing on order and tracking pages that only your shipping emails link to. For illustration, another 1,000 land on a long product URL that only a paid creator's bio link uses, and your office accounts for 500.

Step 5 tags the shipping emails, and step 4 gives the creator's link the affiliate medium. In this worked example, those 3,000 sessions appear under Email and Affiliates the next month. For illustration, your office's 500 visits stop entering new data once the filter is active. With the same visitors, Direct reads 3,500 in this worked example instead of 7,000.

Half the Direct row is gone, and not one extra order came in. That is the right result. Each visit now names the door it came through, and the rest of Direct is mostly people who typed your address.

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

In that store, steps 4 to 7 would decide most of the outcome. A buyer who visits once leaves a single label. If that visit came through one of your own links, a tag is what turns it from Direct into a channel. The same sheets cannot say how many of those single visits were untagged clicks. Steps 1 and 2 are how you find out in your own data.

What should you check when the numbers look wrong?

  • Direct fell, and Unassigned rose by about the same amount. Your new medium matches no channel rule. Fix the value at the source, and use step 8 for the visits already recorded.
  • The internal traffic filter seems to do nothing. Google's help says a data filter can take 24 to 36 hours to apply. In Testing it only labels matching events, under the Test data filter name dimension in Explore.
  • Your test click shows an old source in Realtime. Google's help says Realtime shows user-scoped dimensions, about how users were first acquired. Your own click shows the source that first brought you, so check Session campaign in Traffic acquisition instead.
  • Meta clicks still arrive without your campaign name. Meta's help says its URL parameters apply to clicks on the ad, not to clicks on the same post seen organically. A buyer who leaves and comes back later also loses them.
  • Direct barely moved after all of this. Then most of it was typed, bookmarked or unreadable from the start. Judge that part with a holdout test, not with more tags.

What to do this week

  1. Run steps 1 and 2 for last month. Pass: you can name the email, ad or partner behind each of your five busiest deep landing pages. Fail: you cannot, so ask whoever sends links where those URLs appear before you tag anything.
  2. Make sure Google Ads auto-tagging is on. In Google Ads, click Admin, then Account settings, then the Auto-tagging section. Pass: the box Tag the URL that people click through from my ad is checked. Fail: it is unchecked, so check it, save, and look for your campaigns under Session campaign in Traffic acquisition the next day.
  3. Tag your shipping confirmation email and test it. Pass: the day after a real shipment, its campaign appears under Session campaign in Traffic acquisition. Fail: it is missing or sits in Unassigned, so check the redirect chain and the medium value.

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: Landing page report (Google); Traffic acquisition report (Google); Filter out internal traffic (Google); URL builders: Collect campaign data with custom URLs (Google); Default channel group (Google); Understand (direct) / (none) traffic (Google); Custom channel groups (Google); Realtime report (Google); Setting up customer notifications (Shopify); Add URL parameters to your Meta ads in Meta Ads Manager (Meta); About auto-tagging (Google).

Frequently asked questions

  • Do clicks from Shopify order emails count as direct traffic?
    They can. GA4's help says traffic source information is lost when links to your site lack UTM parameters. Shopify's order and shipping emails link back to your shop, so tag those links in the templates under Settings > Notifications > Customer notifications.
  • Why did my new UTM links land in Unassigned?
    Because the source and medium match none of GA4's default channel rules, and Unassigned is the value GA4 uses then. Switch to values the rules know, such as email, sms or affiliate. A custom channel group can relabel the visits already recorded, since it also applies to past data.
  • Does Meta add UTM parameters to my ads automatically?
    Sometimes. Meta's help says it may add a campaign source of Facebook or Instagram and a campaign medium of paid to ad traffic. Parameters you enter under Tracking override duplicates in the website URL, so check one live ad's landing URL before you change anything.

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.