To generate a UTM link means to append the five traditional UTM parameters — utm_source, utm_medium, utm_campaign, utm_term, and utm_content — to a complete destination URL so analytics can attribute traffic to a specific campaign placement. The minimum viable campaign link is a destination address with utm_source, utm_medium, and utm_campaign appended, because Google Analytics describes those three as the core manual-tagging fields and the UTM Link Builder treats them as required inputs. Term and content are optional and are appended only when they add a value your reporting team recognizes, otherwise the generated URL omits them so the same campaign does not show up as a separate row in a report because of an empty cell. Generation happens entirely in the browser, the destination URL never leaves the device, and the output is a normal web URL that can be pasted into an ad, a newsletter, a social post, a QR code, or a partner placement.

how to generate utm link
How to Generate a UTM Link From a Destination URL

When you generate a UTM link, you are adding a structured suffix to an ordinary web address. Five names exist by convention, and each carries a different role in your reports. The required three are the ones Google Analytics treats as the core manual-tagging fields for campaign attribution; utm_term and utm_content exist for finer-grained reporting and can be omitted when the campaign does not need that granularity.

ParameterRequired?What it identifies
utm_sourceRequiredThe specific site, publisher, or platform sending the click, for example google, newsletter, or partner_site
utm_mediumRequiredThe marketing channel, for example cpc, email, social, or qr
utm_campaignRequiredThe campaign name, promotion, or strategy, for example spring_launch or june_promo
utm_termOptionalPaid keyword or audience segment, used mostly for paid search
utm_contentOptionalA specific creative, button, or version used to compare placements in the same campaign

A generated UTM link does not need to include all five. A campaign link with only utm_source, utm_medium, and utm_campaign is fully usable, and the builder omits optional fields rather than emitting empty values, which keeps the URL short and reduces accidental reporting variations caused by stray blank cells.

Inputs the Builder Accepts and Rejects

Before you click generate, the URL you paste must be a complete web address. The builder parses the input with the browser URL API and accepts only absolute http or https destinations that do not embed a username or password. A few common inputs look valid but fall outside that scope:

  • Relative paths such as /pricing or ../landing are rejected because they have no host. A generated campaign link needs a full web address so the result can be opened from any platform.
  • mailto:, tel:, ftp:, file:, and other non-web schemes are rejected because the builder is scoped to web campaign destinations and cannot construct a meaningful campaign URL on top of those schemes.
  • Signed or pre-signed URLs that include a signature query parameter are explicitly out of scope, because the browser URL API normalizes query encoding in a way that can invalidate a signature. Start from an ordinary destination URL and sign only after the UTM parameters are in place.
  • URLs with embedded credentials in the form https://user:[email protected]/ are rejected because shipping credentials through a URL builder is never appropriate and the parser would refuse to normalize them.

A safe starting point looks like https://example.com/pricing or https://blog.example.com/landing/spring-launch — a scheme, a host, a path, and whatever existing query string and fragment the destination already uses.

  1. Paste the complete http or https destination URL into the address field. This is the page that will load when the link is clicked.
  2. Enter the campaign source, medium, and name. Source identifies the platform, medium identifies the channel, and name identifies the campaign — these three are required and the builder will not produce a result without them.
  3. Add utm_term or utm_content only when those values match a reporting convention you actually use. Leave them blank otherwise so the generated URL stays short and the field does not appear as an empty cell.
  4. Build the URL. The builder parses your destination, removes any pre-existing copies of the five UTM keys it manages, keeps unrelated parameters and the fragment, then appends your trimmed values with standard query encoding.
  5. Review the preserved parameters and fragment in the output, then copy the result. Verify the destination path, any retained query parameters such as ref or gclid, and the trailing fragment are still where you expect them before publishing the link.

How Existing Parameters and Fragments Survive Generation

One of the easiest ways to break a campaign link is to lose an unrelated parameter the destination page actually depends on. A landing page URL you pull from a CMS often carries parameters the page or analytics layer uses — for example, ref=homepage to mark the originating layout, gclid as a click identifier from Google Ads, a language switcher key, or a content variant the page renders. When the builder generates a UTM link from such an address, it only deletes prior copies of the five UTM keys it owns and leaves everything else intact. If you want a closer walkthrough of that preservation behavior, see how to create UTM links without breaking existing tags.

  • The scheme, host, and path are preserved exactly as pasted.
  • Unrelated query parameters such as ref, gclid, lang, or variant stay alongside the new utm_ values in their original order.
  • Any #fragment (the part after the hash) is preserved at the end of the URL, so a generated link still jumps to the right anchor on the destination page.

That means you can paste an existing campaign link, replace only the five managed values, and produce a refreshed link without rebuilding the destination address by hand. It also prevents the duplicate utm_source problem that shows up when you stack new utm_ values on top of a URL that already carried an older utm_source, because the builder strips the older copies first and then appends the new ones.

URL Encoding and Output Format

A generated UTM link is an ordinary web URL with a query string, so it follows ordinary URL query encoding rules. Spaces in a campaign term become %20, and characters that would otherwise break a parser get percent-encoded by the browser URL API before they land in the output. You will see this most often with campaign names that include a space — "summer sale" becomes summer%20sale in the output — and with terms that include a plus sign, a slash, or another reserved character. The encoding is applied automatically by the parser and not by the form, so the result is what most analytics tools expect when they read utm_ values.

The output keeps the campaign parameters at the end of the query string, after any unrelated parameters, so the values you supplied remain easy to read in the output. If you need a shorter public-facing address for print or QR use, the builder does not shorten the URL itself. Shorten only after you have verified, in your own browser, that the chosen redirect service preserves the full query string — a redirect that strips parameters will silently remove every utm_ value you just added.

The values you type into the form become part of a URL that may be stored in browser history, appear in referral logs, be forwarded to analytics systems, and end up in screenshots or chat messages. That has two practical consequences for the way you generate campaign links.

First, use labels that describe the placement, not the person. A campaign term should read like newsletter or header_cta, not like [email protected] or +15551234567. Query strings travel into systems that are not under your control, so personally identifying information does not belong in any UTM field.

Second, keep labels consistent across the team. A team might decide that source uses the platform name in lowercase, medium uses the channel in lowercase, and campaign uses a snake_case promotion slug. The builder preserves the text you supply after trimming accidental outer spaces and does not invent a taxonomy, change case, or rewrite your values. Document a short naming policy, generate links against it, and keep a simple campaign record outside the link itself so the same campaign can be recreated later without guessing. If you need to update a campaign, paste the existing link, replace the five managed values, and unrelated parameters will remain in place.

What the Builder Does Not Do

Because the builder constructs a URL and not an analytics test, it is worth being explicit about what it does not verify. It does not check that a property exists in Google Analytics, that auto-tagging is active, that consent banners are configured, that a redirect preserves the query string, that a destination page loads, or that future traffic will appear in a particular report. A generated link is a string, not a guarantee.

Two practical habits close that gap. Test an important campaign link by opening it in your own browser and checking that the destination page loads with the expected utm_ values in the address bar, then verify in your reporting tool that the click is attributed to the campaign row you intended. Only then publish, send, or print the link. The UTM Link Builder keeps the construction step quick, private, and explicit, but the verification step still belongs to you.

Related reading: Bulk URL Generator on Mac: Run It in Safari or Chrome.