What the UTM checker looks for
| Problem | What happens in analytics |
|---|---|
| Two question marks | The first UTM parameter is glued to the previous value; source is lost and the visit counts as Direct or Referral. |
| UTM tags after the #fragment | Browsers never send the fragment, so none of the tags are recorded. |
| Missing source, medium or campaign | Reports show “(not set)” or the visit falls into the wrong channel. |
| Capital letters or spaces | “Email” and “email” become two rows; spaces show up as %20 or +. |
| Uppercase parameter names | UTM_SOURCE is not recognised at all – only lowercase names work. |
| Duplicate parameters | Usually only the first value is used, which is rarely the one you meant. |
| Double encoding (%2520) | Values were encoded twice and appear with literal %20 in reports. |
| Unrecognised medium | GA4 reports the traffic as “Unassigned”. |
It also lists non-UTM parameters, ad-platform click IDs such as gclid, fbclid and msclkid, and the fragment, so you can see the complete structure of the link at a glance.
Check the URL people actually land on
A perfectly built link can still lose its tags along the way. Redirects that drop the query string, consent banners that reload the page, and link-tracking in email platforms can all strip or rewrite UTM parameters. Click your link, copy the address from the browser bar once the page has loaded, and paste that into the checker as well – if the tags are gone, the problem is in the redirect chain, not the link.