UTM checker: how to verify UTM links in GA4

No special tool needed: read the URL, click it, and confirm the tags in Google Analytics 4. Includes a fix table for UTM tags that do not show up.

A UTM checker is any method that confirms a tagged link is written correctly and that Google Analytics 4 (GA4) records its tags. You can do it by hand in three steps: read the URL, click it and read the final address, then find your visit in a GA4 report.

This guide shows each step, explains why tags go missing, and ends with a checklist to run before every publish. It needs no extra software. It does assume your site already has GA4 installed.

What does a UTM checker do, and do you need a tool?

A UTM checker answers two separate questions. First, is the link built correctly? Second, did the tags survive the trip to your page and into your reports? A tool can answer the first by reading the URL. Only your own clicks and your own GA4 property can answer the second.

That is why the manual method below is worth learning even if you also use a tool. The weak points are the redirect chain and the report, and a link validator cannot see either.

Diagram: four stages from the tagged link, through a short link or redirect and the final page, to Google Analytics 4 reports, with the things that can go wrong at each stage listed underneath
The path a tag travels, and where it can be lost or misread. The manual check below covers every stage.

What does a valid tagged URL look like?

A valid tagged URL is your page address, then a question mark, then name=value pairs joined by ampersands. Google's own example, in its page on collecting campaign data with custom URLs, is https://www.example.com/?utm_source=summer-mailer&utm_medium=email&utm_campaign=summer-sale. A tagged social link has the same shape:

https://example.com/sale?utm_source=instagram&utm_medium=social&utm_campaign=spring-sale

Google says the parameters can be added in any order. Everything after the first ? is the query string, and each pair is separated from the next by &.

Which UTM parameters are required?

Google's documentation says that when you add parameters to a URL, you should always use utm_source, utm_medium and utm_campaign. It adds that if you set one UTM parameter, it strongly recommends setting all relevant ones, especially those three plus utm_id and utm_source_platform, and that missing parameters lead to "(not set)" values in reporting. The page does not use the word "required" for any single parameter, so treat the first three as the working minimum.

The same page lists utm_term (paid keyword) and utm_content (to tell apart creative or links that share a campaign) as further parameters. For naming rules on what to put in each value, see our guide to UTM naming conventions.

How are spaces and special characters handled?

Google's page does not say how to encode spaces or special characters in UTM values, so there is no Google rule to quote. The URL standard, RFC 3986, defines & and = among its reserved characters and defines percent-encoding as a % followed by two hexadecimal digits. In practice, a literal & inside a value would be read as the start of the next parameter unless it is encoded as %26.

The simplest rule that avoids all of this: use lowercase letters, digits, hyphens and underscores in values, and do not put spaces in them. Write spring-sale, not Spring Sale.

What does a # do to your tags?

RFC 3986 says the query component is "terminated by a number sign" or the end of the URI, so the tags must come before any #. MDN's page on the URI fragment adds that the fragment is not sent to the server when the URI is requested. Google's documentation does not say how GA4 treats tags placed after a #, so do not rely on it.

Right: https://example.com/sale?utm_source=instagram&utm_medium=social#pricing
        Wrong: https://example.com/sale#pricing?utm_source=instagram&utm_medium=social

To check a tagged link, click it as a visitor would and read the address bar once the page has loaded. The final URL should still contain every parameter you wrote. If any are missing, something removed them: a redirect, the short link, or the destination page. A page script can also tidy the address bar after Analytics has read the tags (our reasoning, not a Google statement), so check page_location in DebugView before you conclude the tags never arrived.

  1. Open a private window so no saved session or extension changes the result.
  2. Paste the exact link you plan to publish, not a hand-edited copy, and press Enter.
  3. Wait for the page to finish loading, then read the full address in the address bar.
  4. Compare it with the original: every utm_ pair should be there, with the same spelling and case.
  5. Repeat from the real place, such as the bio link or the post itself, because that is the link your audience will use.

Why do shorteners and redirects drop tags?

A short link works by redirecting. MDN's page on HTTP redirections says a redirect response carries a Location header holding the URL to redirect to, and that browsers immediately load that new URL. The URL you land on is whatever the redirect names, so the tags survive only if the destination stored behind the short link already contains them.

That gives a firm rule: put the UTM tags on the destination before you shorten it. Whether a given shortener also forwards extra parameters added to the short URL varies by tool, so test it. Don't assume.

Your own pages can drop tags too. Google's Ads troubleshooting page, Clicks and Sessions Discrepancy for Google Ads and Google Analytics: Troubleshoot, says redirects in landing pages can keep the Analytics code from launching and identifying the traffic correctly. It advises appending parameters such as ?utm_source=test to the landing page URL, checking that they persist after the redirect, and making sure the Google tag fires before any redirects occur. That page is written for Google Ads, but the test applies to any tagged link.

If you are comfortable in a terminal, curl -sIL followed by the URL prints the response headers of each hop, including each Location. Some servers answer these header-only requests differently from a browser, so treat the browser result as the final word.

How do I find UTM source in GA4?

You find a UTM source in GA4 in the Traffic acquisition report, under the Session source / medium dimension. Right after a click, the Realtime report shows that a visit arrived within minutes, and DebugView shows the events and their parameters within seconds. Here is each one, using the names Google's help pages use.

Realtime: did the visit arrive?

Google's help page says to open Reports and then Realtime, and that the report shows user activity from the last 30 minutes. The card for traffic sources is called "Active users by first user source, medium, source platform, or campaign".

Note the word "first user". Google's page says the Realtime report shows user-scoped dimensions, and its page on scopes of traffic-source dimensions says user-scoped values stay constant as a user returns. A browser that has visited your site before may therefore show its original source, not your new tag. A private window has the opposite problem: Google says the "Active users by First user source" card shows information only for established users, those that have already gone through normal processing, so a brand-new visitor may be counted as active but not appear in that card yet. Treat Realtime as proof that the visit arrived, not as proof that the tags were read. Check the tags in DebugView now and in Traffic acquisition later. Google also says Realtime performs "limited attribution analysis" to keep reporting responsive.

DebugView: see what GA4 received

Google's DebugView page gives the path Admin, then Data display, then DebugView. You must turn on debug mode first, for example through Google's Tag Assistant, and then you can click an event to see its parameters. Open the tagged link itself with debug mode on, so the page_view you inspect is the one that carries your tags. We did not test whether Tag Assistant keeps UTM tags on the address you enter, so confirm in page_location.

The page_view event includes a page_location parameter, which Google's documentation describes as the page URL. If your tags appear there, the page sent them. If they do not, the problem is upstream of GA4. Google's developer guide calls DebugView the best way to confirm that events and parameters are sent correctly.

Traffic acquisition: the report that counts

Google's page on the Traffic acquisition report gives the path: sign in, choose Reports on the left menu, then Acquisition, then Traffic acquisition. The default dimension is "Session default channel grouping". Change the report's primary dimension to Session source / medium to see rows such as instagram / social. Google's page does not describe this control, so look for the dimension selector above the first column. For the full reading steps, see our guide on how to see who clicked your Instagram link.

Give it time. Google's data freshness page lists typical processing of 2 to 6 hours for standard intraday data and says processing can take 24 to 48 hours. It states these are not guaranteed timelines.

One more detail. Google says UTM parameters are omitted from the "Landing page + query string" dimension and are populated in the Page location dimension. If you want to see the full tagged URL in a report, use Page location.

Why don't my UTM tags show in GA4? Symptoms, causes and fixes

When tags do not show up, match what you see to the table below, then run the click test again after each fix. Causes marked with a source come from that page; the rest follow from the URL rules above.

SymptomLikely causeFix
Click-tested URL has no utm_ parametersA redirect or shortener dropped the query string, or the destination was saved without tagsTag the destination, re-create the short link, and repeat the click test
Tags appear in the URL but not in GA4The Google tag did not fire, or fired after a redirect (Google's Ads troubleshooting page)Confirm in DebugView that page_view arrives with the tagged page_location; fire the tag before redirects
Visit shows as DirectGoogle says a session is direct when no information about the referral source is available, which fits tags lost on the wayClick-test the final URL and fix the step that removes the tags
Source or medium shows "(not set)"Google lists incomplete or incorrect parameters, or a missing session_start event, as causesSet source, medium and campaign; load the Google tag on the "Initialization - All pages" trigger in Tag Manager
Traffic sits under UnassignedGoogle says Unassigned means no channel rule matched the event dataCheck your source and medium against Google's default channel group definitions; a source on Google's social-site list can set the channel on its own
One campaign appears on several rowsValues differ in case, and Google says values are case sensitiveUse lowercase everywhere and fix the old links
Tags missing from "Landing page + query string"Google says UTM parameters are omitted from that dimensionUse the Page location dimension instead
Seen in Realtime, absent from Traffic acquisitionStandard reports can take 24 to 48 hours to processCheck again the next day before changing anything
Tags sit after a # in the URLThe query string ends at the #, and Google does not document this caseMove the tags before the #

The sources for these rows are the Analytics Help pages on what "(not set)" means, campaigns and traffic sources and default channel group definitions, listed again at the end.

Are GA4 UTM parameters case sensitive?

Yes. Google's documentation says parameter values are case sensitive, and gives the example that utm_source=google is different from utm_source=Google. Two spellings of the same source become two rows in your reports, and the totals you wanted in one place are split.

The fix is a habit, not a setting: write every value in lowercase, from a shared list, and reuse it. Our naming conventions guide covers how to build that list.

What are the most common UTM mistakes?

These four are common, and each one is visible in the URL before you publish.

  • Mixed capitalization. Instagram and instagram are different values, as covered above.
  • A missing or empty utm_medium. Google recommends always using source, medium and campaign together. Medium also feeds channel grouping: Google's default channel group definitions list medium values such as social for Organic Social, and traffic that matches no rule is Unassigned.
  • Spaces and symbols in values. They invite encoding mistakes, and they make the value harder to match later.
  • Tagging internal links. Putting UTM tags on links between your own pages is a common habit, and it is sometimes said to start a new session. Google's page "Campaigns and traffic sources" says a new session is not started when Analytics encounters a new campaign or traffic source. It adds that values sent mid-session are tied to the events they were collected with, not to the existing session, and are used for event-based attribution. So an internal tag will not give the session a new source, but it can change what is credited for a key event. Google's pages do not recommend tagging internal links, and we did not test it. Our advice, not Google's: track internal clicks with events instead.

Pre-publish checklist for every tagged link

Copy this list into your publishing notes and tick each line before a link goes live.

[ ] The URL has one "?" before the first utm_ pair and "&" between pairs
        [ ] utm_source, utm_medium and utm_campaign are all present and not empty
        [ ] Every value is lowercase, with hyphens or underscores instead of spaces
        [ ] No "&", "=", "#" or "?" inside any value
        [ ] The tags come before any "#" fragment
        [ ] Values match my naming list exactly (same spelling, same case)
        [ ] Tags are on the destination URL, not added to the short link
        [ ] I clicked the real link in a private window
        [ ] The final address bar still shows every utm_ pair
        [ ] The landing page does not redirect again without keeping the query string
        [ ] After the click: page_location in DebugView has the tags (Realtime only shows that the visit arrived)
        [ ] The next day: the row shows in Traffic acquisition under Session source / medium

What TrackMedia checks, and what it does not

TrackMedia does not have a built-in UTM checker. The method above is manual, and it works the same with or without TrackMedia. What the product does is add tags to the links it tracks and keep them on the destination, which removes some of the mistakes in this guide.

  • Automatic tags on tracked links. When link tracking is on, which is the default, links in clickable fields are swapped for tracked short links, and the destination gets UTM tags from your workspace template. Links are left as written if their domain is excluded, if the network is one where links stay raw (Pinterest, by default) or if the link service does not answer in time. The default template sets utm_source to {network} and utm_medium to social, with no campaign. TrackMedia fills {network} with its internal ID for the account. For most networks that is the plain name (linkedin, x, tiktok), but a LinkedIn company Page writes linkedin-page and Instagram connected without a Facebook Page writes instagram-business, and those appear as separate source rows. If you need one row, write utm_source into the link yourself; TrackMedia never overwrites it. This is how the code works as of October 6, 2026. Crosspost rules have their own optional UTM setting (off by default), which this guide does not cover.
  • Your tags are never overwritten. If a parameter is already in the URL, TrackMedia keeps your value (it rebuilds the query string, so a space written as %20 comes back as +). That includes a typo, so the check above still matters.
  • You can edit the template. The UTM tags settings on the Links page show a preview URL for what a link would get.
  • Hand-made short links get no tags. A link you shorten with "Shorten a link" keeps exactly the URL you pasted. Tag it first.
  • The destination is stored with the tags. Each tracked link has an "Open the destination" button that opens the tagged URL, which makes the click test quick. It opens the destination directly, so it does not replace clicking the short link itself.

The redirect itself is served by TrackRev, TrackMedia's link-tracking service. TrackMedia's own code shows that the tagged destination is what it stores and sends there, but it does not show how the redirect treats parameters added to the short link. That is one more reason to tag the destination. For the product side, see how publishing works and how click analytics work.

What to do next

Take your next link, run the checklist, and read the result in Traffic acquisition the following day. When you want tagging and click counts handled for every post, start for free with TrackMedia.

How we checked this

We read these pages on October 6, 2026. Menu names and report paths are quoted as these pages state them; Google changes its interface often, so go by the dimension names if a label looks different. We did not run our own GA4 property tests for this guide, and where a source is silent we said so.

The TrackMedia behavior described above comes from our own code, not from a public document: the UTM default template, the rule that existing parameters are never overwritten, the hand-made link behavior and the destination link on the Links page.

Distribute everywhere. Track every click.

See why teams use TrackMedia as the content engine that turns social posts into revenue.

No card required Every network in every plan Cancel in one click