Deterministic, local checks

UTM Checker

Paste a campaign URL. Find broken or inconsistent tags, understand each problem, and build a cleaner URL without sending campaign data anywhere.

Check a campaign URL

Checked locally in this browser. The URL and tag values are excluded from analytics events.

Privacy-safe repair

Build a corrected URL

Everything stays in this browser. Review the detected values, edit anything that is wrong, and create one canonical set of UTM tags. Existing non-UTM parameters and fragments stay intact.

Corrected link appears here

Run the check first, review the fields, then build the URL.

Rule set

What this UTM checker validates

  • Required tags: nonblank utm_source, utm_medium, and utm_campaign. A corrected tag must retain at least one ASCII letter or number after normalization.
  • Duplicate keys: repeated UTM keys, including casing variants such as UTM_Source.
  • Casing and separators: uppercase values, spaces, or underscores that can split campaign reporting.
  • Blank values: UTM keys that exist but contain no usable value.
  • Encoding: malformed percent escapes or invalid UTF-8 in any query key or UTM value, plus values that look double encoded.
  • Source/medium logic: a small deterministic set of combinations that deserve a human check.

Worked example

Worked UTM check example

Suppose an ad link arrives with duplicate source keys, mixed casing, underscores, and a double-encoded campaign value:

https://example.com/offer?ref=partner&UTM_Source=LinkedIn&utm_source=linkedin-ads&utm_medium=Paid_Social&utm_campaign=q3%2520launch
  1. The checker flags the duplicate and noncanonical UTM_Source key.
  2. It flags uppercase letters and underscores in Paid_Social.
  3. It flags %2520 because that usually represents a percent sign encoded twice.
  4. The corrected workflow keeps ref=partner, removes every old UTM variant, and creates one clean set of tags.

Corrected shape: https://example.com/offer?ref=partner&utm_source=linkedin-ads&utm_medium=paid-social&utm_campaign=q3-launch

Pre-publish review

Common UTM mistakes

Repeating the same key

Appending a second set of tags to an already-tagged URL creates ambiguous reporting. Replace the old set instead.

Treating case as cosmetic

LinkedIn and linkedin can become separate values in reports. Pick one convention and enforce it.

Leaving keys blank

utm_campaign= is not useful campaign data. Add the intended value or remove the empty optional key.

Encoding the whole URL twice

Double encoding turns readable separators into strings such as %2520. Encode parameter values once.

Swapping source and medium

Source names where traffic came from; medium names the channel. For example, google / cpc is coherent while google / email deserves review.

Deleting unrelated parameters

Product, partner, or routing parameters may still matter. The corrected workflow preserves non-UTM query parameters.

FAQ

UTM Checker FAQ

Does the UTM checker send or store my URL?

No. The checker and corrected URL builder run locally in your browser. UTM Tools does not send the campaign URL or its values to a server or analytics event.

What happens when a URL has duplicate UTM parameters?

Different tools may select different values or preserve more than one. The checker flags duplicates, and the corrected URL workflow replaces every casing variant with one canonical key and value.

Should UTM values use lowercase letters and hyphens?

A consistent convention prevents one campaign from splitting into separate analytics rows. This checker recommends lowercase values with hyphens, while still showing the original values for review.

Can the checker fix a campaign URL?

Yes. Review or edit the detected fields, then build a corrected URL. Unrelated query parameters and the URL fragment are preserved; UTM keys are canonicalized and values are normalized locally.

Continue the campaign workflow

Define consistent names, build one GA4 campaign URL, scale it in bulk, then check the final link before publishing.

Build a GA4 campaign URL · Define campaign names · Scale in bulk · Check the result