What UTM parameters are
UTM parameters are tags in a link's query string that tell analytics tools where a visit came from, as in ?utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale. The page works the same with or without them; they only label the visit. GA4 reads nine of them from the address of the page a visitor lands on:
| Parameter | What it says | Example |
|---|---|---|
utm_source | Where the visit comes from: a site, a newsletter, an ad platform | google, newsletter |
utm_medium | The kind of link: email, paid search, social | email, cpc |
utm_campaign | The campaign | spring_sale |
utm_id | The campaign's ID, the same as in campaign data you upload | abc.123 |
utm_term | Paid search keywords | ceramic_mugs |
utm_content | Which link or ad of a campaign was clicked | hero_button |
utm_source_platform | The platform that directs the traffic, such as a buying platform | dv360 |
utm_creative_format | The ad's format; GA4 doesn't report it yet | video |
utm_marketing_tactic | The targeting, such as remarketing; GA4 doesn't report it yet | remarketing |
Google says to always set the first three. Without one of them, GA4 reports that value as (not set), so the builder requires them. The others are optional: add utm_id if you upload campaign data, and utm_term or utm_content to tell apart links of one campaign.
How to build a campaign URL
- Enter the page's full address, starting with https://. A query or a # part it already has stays in the link.
- Pick a preset for the channel, or type the source and medium yourself.
- Name the campaign, and add a term or content if you want to tell links apart.
- Copy the campaign URL and use it in the ad, email or post.
- To check a link you already have, open Check a URL and paste it.
Examples
Input
url=https://example.com/pricing?ref=nav#plans
utm_source=newsletter
utm_medium=email
utm_campaign=spring_sale
Output
https://example.com/pricing?ref=nav&utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale#plans
Input
url=https://example.com/
utm_source=LinkedIn
utm_medium=Social
utm_campaign=Spring Sale 2026
Output
https://example.com/?utm_source=linkedin&utm_medium=social&utm_campaign=spring_sale_2026
Input
https://example.com/?utm_source=Newsletter&utm_source=newsletter&utm_campain=spring&utm_content=jane@example.com
Output
utm_source appears 2 times. Keep one, with the value you mean: analytics tools read only one of them. (UTM_DUPLICATE_PARAM)
utm_source has capital letters: "Newsletter". GA4 reports "Newsletter" and "newsletter" as two different source values: use lowercase. (UTM_MIXED_CASE)
utm_campain isn't one of the parameters GA4 reads. Did you mean utm_campaign? (UTM_UNKNOWN_PARAM)
The value of utm_content looks like an email address. Google Analytics doesn't allow personal data, and the whole URL is collected with each page view: remove it. (UTM_PII_SUSPECTED)
The URL has no utm_medium and utm_campaign. Google says to always set utm_source, utm_medium and utm_campaign: GA4 reports a missing one as (not set). (UTM_MISSING_REQUIRED)
Naming that keeps reports readable
GA4 keeps parameter values exactly as written: Email and email become two medium values, and SpringSale and spring_sale two campaigns, each with part of the visits. A naming rule that everyone tagging links follows matters more than the rule itself:
- Write every value in lowercase. The builder does unless you turn off Lowercase; it leaves
utm_idas typed, since it has to match the IDs of your uploaded data. - Use one separator instead of spaces. The builder writes
_by default, or-; Keep leaves spaces, encoded as%20in the link. - Give each platform one source and each kind of channel one medium, such as
facebookandpaid_social, and name campaigns as they are named in the ad platform.
How source and medium decide the GA4 channel
GA4 sorts every visit into a default channel group by its source and medium. Its rules ignore case and can't be edited. The pairs below land in these channels as of November 2026; a pair that matches no rule is Unassigned.
| Channel | What GA4 looks for | Preset |
|---|---|---|
Source or medium email, e-mail, e_mail or e mail | newsletter / email | |
| Organic Social | A social site as the source, or medium social, social-network, social-media, sm, social network or social media | linkedin / social |
| Paid Social | A social site as the source, and a paid medium | facebook / paid_social |
| Paid Search | A search engine as the source, and a paid medium | google / cpc |
| Display | Medium display, banner, expandable, interstitial or cpm | google / display |
| Affiliates | Medium affiliate | partner / affiliate |
| Referral | Medium referral, app or link | |
| Organic Search | A search engine as the source, or medium organic |
A paid medium is one GA4 matches with ^(.*cp.*|ppc|retargeting|paid.*)$: cpc, ppc, retargeting and anything that starts with paid. The lists of search engines and social sites are in Google's default channel group (opens in a new tab) documentation.
Mistakes that break campaign tracking
- Tags on internal links. A UTM tag says where a visit comes from, so it belongs only on links from outside your site. Tagging a link between your own pages makes your site look like a campaign source, and the campaign that brought the visitor loses the credit.
- Tags after the #. The part of a URL after
#is the fragment: browsers don't send it to the server, and tools that read campaign tags from the query string don't see tags there. The builder puts the tags before the #, and the check finds them after it. - Personal data in the link. An email address or a phone number in a parameter ends up in your reports with every page view, and Google Analytics doesn't allow personal data.
- The same parameter twice. Tools read only one value, and it may not be the one you meant.
- Manual tags on Google Ads links. With auto-tagging, Google Ads adds a
gclidto each click, and GA4 takes the source and medium from it rather than fromutm_sourceandutm_medium. - Very long links. GA4 keeps a page location of up to 1,000 characters, counted encoded. Tags at the end of a longer URL may be cut off.
Options
| Option | Values | Default | When to change it |
|---|---|---|---|
| Mode | Build a URL, Check a URL | Build a URL | Build a campaign URL from the form, or check one you paste: its parameters as written and as analytics tools read them, and its problems. |
| Lowercase | On, Off | On | Writes every value in lowercase, except utm_id, which stays as typed. |
| Spaces | As _, As -, Keep (%20) | As _ | What a run of spaces inside a value becomes: an underscore, a hyphen, or a space, encoded as %20. Spaces at the start and the end are always removed. |
Common errors and fixes
| Code | What it means | How to fix it |
|---|---|---|
UTM_Error | The URL has no https:// at the start, is a path such as /pricing, or is another kind of link, like mailto:. | Write the page's full address, starting with https://. |
UTM_Error | utm_source, utm_medium or utm_campaign is empty, or missing from the URL you check. | Set all three: GA4 reports a missing one as (not set). |
UTM_Warning | A UTM parameter appears more than once. When you build a URL, the form's value replaces the one the URL had. | Keep one value per parameter. |
UTM_Warning | A value has capital letters, so it splits from the same value in lowercase in GA4. | Write values in lowercase, everywhere you tag links. |
UTM_Warning | UTM parameters come after the #, often in a link to a page of a single-page app. | Move them before the #. |
UTM_Warning | A value has a space the link doesn't encode, or one at its start or end. | Use _ or - between words, and remove spaces at the ends. |
UTM_Warning | A parameter starts with utm but isn't one GA4 reads, like utm_campain or UTM_SOURCE. | Use the parameter the problem suggests; the names are lowercase. |
UTM_Note | The URL has a click ID an ad platform added, such as gclid or fbclid, often because the link was copied after a click. | Remove it from links you share. |
UTM_Warning | A value looks like an email address or a phone number. | Remove it: Google Analytics doesn't allow personal data. |
UTM_Warning | The URL is longer than the 1,000 characters GA4 keeps of a page location, counted encoded. | Shorten the address or its other parameters. |
EMPTY_Note | The website URL, or the URL to check, is empty. | Enter or paste a URL. |
INPUT_Error | The URL is longer than 8,192 characters, or a value is longer than 500. | Shorten it. |