What UTM parameters are
UTM parameters are five query-string tags appended to a destination URL: utm_source, utm_medium, utm_campaign, utm_term, and utm_content. Your analytics tool reads them when the visitor lands and credits the session to the campaign you named.
GA4 leans on the first two hardest. Session source/medium is the pair you see in every traffic report, like facebook / paid-social. Default channel grouping buckets sessions by matching those values against fixed rules. A medium of paid-social lands in the Paid Social channel; a mistyped medium can demote the same traffic to Organic Social or Unassigned.
Campaign, term, and content add depth: which promo, which audience or keyword, which creative. None of it is registered anywhere; the values are plain text you invent. That freedom is exactly why a builder plus a written convention beats freestyling in the ads manager at 11pm.
Worked example
Take the builder's defaults: destination https://stefanbrain.com, the Meta preset (source facebook, medium paid-social), and campaign spring-launch. The output is:
Click through that link and GA4 records session source/medium as facebook / paid-social and session campaign as spring-launch. Every ad in the launch tagged the same way rolls up into one clean row. Term and content were left empty, so the builder skipped them: no dangling utm_term= polluting the URL.
Note what the tool did silently: nothing, because the default values were already lowercase and hyphenated. Type “Spring Launch” as the campaign instead and it still outputs spring-launch. That normalization is the whole product.
A naming convention that survives growth
Three rules, then a table. Lowercase everything. Hyphenate instead of spaces. Keep one written taxonomy the whole team copies from; a shared doc beats five people's memories.
| Parameter | Answers | Examples |
|---|---|---|
| utm_source | Which platform sent the click | facebook, tiktok, google, klaviyo |
| utm_medium | What kind of traffic it is | paid-social, cpc, email, influencer |
| utm_campaign | Which push or promo | spring-launch, q4-gift-guide |
| utm_term | Which audience or keyword | broad-women-35, running-shoes |
| utm_content | Which creative or placement | ugc-hook-03, static-blue-cta |
Keep utm_medium to a short fixed list of five to eight values, since GA4's channel grouping matches on it. utm_source names the platform, never the placement. utm_campaign should read like something you'd say in standup. utm_content is your creative-level readback: name the concept and variant, and you can later line clicks up against impressions in the CTR Calculator per creative, without exporting from the ads manager.
Mistakes that wreck reporting
Casing drift. Facebook, facebook, and FaceBook are three different sources to GA4. Reports split three ways, totals stop matching the platform, and someone ends up maintaining a repair spreadsheet. Lowercase at the source instead; this builder does it for you.
Spaces in values. A raw space breaks the link in some placements or becomes %20 and mismatches its hyphenated siblings. Hyphens survive everywhere; the builder converts spaces before encoding.
Stacking duplicate tags. Paste an already-tagged URL and this builder replaces the existing utm_ values with your new ones instead of appending a second set.
Tagging internal links. A UTM on a link from your homepage to your product page starts a new attributed session and erases the visitor's real source. UTMs are for external traffic only: ads, email, partners.
Skipping utm_content. Leave it empty and every creative in an ad set collapses into one analytics row. Fill it with concept-and-variant names and you can compare landing behavior per creative. Pair it with the Conversion Rate Calculator to see which hook brings buyers, not just clickers.
Frequently asked questions
Which UTM parameters are required?
Technically none, practically two: utm_source and utm_medium. GA4 builds session source/medium and channel grouping from that pair, so a link missing either is half-invisible. utm_campaign is strongly recommended; term and content are optional depth.
Do UTMs affect SEO?
Not meaningfully. UTM parameters don't change rankings, and a canonical tag pointing at the clean URL keeps the tagged copies from being indexed as duplicates. The real SEO-adjacent sin is tagging internal links, which corrupts your analytics rather than your rankings. Tag external campaign traffic only.
Are UTM values case-sensitive?
Yes. GA4 treats Facebook and facebook as two different sources and reports them on separate rows. That's why this builder follows the convention and lowercases everything before the link ever ships. Fixing casing drift after the fact means rewriting history in a spreadsheet.
What is utm_id?
utm_id is a campaign ID key GA4 uses to join imported cost data to sessions. If you upload spend from non-Google platforms via Data Import, you need it; if not, the five classic parameters cover you. This builder omits it by default to keep URLs lean.
Should I use Meta dynamic parameters like {{ad.id}}?
Yes, at scale. Meta replaces {{ad.id}} and {{adset.name}} with real values at delivery time, which beats hand-tagging hundreds of ads. But paste them straight into Meta's URL parameters field: a builder that URL-encodes the braces breaks the substitution. Use this tool for the static parts and let Meta fill the dynamic ones.
Why do my UTMs show as (not set) in GA4?
Usually a redirect eats the query string: link shorteners, domain redirects, and some checkout flows all strip parameters. Test by clicking your tagged link and checking the landing URL still carries the utm_ pairs. The other common case is reading a dimension you never populated, like utm_term on links that only ever set source and medium.
Where StefanBrain fits
A UTM builder gets you clean links; it doesn't make the ads behind them any better. StefanBrain generates the static ads, video scripts, and landing pages your tagged links point to, trained on 7+ years of DTC marketing IP. It then reads performance back per creative, which is exactly the readback disciplined utm_content naming unlocks. And before those tagged ads ship, run the copy through the Ad Character Counter so the platform doesn't truncate the headline you spent an hour on.
