Tools
UTM Link Builder
Build trackable UTM links for your ads, newsletters and social posts in seconds: ready-made channel templates, automatic naming cleanup, a GA4 channel preview and one-click copy. Free, no sign-up.
Fields marked * are required. Source names where the click comes from (google, instagram), medium names the channel type (cpc, email). Dynamic parameters such as {keyword} or {{campaign.name}} stay intact.
Result
Enter your website URL plus source, medium and campaign; the link appears here.
How to use the UTM Link Builder
- Paste the page address
Type the full address of the landing page into Website URL. If you leave out https://, the tool adds it; any existing parameters such as ?ref= stay exactly as they are.
- Pick a template or type the source
Click a template such as Google Ads or Newsletter. The source and medium fields then fill themselves; for any other channel, type both by hand.
- Name the campaign
Campaign is required, while term, content and campaign ID are optional. Use content to tell apart two ads or two buttons in one campaign.
- Choose the value format
Dashes and underscores both lowercase letters, strip accents and turn spaces into one separator. As typed leaves your text untouched.
- Check the channel, then copy
The predicted GA4 channel card shows where the tag will land. Then copy the UTM link and open it with Test. If an ad platform only wants a suffix, use Parameters only.
How does the tool build a UTM link?
The tool builds the link in a fixed order: address, parameters, then any #fragment. These rules describe what it actually does.
Website URL + ? + utm_source=… & utm_medium=… & utm_campaign=… (+ utm_id, utm_term, utm_content) + #fragmentExisting parameters stay; the tool appends UTMs with & and swaps an older utm_ value of the same name for the new oneWinter Promo → winter-promo (lowercase, é → e, space → dash)October Newsletter → october_newsletter (same rules, underscore as separator)The tool encodes every character except letters, digits and safe marks such as - _ . ~ so a space becomes %20 and & becomes %26{keyword}, {{campaign.name}} and __CAMPAIGN_NAME__ stay exactly as typed, with no encodingThe channel prediction follows the default channel group rules and the source list that Google publishes. If your property uses a custom channel group, your reports can show a different result.
Sample UTM links and their GA4 channels
These rows are examples; enter the same values in the tool and you get exactly the same parameter string and channel.
| Scenario | Input (source / medium / campaign) | Format | Parameter string | Predicted GA4 channel |
|---|---|---|---|---|
| Google Ads search ad | google / cpc / Summer Sale | Dashes | utm_source=google&utm_medium=cpc&utm_campaign=summer-sale | Paid Search |
| Instagram story ad | instagram / paid_social / Winter Promo | Dashes | utm_source=instagram&utm_medium=paid_social&utm_campaign=winter-promo | Paid Social |
| Monthly newsletter | newsletter / email / October Newsletter | Underscores | utm_source=newsletter&utm_medium=email&utm_campaign=october_newsletter | |
| WhatsApp share | whatsapp / messaging / Free Delivery | Dashes | utm_source=whatsapp&utm_medium=messaging&utm_campaign=free-delivery | Organic Social |
| QR code on a flyer | qr / print / Trade Fair | Dashes | utm_source=qr&utm_medium=print&utm_campaign=trade-fair | Unassigned |
| Meta dynamic parameter | facebook / paid_social / {{campaign.name}} | Dashes | utm_source=facebook&utm_medium=paid_social&utm_campaign={{campaign.name}} | Paid Social |
The QR row lands in Unassigned on purpose: print matches none of GA4's rules. The QR section below explains how I deal with that.
GA4 default channel rules for tagged links
For manually tagged traffic, GA4 compares source and medium with these rules; the first rule that fits decides the channel.
| GA4 channel | Rule (summary) | Sample source / medium |
|---|---|---|
| Paid Search | Source is on the search engine list and medium matches cpc, ppc, retargeting or starts with paid | google / cpc |
| Paid Social | Source is on the social network list and medium matches the same paid pattern | instagram / paid_social |
| Paid Video | Source is on the video site list and medium matches the paid pattern | youtube / cpc |
| Display | Medium is display, banner, expandable, interstitial or cpm | news-site / banner |
| Paid Other | Medium matches the paid pattern but the source is on no list | partner / cpc |
| Organic Social | Source is on the social network list, or medium is social, social-network, social-media or sm | facebook / social |
| Source or medium is email, e-mail, e_mail or e mail | newsletter / email | |
| Referral | Medium is referral, app or link | partner-blog / referral |
| Affiliates | Medium is affiliate | partner / affiliate |
| SMS | Source or medium is sms | sms / sms |
| Unassigned | No rule matches | qr / print |
Source: Google Analytics Help, default channel group. Google updates the rules and the list now and then, so check the current definition before a report that matters.
What is a UTM builder and what does it do?
A UTM builder is a tool that adds tags such as utm_source, utm_medium and utm_campaign to a page address. Those tags tell Google Analytics 4 which source, channel type and campaign sent the click. Without them, a visitor from an ad or a newsletter often ends up as direct or generic referral traffic.
This tool does four jobs:
- Adding parameters: it keeps the parameters already in the address and swaps an older utm_ value for the new one.
- Formatting: values follow the format you pick, so one channel stays on one row in reports.
- Channel check: the card predicts which GA4 default channel the tag falls into.
- Macros: dynamic parameters of ad platforms stay intact.
Tagging is the first thing my team and I audit in a client account. Even in Google Ads management work, we clean up the tags first. After all, you cannot steer the budget of a campaign whose tags are wrong. The tool runs entirely in your browser, so the address you type never reaches a server.
What should you put in each UTM parameter?
Google asks you to use utm_source, utm_medium and utm_campaign together on every link. The others are optional; however, used well they make a report much clearer.
- Source (utm_source): the place that sends the click, such as google, instagram or newsletter.
- Medium (utm_medium): the type of channel, such as cpc, paid_social, email or social. So write the type here, not the platform.
- Campaign (utm_campaign): the product, offer or period, for example winter-promo.
- Campaign ID (utm_id): a short code. When you import cost data into GA4, this code joins both sides.
- Term (utm_term): usually the paid keyword. In Google Ads, {keyword} fills it in at click time.
- Content (utm_content): the creative difference inside one campaign. For example, the top and bottom buttons in a newsletter.
GA4 also reads utm_source_platform, utm_creative_format and utm_marketing_tactic. I rarely need them, so they are not in the form. If you do, add them by hand after an & at the end of the link. Any parameter you leave empty shows up as (not set), so a gap never disappears silently. The full list sits on Google's URL builders page.
Which GA4 channel will your tagged traffic land in?
GA4 checks every manually tagged session against the rules of the default channel group. The first rule that fits decides the channel. The rules look at two things: whether the source is on Google's lists of search, social, video and shopping sites, and which pattern the medium matches. For example, instagram is on the social list. With paid_social as medium the session becomes Paid Social; with social it becomes Organic Social.
Three traps come up again and again in the accounts I review:
- Platform name as medium. instagram / story lands in Organic Social, even though you paid for the ad.
- Unknown medium. A tag like qr / print matches no rule, so it falls into Unassigned.
- Shop in the campaign name. The shopping rule also looks for shop and shopping in campaign names. As a result, a newsletter called shop-week can end up in Organic Shopping instead of Email.
The predicted GA4 channel card in the tool uses these rules and Google's source list. It also warns you when source and medium point to different channels. You can read every rule on the default channel group page. If your property runs a custom channel group, that group decides instead.
How do you set up a naming convention with a UTM builder?
GA4 treats values as case sensitive, so Facebook and facebook become two separate sources. The real work, then, is not producing a link but producing the same name every time. A UTM builder handles half of that discipline for you. Its dashes and underscores formats lowercase letters, strip accents and turn spaces into one separator.
The other half is a team decision. With clients, I put these short rules in writing:
- Pick one separator and stick to it, either dashes or underscores.
- Fix the source list once: facebook or fb, decide and move on.
- Limit the medium to channel types: cpc, paid_social, email, social, sms, referral.
- Build campaign names in the same order, for example product, offer and month.
- Log every link in a shared sheet, together with who published it and when.
As a result, that sheet saves real time at the end of the month. I show how I read channel and campaign rows in how to read a digital marketing report.
Do you need UTMs for Google Ads and Meta ads?
With auto-tagging switched on in Google Ads, GA4 does not need UTMs. According to Google, GA4 prefers the auto-tagged values when both kinds of tags arrive together. Still, there are two good reasons to add UTMs. First, your CRM and other analytics tools cannot read gclid. Second, GA4 still reports utm_term and utm_content in the manual term and manual ad content dimensions.
Ad platforms usually want the parameter string, not the full link:
- Google Ads: you type a string such as utm_source=google&utm_medium=cpc into the final URL suffix. ValueTrack parameters like {keyword} or {campaignid} fill in at click time.
- Meta: the URL parameters field at ad level accepts dynamic values such as {{campaign.name}} and {{ad.name}}.
In that case, press Parameters only in the tool. It does not encode the curly braces, and it keeps uppercase macros like __CAMPAIGN_NAME__ as they are. Once the tags are live, check whether the campaign actually makes money with the ROAS calculator.
Why does a tagged link show up as direct or (not set)?
Sometimes the link is tagged correctly, yet reports show direct / (none) or (not set). In that case the problem usually lies in the link's journey. Google itself notes that redirects can strip UTM parameters, for example from one site to another or from https to http. Likewise, shorteners such as bit.ly can drop referral details.
My checklist runs in this order:
- Open the link with Test and confirm that the utm_ parameters are still in the address bar.
- If there is a redirect, trace the chain with the redirect checker. Check that each hop carries the parameters.
- Make sure none of the required three are missing, because a missing field comes back as (not set).
- Never put UTMs on your own menu or banners. Otherwise an internal click replaces the real source and blurs the report.
Also note that Google counts untagged links in PDF and Word files as direct, so tag your brochure links too. You can even pass UTM values into your CRM to see which campaign brought each lead. I describe that setup in website CRM integration for lead tracking.
How do you use UTMs with QR codes, WhatsApp and short links?
Offline and messaging channels are where untagged links lose the most data. So build the tagged link here first, then turn it into whatever carries it.
- QR code: convert the tagged link with the QR code generator. Long links make the code denser, so skip parameters you do not need.
- WhatsApp: tag the link you place in the message. Because whatsapp is on GA4's social list, the session becomes Organic Social. For links that open a chat, the WhatsApp link generator does a separate job.
- Short link: feed the shortener the long, tagged link. Then open the short link once before publishing and confirm the parameters arrive.
For print work, a medium like print or offline lands in Unassigned. I do not treat that as a problem, because the campaign name still comes through. That said, you may want a separate row. In that case, set up a custom channel group in GA4 and map the print medium to it. For growing the social side of that traffic, see how to drive website traffic from social media.
Common mistakes when building UTM links
- ✕MistakeGiving one channel a different name each time: Facebook, facebook, fb.✓Do this insteadKeep a naming sheet and always use one format in the tool. Values then come out lowercase and spelled the same way.
- ✕MistakeUsing a platform name as medium: instagram / instagram or instagram / story.✓Do this insteadWrite the channel type instead: paid_social or cpc for ads, social for organic posts. If the card shows Unassigned, change the medium.
- ✕MistakeAdding UTMs to your own menu, banners or internal links.✓Do this insteadUse UTMs only on clicks that come from outside; measure on-site clicks with GA4 events.
- ✕MistakeExpecting UTMs to change Google Ads reporting while auto-tagging is on.✓Do this insteadGA4 uses the auto-tagged values when both arrive; add UTMs for your CRM and other tools.
- ✕MistakePublishing a short or redirected link without testing it.✓Do this insteadOpen the link and check the utm_ parameters in the address bar. For a redirect chain, check every hop with the redirect checker.
- ✕MistakeNaming a newsletter campaign with shop when it is not a shopping campaign.✓Do this insteadThe shopping rule can pull that tag into a shopping channel; if the card shows Organic Shopping, rename the campaign.
- Google Analytics Help: URL builders, collect campaign data with custom URLs
- Google Analytics Help: Default channel group
- Google Analytics Help: Traffic-source dimensions, manual tagging and auto-tagging
- Google Analytics Help: Understand (direct) / (none) traffic
- Google Analytics Help: Best practices to avoid sending PII
Frequently Asked Questions
Links tagged properly but ad returns unclear?
Clean UTM data is the measurement side; scaling the campaigns that win is another craft. Get a quote for Google Ads management: share a short description of your ad accounts in the quote form, and we will send a written scope and quote.




