Skip to main content
Terminus
Contents
The Letter and the LinkChapter 2 · ~10 min read

How Analytics Reads a Visit

Why the browser can say where a click came from but not why, how the link carries the why in five fixed slots, and how analytics turns them into channels.

On this page
The chapter in 4 min, as a video.Next video: Chapter 3 · How a Value Behaves →

Skip ahead to March 1, a little after nine in the morning. A Stride customer taps the hero image in the spring sale newsletter and lands on the sale page. Before the page has finished loading, Stride’s analytics has recorded the visit.

Where did she come from?

If the link was bare, analytics has to work it out from what the browser tells it, and a tap inside an email app tells it nothing. The visit files under direct, as if she’d typed the address herself. She didn’t. Stride paid to send that email, and the report hands the visit to nobody.

If the link carried four short tags, the report says newsletter, email, spring_sale-runners-2025_03, hero-image. Same person, same tap. The only difference is what the link said when it arrived.

https://stride.com/spring-sale?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale-runners-2025_03&utm_content=hero-image

  • sourcewhere
  • mediumhow
  • campaignwhy
  • contentwhich link
The newsletter's hero image link. Each color is one tag; by convention, each answers one question about the click.

Hold on to that link. It’s where the book is heading, not where Dana is: she hasn’t chosen a single value yet, and the pattern in that campaign value is the next chapter’s business. First, the question Chapter 1 left hanging. Doesn’t analytics already know where visitors come from?

Two clicks from Facebook

It knows something. Here’s a test.

On March 1, two people reach Stride’s sale page from Facebook. One taps Stride’s paid ad for the spring sale. The other taps a friend’s post sharing the sale with a running group. Neither link was tagged.

Before reading on, predict which channel each visit lands in. Paid Social for the ad? Referral for the friend’s post?

Show what the report says

Both visits arrive looking the same:

SourceMediumChannel
m.facebook.comreferralOrganic Social
m.facebook.comreferralOrganic Social

GA4 files both as Organic Social. The paid click reads as free, and nothing in the report tells the two apart. Tagged, the ad’s click would have arrived as facebook / paid_social and landed in Paid Social.

Analytics knew where both clicks came from: Facebook. One was a paid ad from a campaign Dana will be asked to defend, the other a favor from someone Stride never paid, and from where the report sits they’re the same visit.

The report saw where. It never saw why.

The browser is a bad witness

Most clicks come with a note from the browser: here’s where this person just was. That note is the referrer. For an untagged link it’s all analytics has to go on, and it fails in three ways:

  1. It’s often missing. Email apps, most other apps, QR codes and bookmarks send no referrer at all, and a visit with no referrer and no tags files as direct: analytics’ name for “I can’t place this”. Untagged email often lands there.
  2. It’s often vague. By default, browsers now send only the domain that linked to you, m.facebook.com, and nothing about the page or the post.
  3. It never says why. Even a complete referrer can only say where. It can name Facebook. It can’t name the ad, the campaign, or whether anyone paid for the click.

So the why has to travel with the link itself. Everything between the question mark and any # is the query string: a list of key=value pairs joined by &, which analytics reads.

stride.com/spring-sale?utm_source=newsletter&utm_medium=email

Tags placed there arrive with the click whatever the browser does or doesn’t send. One rule keeps them working: tags go before any # in the link, because everything after a # stays in the browser, and analytics doesn’t read tags there.

UTM parameters are the standard set of these tags, five named keys that nearly every analytics tool reads. They’re the envelope from the Introduction, opened.

Five slots, and a convention

The envelope has a fixed shape: five slots. And the names on those slots don’t mean anything on their own. UTM stands for Urchin Tracking Module, after Urchin, the analytics tool Google bought in 2005 and turned into Google Analytics. The five names are Urchin’s convention. Nothing in a link makes utm_source a “where” or utm_medium a “how”.

A slot means what the tool reading it does with it, plus what your team agrees. GA4 builds its channels from source and medium and its campaign reports from campaign, so in GA4 the convention has teeth. A tool that read the slots differently, or a team that agreed to fill them differently, would get different meanings from the same link.

By that convention, each slot answers one question:

SlotBy convention, answersFor example
utm_sourceWhere did the click come from?facebook, google, newsletter
utm_mediumHow did it reach you?paid_social, cpc (paid search), email
utm_campaignWhy does the link exist?the spring sale
utm_termWhich keyword or audience?running_shoes
utm_contentWhich link or creative?hero-image, cta-shop_now

GA4 relies on source, medium and campaign, so those three go on every tagged link. Term and content are there for when you need them.

Now put Dana’s dimensions into the slots, the five she wrote down in Chapter 1:

Dana’s dimensionWhere it goes
Channelutm_medium (with the source, it decides the channel)
Sourceutm_source
Campaignutm_campaign
Placementutm_content
Product lineno slot

Four dimensions have slots, and product line has none.

This is where the fixed shape bites.

The letter is Dana’s to write, but the envelope came with five slots, and product line, the dimension behind her second question, has nowhere obvious to go. It has two ways in:

  • share a slot with another dimension;
  • come from a lookup, the two-column list from Chapter 1, if every campaign promotes one line.

Stride will put it into the campaign slot, which is why the March 1 link reads spring_sale-runners-2025_03. How to do that without making a mess is the next chapter’s subject, and the other options are Chapter 4’s.

The tool picks the channel

Analytics reports your tags as you wrote them, and it also reads the source and the medium together and files the visit into a channel. This is channel grouping, and the channel column is the one most reports show first. When Dana’s board asks which channel drives revenue, this is the column that answers.

The rules are the tool’s, not yours. The source says what kind of site sent the visit: a social network, a search engine, a video site. The medium says whether the click was paid, or names it as email, referral or affiliate. Here are the chapter’s own cases:

Source / mediumChannel
facebook / paid_social (the ad, tagged)Paid Social
m.facebook.com / referral (either click, untagged)Organic Social
facebook / social_adsOrganic Social
no referrer, no tags (an untagged QR code)Direct

Look at the third row. Someone tagged the ad, but social_ads doesn’t read as paid to GA4, so the social source decides, and the spend reads as free again. If the medium doesn’t read as paid, the source alone decides the channel.

You have two ways to live with this:

Use the tool’s rules

Use values the default rules understand. That’s why Chapter 3’s mediums look the way they do.

The one deliberate exception is offline, for QR codes and print, which GA4 files as Unassigned unless you add a custom channel group.

Write your own

Define your own channel groups: GA4 allows custom ones, and Adobe Analytics has its own channel rules.

Either way, someone has to decide.

The full GA4 rule set, with a simulator for trying your own values, is in the GA4 field notes.

Other ways to carry the letter

UTMs are the most common envelope, not the only one, and each carrier has a cost.

CarrierWhat it isIts cost
UTM parametersfive named tags on the linkread by nearly every tool, but only five slots
A custom parameteryour own key, like the Introduction’s cid=paid_social-facebook-spring_sale-runners-2025_03one slot holds everything, but every tool that reads it needs rules to split it
A click IDan ID the ad platform adds to the link itself, like Google’s gclidanalytics can turn it into a campaign only when the two are linked (connected in their settings)

Click IDs raise a fair question about the two Facebook clicks: didn’t Meta mark the ad’s link? It did, with its own click ID, fbclid. Meta uses it for its own conversion tracking, and GA4 doesn’t use it, because Meta and GA4 aren’t linked the way Google Ads and GA4 are. Facebook adds it to ordinary shared links too, so it couldn’t have told the two clicks apart anyway. With Google Ads, auto-tagging adds a gclid, and GA4 fetches the campaign from Google Ads instead of the link. What happens when that campaign and your own tags disagree is Chapter 5’s story.

GA4 reads a few more utm_ keys than these five. They’re for the expert who goes looking, and the GA4 field notes list them.

Where the visit goes next

Zoom out. The click Stride paid for lands at one stop on a longer route, from the moment someone makes a link to the moment someone reads a report:

The visit is recorded here, but what it can say was settled earlier, when someone made the link.

Keep that line in your head. The rest of the book walks it.

Your situation

Read your own setup off stage 3:

  • If you’re on GA4, it reads UTMs and its own linked click IDs.
  • If you’re on Adobe Analytics, you may carry the letter in one custom parameter instead.
  • If your ad platforms are linked to your analytics, auto-tagging carries the campaign for you.
  • Whatever you run, most email, apps, QR codes and print arrive with no referrer, so for them the tags are the whole record.

What changes

The decisionWhen the browser is the recordWhen the link is the record
Which links to tagonly channels analytics can’t see, like email and QR codesevery link you pay for or want to measure, including the obvious ones
The referrerthe record of where visits come froma fallback, for visits that arrive untagged
Where a dimension goesinto whatever field is freeeach slot answers one question by the convention your tools read; a dimension with no slot needs a home, chosen on purpose
The mediuma free labelhalf of the pair analytics groups channels by

Where the rule lives

Five slots are five fields that can each be typed wrong, at four o’clock on a Friday, by whoever is making the link. The rules for them can live in one of two places:

Beside the path

Written in a document, the rules have to be remembered by every one of those people.

Inside the path

Built into the place where links get made, each slot offers only values that pass.

Which values those are, and who decides, is where Stride goes next.

Check yourself

An in-store display carries a QR code with no tags. What does the report record for the visits it brings, and why?

Show answer

Direct. A QR code sends no referrer at all, and with no tags either, analytics can’t place the visit. This is how Dana’s question about the QR codes goes unanswered: the visits arrived, and nothing said where from.

A colleague tags paid search links with a source of google_ads_brand. Which slot does each part of that value belong in?

Show answer

By the convention GA4 relies on, the platform, google, goes in source. The kind of traffic, paid search, goes in medium as cpc. The brand strategy belongs in campaign. One value was doing three jobs, and the convention gives each job its own slot.

Your Facebook ads are tagged facebook / social_ads. Which channel do their visits land in, and why?

Show answer

Organic Social. social_ads doesn’t read as paid to the channel rules, so the social source decides. The ads are tagged and still read as free. paid_social would land them in Paid Social.

In one line

The browser can say where a click came from but not why, so the link has to carry it. The link has five fixed slots, analytics reads them as a pair to choose a channel, and a dimension with no slot needs a home.

Before the next chapter

Find one link your team shipped untagged this month, and say which channel its visits landed in and why.

Next · Chapter 3 · How a Value BehavesWhich values go in those five fields, and who decides?