UTM Parameter Builder
Enter the page a link should open and your campaign values, and this builder writes the tagged link: utm_source, utm_medium and utm_campaign plus any optional tags, each percent encoded, with the address's own parameters and #fragment kept in place. Paste a link that is already tagged to read its tags back. Nothing you type is stored or sent anywhere.
The page the link should open, starting with https:// or http://. Paste a link that is already tagged to read its tags.
Where the visit comes from, such as google, newsletter4 or billboard.
The kind of link, such as email, cpc or banner.
The campaign, product, slogan or promo code, such as spring_sale.
A campaign ID, the same one you use when uploading campaign data.
The platform that directs the traffic, such as Search Ads 360.
The paid keyword.
Tells two links or ads of one campaign apart, such as toplink.
Limits: Up to 8 KB of text in each box. Larger input is refused with a message.
Results
- Tags added
- -
- Replaced from the address
- -
- Other parameters kept
- -
- Link length
- - characters
- Checks
- -
| Tag | Value, decoded | What happened |
|---|
| Level | What the check found |
|---|
| Name | Value, decoded |
|---|
| Tag | Suggestion |
|---|
Campaign link
How to use the UTM Parameter Builder
- Paste the page address, starting with https:// or http://, or press Load the example.
- Fill in utm_source, utm_medium and utm_campaign, the three Google says to always use, and any optional tags you need.
- If you know where the link will be posted, enter that site in the settings, so a link between your own pages gets a warning.
- Read the checks, then copy the campaign link into your ad, email or post.
Worked example
A garden shop's spring email links to its seeds page, whose address already has a sort parameter, an old utm_source from last year and a #tomatoes fragment. Press Load the example to tag it for the spring_sale email: the old source is replaced, the fragment stays at the end, and the content value earns two warnings.
https://shop.example.com/seeds/?sort=new&utm_source=old-list#tomatoes
- utm_source (always use)
- newsletter
- utm_medium (always use)
- utm_campaign (always use)
- spring_sale
- utm_content (optional)
- Top Link
- Tags added
- 4
- Replaced from the address
- utm_source
- Other parameters kept
- 1
- Link length
- 134
- Checks
- 2 warnings
- Campaign link
https://shop.example.com/seeds/?sort=new&utm_source=newsletter&utm_medium=email&utm_campaign=spring_sale&utm_content=Top+Link#tomatoes
How to read the results
- Campaign link
- The page address with its own parameters first, then your tags in the order source, medium, campaign, ID, source platform, term and content, then the #fragment. The Copy button next to it copies the whole link.
- Tags added and Replaced from the address
- How many utm_ tags you filled in, and which of them the address already carried with another value. The old value is listed in the table of tags found in the address.
- Other parameters kept
- Parameters of the address that are not one of your tags, kept as the URL parser wrote them, including any utm_ tag whose box you left empty.
- Checks
- A warning points at something Google's pages advise against or that may not come through, such as capital letters or an email address. A note explains a choice the builder made. Only an error, such as a javascript: address, stops the link.
- utm_ tags already in the address
- Every utm_ parameter of the pasted address, decoded, and what happened to it. Leave all the boxes empty to read a tagged link without changing it.
- Naming suggestions
- Examples and advice from Google's pages for each tag you fill in or should fill in and, for the medium you typed, the channel that the GA4 default channel rules would give it. They are suggestions, not rules.
How this tool works and its limitations
The address is read with the browser's URL API, and a note says when it reads the address differently from how it was typed, such as https:example.com without its two slashes, or a host with letters outside ASCII, which it writes in its ASCII form (punycode). Only http and https pass; javascript:, data:, mailto: and other schemes, relative paths and addresses without https:// are refused with a message that says why. The query string is split on & and each pair is kept as written, except a utm_ pair whose tag you are setting again. Your values are trimmed and encoded with the serializer that URLSearchParams uses: letters, digits and * - . _ stay, a space becomes + (as in Google+Ads on Google's page about traffic source dimensions), and every other character becomes UTF-8 percent escapes. The fragment goes back after the query, since text after # is never part of the query string.
The checks follow Google's pages as read on 22 October 2026: case, spaces, encoded characters, values over 100 characters (the limit Google's event collection limits give for an event parameter value), links over 1,000 characters (the page_location limit on that page) and anything shaped like an email address, which Google's PII guide rules out. The channel hint applies the medium rules of the default channel group only, since the rules on the source need Google's own site lists. The check for links between your own pages runs only when you say where the link will be posted, and compares host names with or without www.; a subdomain counts as another site. Nothing you type is stored or sent, and these limits apply:
- The page cannot see your Analytics property, so it cannot tell whether a value matches the names you used before or how your reports will group it.
- The email check looks only for the shape name@domain.tld. Names, phone numbers and customer numbers pass without a warning, so read every value yourself.
- The channel hint reads the medium alone. A source on Google's lists of search, social, shopping or video sites, or a campaign name with shop or cross-network in it, can put the visit in another channel.
- Placeholders that an ad platform fills in, such as {{site_source_name}}, are percent encoded like any other text, which that platform may not expect.
- Parameter names are matched exactly, so utm_Source or UTM_SOURCE in an address is kept and flagged with a warning rather than replaced.
- Each box takes up to 8 KB of text, and more is refused with a message.
Features
- Percent encoding that writes a space as +, the way Google's own example writes Google Ads.
- The address's other query parameters kept as written, and each utm_ tag you set again replaced and named.
- Checks for capital letters, spaces, encoded characters, long values and email addresses.
- A table of the tags an already tagged link carries, plus naming suggestions quoted from Google's pages.
What UTM tags do, and what they do not
UTM tags are labels for your own analytics. Google's help page on collecting campaign data with custom URLs says the values are sent to Analytics when someone clicks the link, and they show up in the Traffic acquisition report. Its manual tagging page maps each tag to a dimension, such as utm_source to Manual source. In short, they tell you which email, ad or post brought a visit, and the link still opens the same page.
Which tags Google Analytics 4 uses
Google lists utm_id, utm_source, utm_medium, utm_campaign, utm_source_platform, utm_term and utm_content, and says you should always use utm_source, utm_medium and utm_campaign. The rest are optional. Two more, utm_creative_format and utm_marketing_tactic, are listed as not currently reported, so this page has no box for them. Values are case sensitive, so utm_source=google and utm_source=Google are different values, and Google suggests lowercase as a standard practice. The default channel group rules, by contrast, ignore case.
Keep tags off links between your own pages
Tag the links that bring people in from outside: ads, emails, social posts and other sites. Google's help describes tags on the destination URLs of referral links and ad campaigns, and its page on campaigns and traffic sources says a campaign met in the middle of a session does not start a new one: its values are tied to the events where they were collected and used for event based attribution. So a tag on a menu link or a banner that points to another of your pages mixes your own label into that data. None of the pages read on 22 October 2026 states this as a single rule; the warning here is this page's reading of them.
Frequently asked questions
Which UTM parameters are required?
Google's help says you should always use utm_source, utm_medium and utm_campaign, and that a missing tag shows as (not set) in reports. It strongly recommends utm_id and utm_source_platform as well. utm_term and utm_content are optional, for paid keywords and for telling creatives apart.
Should a space be written as %20 or +?
Google's GA4 page on traffic source dimensions writes the value Google Ads as Google+Ads, so this builder writes a space as +, the way URLSearchParams does. In a query string both forms decode to a space.
Why did the builder replace a tag that was already in my address?
Two utm_source pairs in one link leave it unclear which value counts. When you enter a value for a tag the address already carries, the old pair is removed, the new one is added, and the results name the replaced tag and the value it held. Tags whose box you leave empty are kept.
Can I put UTM tags on links inside my own website?
Better not. Tags are meant for links that bring visits from outside; on a link between your own pages they mix your own labels into the campaign data. Measure those clicks with an event in Analytics instead.
Do UTM tags work together with Google Ads auto-tagging?
They can be used together. Google says that when both are present, Analytics uses the auto-tagged values for source, medium and the other traffic classification dimensions, while utm_content and utm_term still fill the manual ad content and manual term dimensions.
Is it safe to put a customer's email address in a tag?
No. Google's policies say no personally identifiable information may be sent to Analytics, and its guide names the utm_ parameters. This page warns when a value or the address looks like it holds an email address.
Last updated .