Tracking basics

Why your campaign traffic shows as "(direct)" or "(not set)" in GA4

You sent a newsletter, posted the link everywhere, and GA4 says most of the visits were (direct). Or your campaign report has a large row labelled (not set). Both are common, both have a handful of usual causes, and most of those causes can be found in ten minutes. This guide walks through them.

First, what the two labels mean

(direct) / (none) is what GA4 records when a visit arrives with no information about where it came from: no referring website and no campaign tags. Google's own description is traffic that does not have a clear referral source. It includes people typing your address, using a bookmark, and opening links from places that do not pass any information along.

(not set) is a placeholder. GA4 shows it when a dimension has no value for that session. It is not a source in its own right; it means something that should have been recorded was not.

Why campaign visits turn into (direct)

1. The link was never tagged

The most common cause by far. If a link has no UTM parameters and the place it was clicked does not pass a referrer, GA4 has nothing to go on. Links sent in messaging apps, opened from PDFs and documents, or clicked in some desktop email programs often arrive this way. The fix is simple: tag every link you share yourself.

2. The tags were lost on the way

Sometimes the link was tagged correctly but the tags never reached your page. Typical culprits:

3. Analytics did not run in time, or at all

If the GA4 tag only loads after a visitor accepts cookies, visitors who decline are not measured in the normal way. How those visits appear depends on how consent mode is set up on your site, so if your direct traffic jumped after adding a cookie banner, check that set-up rather than your links.

Why you see (not set)

Google lists several causes. The ones that most often affect small sites:

Where you see itUsual cause
Session source / mediumThe session has no session_start event, often because of how the tag or a tag manager trigger is set up
Landing pageThe session has no page_view event
Campaign, in Google Ads reportsGoogle Ads is not linked to GA4, or auto-tagging is switched off
Campaign, on manual linksThe link had incomplete or incorrect UTM parameters
After adding consent modeConsent commands used in a way that drops the first event of the session

The first three usually point to a set-up problem on the site or the account, not a problem with any one link. The fourth is about links, and you can fix it yourself.

A ten-minute diagnosis

  1. Look at the link people actually clicked. Copy it from the sent email, the post or the printed QR code, not from your notes. Paste it into the UTM Reader and confirm source, medium and campaign are all present and spelt correctly.
  2. Click it yourself. Open it on your phone and watch the address bar. If the utm_ part disappears when the page loads, something between the link and the page is removing it.
  3. Check GA4 Realtime. With the page open, go to the Realtime report in GA4. If your visit appears with the right source and medium, the link works and the problem is elsewhere.
  4. Compare channels. If only one channel shows the problem (for example only WhatsApp), it is about that channel. If everything is affected, look at the site set-up, the tag and consent.
  5. Check Google Ads separately. If the (not set) rows are Google Ads campaigns, confirm the accounts are linked and auto-tagging is on before changing any links.

Example

A charity tags its newsletter link correctly, but the link points to example.org/give, a short address that redirects to the real donation page. The redirect drops everything after the ?. In GA4 the newsletter visits arrive with no tags and no referrer, so they land in (direct). Pointing the link straight at the final page, or fixing the redirect to keep the query string, solves it.

Spotting the problem in your reports

You do not need to wait for someone to complain. Two simple habits show tagging problems early:

Neither check proves the cause on its own, but together they tell you which link or channel to test first.

What you cannot fix

Some direct traffic is genuine and will always be there: people who know your address, returning supporters with bookmarks, and links copied and pasted between people without the tags. A healthy site always has some. The goal is not zero direct traffic. It is making sure the links you share arrive with the labels you chose.

Preventing it next time

For how source and medium decide which channel a visit lands in once it is tagged, read GA4 source and medium explained.