UTM Builder & Decoder
What it does
The UTM Builder builds tagged URLs from a base URL and the standard UTM parameters (source, medium, campaign, term, content), with three modes: single URL builder for one-off tagging, bulk builder for tagging many URLs at once, and decoder mode for breaking apart someone else’s URL to see what’s tagged. Per-platform templates (Google Ads, Meta Ads, LinkedIn, email, organic social) preset the source and medium so you don’t have to remember the conventions per platform.
Common situations
You’re launching a campaign across Google Ads, Meta, LinkedIn, and email and need consistently-tagged URLs for each platform. Use the platform templates — they preset source and medium correctly per channel — and only the campaign-specific values change. Saves the recurring “did I use ‘paid_social’ or ‘paid-social’ on that one?” issue.
A spreadsheet has 50 different landing URLs each needing a different campaign tag for an email blast. The bulk builder handles all 50 in one pass; paste them in, set the per-row source/medium/campaign, copy the tagged URLs back to the spreadsheet.
A vendor sends you a tagged URL and you want to verify what’s actually being tracked. The decoder mode breaks the URL apart and shows each parameter — useful for confirming attribution before clicks start arriving in your analytics.
You’re auditing your own campaign tagging and notice GA4 reports inconsistent values across what should be the same campaign. Decode the actual URLs in your campaign to find the variant — usually a typo, a casing inconsistency, or an underscore-versus-hyphen issue.
You’re standardising tagging conventions across a team and want a tool that enforces a consistent format. The platform templates settle the source/medium debate per channel, and the same builder used by everyone produces consistent output.
What you need to know
UTM parameters are the standard mechanism for telling analytics tools where traffic came from. Google introduced them with Urchin (the company they acquired to become Google Analytics), and they’ve been the convention ever since. Five parameters, three required, two optional:
utm_source — where the click came from. Values: google, facebook, linkedin, newsletter, twitter. The platform or specific publication.
utm_medium — the channel type. Values: cpc (paid search), paid_social (paid social), organic (organic search/social), email, display, referral. Categorises the source.
utm_campaign — the campaign identifier. Values are arbitrary but should be consistent: spring-sale-2025, q4-launch, webinar-followup. Used for grouping clicks in analytics.
utm_term — optional, for keyword tracking. Most useful in paid search: running-shoes. Many teams skip it because Google Ads provides keyword data via integration anyway.
utm_content — optional, for creative variant tracking. hero-banner-v1, email-cta-button. Useful for A/B testing creative when both variants point at the same URL.
The format: https://example.com/page/?utm_source=google&utm_medium=cpc&utm_campaign=spring-sale
Five rules that catch most teams out:
Case sensitivity — GA4 treats Google and google as different sources. Pick one casing convention (lowercase is standard) and stick to it. Inconsistent casing fragments your reports.
Word separators — pick hyphens or underscores and stick to one. spring-sale and spring_sale are different campaigns to GA4. Underscores are slightly more common in UTMs; hyphens are slightly more common in URLs generally. Either is fine; pick one.
No spaces — encode them as %20 if you must, but better to use hyphens or underscores. Spaces in URLs cause client-side issues with some browsers and tools.
The source/medium pairing — these two values are the foundation of attribution. Get them right per platform: Google Ads is source=google, medium=cpc; Google organic is source=google, medium=organic. Mixing them up makes channel-level reporting useless.
Don’t UTM-tag internal links — a banner on your own homepage linking to /products shouldn’t have UTM parameters. Doing so overwrites the original source data when users click through, breaking attribution. UTM parameters are for inbound traffic only.
The decoder mode is useful for diagnosing attribution issues. Paste a URL from your analytics or a vendor email; it surfaces every parameter so you can verify what’s actually tagged.
Frequently asked questions
What’s the difference between source, medium, and campaign?
Source is the platform (Google, Facebook, LinkedIn). Medium is the channel type (paid search, paid social, organic, email). Campaign is the specific marketing initiative (spring-sale, q4-launch). Source and medium together are the channel; campaign is the specific instance.
Should I use lowercase or capitals?
Lowercase. GA4 treats values as case-sensitive, so consistent lowercase prevents fragmentation. Some teams use Title Case for campaign names (where words are capitalised); that’s also fine if applied consistently.
Hyphens or underscores?
Either, but pick one and stick to it. spring-sale and spring_sale are different campaigns to GA4. Hyphens are more URL-conventional; underscores are slightly more common in UTM examples. Within a team, the consistency matters more than the choice.
Do I need utm_term and utm_content?
No. utm_source, utm_medium, and utm_campaign are the canonical three. utm_term is for keyword tracking (most useful for paid search where Google Ads also provides keyword data); utm_content is for creative variant tracking. Many teams skip both.
Can UTM parameters affect SEO?
No directly — search engines treat UTM-tagged URLs as the same canonical URL. But UTM parameters add length to the URL, which is occasionally truncated in shares; they shouldn’t appear in canonical-URL tags or in sitemaps.
What’s the difference between Google Ads’ auto-tagging and manual UTMs?
Google Ads auto-tagging uses a gclid parameter that GA4 can ingest natively for full Google Ads attribution. Manual UTMs replace this with utm_source=google&utm_medium=cpc. You can use either, but not both — auto-tagging is usually preferred for Google Ads because it provides richer data.
Do UTM parameters work for non-Google analytics?
Yes — every analytics platform reads UTM parameters. Google Analytics, Adobe Analytics, Mixpanel, Amplitude, Segment, Heap all parse them. The convention is universal.
Are UTM parameters case-sensitive in all analytics tools?
Most are. GA4, Adobe Analytics, and most modern platforms treat values as case-sensitive. A few legacy tools normalise case but you can’t rely on it. Always use consistent casing.
Common problems
Problem: Same campaign showing as multiple sources in GA4.
Casing or word-separator inconsistency. Google vs google, spring-sale vs spring_sale, Spring Sale vs spring-sale — GA4 treats them as different. Decode the actual URLs to find the variant; standardise going forward.
Problem: Traffic that should be paid showing up as direct.
Either UTM parameters were stripped (some platforms strip query parameters in shares), the user navigated away and back (re-entering through direct), or the analytics session timed out and the second visit lost the original referrer. Auto-tagging via gclid is more robust than UTM parameters for paid Google traffic.
Problem: UTM-tagged URLs being canonicalised to non-UTM versions.
That’s correct behaviour for SEO — search engines treat the UTM-tagged and base URL as the same page. The UTM parameters still register in analytics; canonicalisation is purely a search-indexing concern. If you’re worried about it, ensure the base URL has a self-referential canonical and the UTM-tagged URL inherits it.
Problem: UTM-tagged links from emails are being flagged as suspicious.
Some email security tools flag long UTM-tagged URLs as suspicious. Use shorter campaign names, or use a URL shortener (Bitly, etc.) that produces a clean tracking URL. The shortened URL still passes UTM parameters through to the destination.
Problem: Internal navigation accidentally tagged.
Common when a homepage banner is built with the same URL builder used for external campaigns. Rebuild internal links without UTM parameters; UTMs overwrite session attribution and break source reporting.
Tips
- Use platform templates to enforce consistent source/medium per channel. Manual entry leads to drift.
- Pick lowercase + hyphens, document it, and apply it everywhere. The convention itself doesn’t matter; consistency does.
- Don’t UTM-tag internal links. They overwrite original session attribution.
- For Google Ads, prefer auto-tagging (
gclid) over manual UTMs. Auto-tagging provides richer data and works through redirect chains better. - The decoder is useful for debugging: when attribution looks weird, decode the actual URLs being clicked rather than the URLs you intended to publish.
Related tools in this suite
There’s no direct sibling tool — UTM building is a single, focused utility. The closest pairing is the Ad Budget Calculator, since UTM tracking is what reveals the conversion rate that the budget calculator uses as input.
What this looks like at scale
For a single campaign, the builder is fine. For an organisation running many campaigns across many channels with multiple stakeholders, UTM tagging should be governed — a documented convention, a shared builder (this tool can serve), and audit reports identifying drift. The systems-level approach is to build the UTM convention into the campaign-launch workflow so it can’t drift.
Take it further
If your analytics show messy attribution due to UTM inconsistency over time, the cleanup is usually structural — a documented convention plus tools that enforce it. Start a conversation about what governance and remediation look like.