• UTM Tracking
  • GA4
  • Attribution
  • Campaign Tracking

UTM Tracking: A Practical Guide for GA4 Reports

By Olam Sule · Published 3 Sept 2026

TL;DR

UTM tracking adds five tags to a campaign link (source, medium, campaign, plus optional term and content) so GA4 can name where a click came from. Skip them, or tag them inconsistently, and paid and email visits collapse into Direct, so your channel report understates the campaigns you paid for. We set up and audit campaign tagging for clients most weeks; this is the walkthrough we give them.

Olamide Sule, founder of Dolphin Analytics: a digital analytics expert based in London delivering solutions for agency and in-house clients.

Broken UTMs are the quiet reason a channel report stops adding up: you spent on paid social all month, yet GA4 credits Direct. We set up and audit campaign tagging for agency and in-house teams most weeks, and inconsistent tags are one of the first things we check. This is the guide we give clients: what UTM tracking is, how to build a link that reports cleanly, and how to keep the tags consistent so paid and email stop hiding in Direct.

What is UTM tracking?

UTM tracking is the practice of adding short tags to a campaign link so GA4 can record where each click came from. UTM stands for Urchin Tracking Module, after Urchin, the analytics product Google acquired in 2005 that grew into Google Analytics. The tags sit in the URL after a question mark, and GA4 reads them to name the source, medium and campaign of the visit.

Without the tags, GA4 has nothing to attribute. A link with no UTM and no readable referrer lands in the (direct) / (none) bucket, the fallback GA4 reaches for when it cannot work out where a session started, per Google’s documentation on (direct) / (none) traffic. So UTM tracking is how you tell GA4 the truth about a campaign before it has to guess.

What are the five UTM parameters?

There are five standard UTM parameters. Three are required for a link to report cleanly, and two are optional. The Google Analytics URL builder documentation defines each one; here is what they do in practice.

ParameterRequiredWhat it namesExample value
utm_sourceYesThe specific origin of the clicknewsletter, google, linkedin
utm_mediumYesThe channel typeemail, cpc, social
utm_campaignYesThe campaign the link belongs tospring-sale-2026
utm_termOptionalThe paid keyword (paid search)analytics-agency
utm_contentOptionalSeparates two links or creatives in one campaignheader-cta, footer-cta

Source, medium and campaign are the three that matter most, because GA4 uses utm_source and utm_medium together to decide which default channel group the visit falls into, per Google’s default channel group documentation. Get the medium wrong and the session lands in the wrong channel, even though the click was tagged.

GA4 also reads three newer optional parameters (utm_source_platform, utm_creative_format and utm_marketing_tactic) that feed its manual campaign reporting, documented in the same Google URL builder reference. Most teams never need them; the original five carry the reporting.

You build a UTM tracking link by adding the parameters to your destination URL, and the safest way is to let Google assemble them for you rather than typing them by hand. Hand-typed links are where the stray capital letters and missing ampersands creep in.

  1. Open the builder. Go to Google’s Campaign URL Builder. It is free and it formats the query string correctly every time.
  2. Paste your destination URL. For example https://yoursite.com/offer.
  3. Fill the fields. Set campaign source, campaign medium and campaign name. Add campaign term and campaign content only if you need them. Use the exact values from your naming sheet (see the next section).
  4. Copy the generated URL. It will look like this: https://yoursite.com/offer?utm_source=newsletter&utm_medium=email&utm_campaign=spring-sale-2026.
  5. Use that link in the campaign. Paste it into the email button, the ad destination field or the social post. For Google Ads specifically, leave auto-tagging on and do not add UTMs on top, because the gclid already carries the data and manual tags can override it.

Every parameter starts with utm_, the first one follows a ?, and each extra one follows an &. If you ever build a link by hand, that pattern is what to check.

Why do inconsistent UTMs break your channel reporting?

Inconsistent UTMs break reporting because GA4 reads the tags literally, so any variation splits one campaign into several rows or drops it into the wrong channel. The click still happens; the credit just lands somewhere useless. Two faults cause most of the damage.

The first is case and spelling drift. GA4 treats utm values as case-sensitive, so Email, email and e-mail become three separate sources, and one newsletter campaign shows up as three half-size lines that never reconcile. A utm_medium of e-mail also misses GA4’s Email channel definition, which expects email, so the visit slides into a different group entirely.

The second is missing tags on non-Google paid. Google Ads auto-tags itself with a gclid, so it reports without UTMs. Meta, LinkedIn and TikTok do not, so a paid social link with no utm_medium=cpc arrives with no source GA4 can read and settles in Direct. You paid for the click and the report credits an audience typing your URL. That is the paid-into-Direct leak, and it is the same mechanism behind unexpectedly high direct traffic, which we cover separately.

What naming convention keeps UTM reports clean?

A naming convention keeps reports clean by fixing one spelling for every value before anyone builds a link. The rules are short, and the discipline is shared, not clever. Agree these and write them down:

  • Lower case, always. newsletter, never Newsletter. Case sensitivity is the most common cause of split campaigns we see.
  • Hyphens, no spaces. spring-sale-2026, never spring sale 2026. Spaces become %20 in the URL and read badly in reports.
  • A fixed set of mediums. Restrict utm_medium to a short list that maps to GA4’s channel definitions: email, cpc, social, affiliate, referral. Ban free-typed variants like e-mail or paid-social unless you have checked they land in the channel you expect.
  • One shared sheet. Keep a spreadsheet of approved source, medium and campaign values, and require every link to draw from it. This is the single control that stops five people inventing five spellings of the same campaign.

The convention matters more than any individual link. One person tagging perfectly cannot save a report that four other people are filling with Facebook, facebook and FB.

How do you audit UTM tracking coverage?

You audit UTM coverage by checking two things: that new links report the tags you set, and that campaigns you already ran are not sitting untagged in your reports. Both checks are quick.

  1. Test a single link live. Open a tagged link in a private browser window, then go to GA4 Reports > Realtime. Your session should appear with the source, medium and campaign you set. If it shows (direct), the link is not tagged correctly or a redirect stripped it.
  2. Spot untagged campaigns over time. Open GA4 Reports > Acquisition > Traffic acquisition, then change the primary dimension to Session campaign. Scan for two problems: campaigns you know you ran that are missing, and a large (not set) or (direct) row that should hold tagged traffic.
  3. Check redirects preserve the tags. If a campaign link passes through a redirect (a link shortener, a vanity URL, a /go/ path), run curl -sIL "yoursite.com/go/offer" in a terminal and read the Location: hops. Confirm the utm_ parameters survive to the final URL; redirects that drop the query string drop your tags with it.
  4. Confirm tags survive across domains. If a visitor crosses from your site to a booking tool or payment page mid-journey, the campaign can reset unless cross-domain tracking is configured to carry the session through.

What we find when we audit campaign tracking

When we audit accounts, inconsistent UTMs are rarely one clean mistake. They are usually a mix: a few untagged paid links, two spellings of the same medium, and a redirect quietly stripping the tags, all stacking up until the channel report no longer matches what the marketing team knows it spent.

Fixing it means tracing where each source disappears. On one private aviation engagement, we mapped the entire enquiry-to-deal flow across three web domains and the client’s HubSpot CRM, so campaign sources stopped vanishing before a lead reached the sales pipeline. Most of that work is unglamorous: agreeing the naming, tagging the links, and checking the tags survive every hop.

Start by seeing what is actually firing on the site. Sonar, our free scanner, reads the tags, pixels and consent setup a visitor’s browser can see from the outside in one click, no account needed. If your channel numbers already look wrong and you want a person to read the problem with you, use the tell us what’s broken, or book a call.

Frequently asked

What is UTM tracking?

UTM tracking is the practice of adding UTM parameters (short tags in the URL: utm_source, utm_medium, utm_campaign, and optional utm_term and utm_content) to a campaign link so GA4 can record where a click came from. UTM stands for Urchin Tracking Module, named after Urchin, the analytics tool Google bought in 2005 that became Google Analytics. Without the tags, GA4 has nothing to read and files the visit under Direct.

What do the UTM parameters mean?

utm_source names the specific origin (newsletter, google, linkedin). utm_medium names the channel type (email, cpc, social). utm_campaign names the campaign (spring-sale-2026). utm_term is optional and holds a paid keyword; utm_content is optional and separates two links or creatives in the same campaign. Source, medium and campaign are the three that decide how GA4 buckets the visit.

Why is my paid traffic showing as direct in GA4?

Non-Google paid clicks (Meta, LinkedIn, TikTok) carry no UTM tags unless you add them, so GA4 finds no source and files them under Direct. Google Ads is the exception, because auto-tagging adds a gclid. A blank or misspelled utm_medium has the same effect on channel reports: the visit lands in Unassigned or Direct instead of Paid. Tag every non-Google paid link and the traffic returns to its real channel.

Are UTM parameters case-sensitive?

Yes. GA4 treats utm values as case-sensitive, so Email, email and E-mail register as three separate sources and split one campaign across three rows in your reports. Pick one style, lower case with hyphens is the common choice, and keep every value in a shared sheet so the whole team tags the same way.

How do I check if my UTM tracking is working?

Open a tagged link in a private browser window, then check GA4 Reports, Realtime: your session should show the source, medium and campaign you set, not (direct). For coverage over time, open Reports, Acquisition, Traffic acquisition and add Session campaign as the dimension, then scan for campaigns you know you ran that are missing or sitting under (not set).

Who can set up UTM tracking for me?

We can. We set up, audit and fix GA4 and Google Tag Manager tracking for agency and in-house teams most weeks, and inconsistent UTMs are one of the faults we find most. Start with our free scanner, Sonar, to see what is firing on the site from the outside, or [talk to us](#free-audit) to get a person to read the problem with you.

Talk to us

Where does your data stop making sense?

Tell us what's broken, or grab a time. Either way you hear from a person, not a sales script.

Send a message

We reply within one working day.

Add a few details (optional) The more we know up front, the faster we can tell you what's wrong and how to fix it.

Protected by an invisible spam check. Prefer email? olam@dolphinanalytics.co.uk

Calendly · 30 min

Book a call

Thirty minutes on Google Meet with the founder.

The booking lands on the same record as your message.