
June 17, 2025
UTM parameters not working in Google Analytics 4? Here are the solutions
Updated: June 17th, 2025
Nothing is more frustrating than following a tutorial, taking all the steps, and then finding that your tracking is not working as intended. Perhaps you followed my guide to UTM parameters in GA4 and are facing this situation now.
UTM parameters are important for tracking marketing campaigns to ensure that you are putting time and money in the right place, so you want to ensure they are working correctly.
This guide will explore why your UTM parameters may not be working correctly and how to fix these issues!
Note: UTM parameters should only be present in the landing page URL (where GA4 is loaded). Once the user has navigated away from this page, it’s ok for the UTMs to no longer be there (in fact, this is typically how things work).
So, if you came to this article trying to preserve UTMs across multiple pages of the same session, relax. That is unnecessary. GA4 handles this automatically as long as the URL of the first page contains UTMs.
Alright, let’s get back to it!
Table of Contents
Here’s what you will learn in this article
- Reason #1: Server Redirects
- Reason #2: JavaScript Redirects
- Reason #3: Invalid UTM parameter or Typos
- Reason #4: UTMs are removed on tag/tracking code level
- Reason #5: Link with UTM parameters was clicked in the middle of a session
- Reason #6: Missing tracking code on the landing page
- Reason #7: Consent-related issue
- Reason #8: Google Analytics 4 is in the iframe
- Reason #9: Delays in data processing
- Reason #10: Unsupported UTM parameters
- Reason #11: Your website strips the UTM parameters from the URL
- Final Words

Video tutorial
If you prefer video content, here’s a tutorial from my Youtube channel.
Reason #1: Server Redirects
If a visitor lands on your site and then the site automatically redirects a user to another page, such as a login page, the URL may change and lose its UTM parameters. As a result, when the GA4 tag fires, it cannot collect the UTM parameters from the original link the user clicked.
Chrome has an extension called Redirect Path, which will show you any redirects that happen after a specified URL. If there are certain UTM parameters that you are consistently not seeing in your data (that you know exist), you can test out the links that contain these UTM parameters to see if there is a redirect that occurs.
Enter the site you want to check, wait for the redirect, and click the Redirect Path extension to see what is causing the redirect!
You can see two things here: the top section shows the link with the UTMs, and the bottom section shows that the user was eventually redirected to the /password page, and the UTMs are gone. This is a problem because GA4 would have been loaded on the second page (without UTMs).
The only solution is to work with the developers on your team. Explain the issues to them and see if there is a way they can reconfigure things on the server level to avoid the redirect.
Reason #2: JavaScript Redirects
Similar to the above, a redirect caused by the JavaScript code on your site can also strip UTM parameters from the URL. When a user clicks a link with UTM parameters, the JavaScript redirect sends them to another page, removing the UTMs from the URL.
You can, again, use the Redirect Path extension to test this. Enter the site that you want to check, wait for the redirect and click the Redirect Path extension to see what is causing the redirect!
Again, the solution is to work with your developers to have them remove the JavaScript that is causing this issue, or at least the code so that the UTM parameters persist in the URL.
In rare cases, I have seen situations where the redirecting JS code was in the GTM itself. So, if developers do not know where the redirect is coming from, it might be worth checking your Google Tag Manager container.
Reason #3: Invalid UTM parameter or Typos
It may seem minor, but simple errors in your UTM parameters are more common than you might think. If you need a refresher on proper conventions for UTMs, review the guide to UTM parameters in GA4.
Some simple things to keep in mind:
- The UTM parameters must come after the “?” and only one “?” should be in the URL!
- Each parameter needs to be separated by an ampersand “&”!
- Ensure that you have “utm_” in front of each parameter!
- Make sure you’re using the correct value for each parameter, e.g. if you have email coming through in your source, then you probably mixed around your parameter value!
Reason #4: UTMs are removed on tag/tracking code level
We’ve probably all done it: You’re testing something in your GTM container, you forget about it, and it gets published the next time you make a purposeful update. This is a safe place; you can admit it.
It’s possible that, maybe, you set up some tracking a while ago that you forgot about, or you (unintentionally) changed your tracking so that you’re removing UTM parameters.
In GTM, go to the GA4 config tag and double-check that you are not updating the page_location parameter to appear differently than it normally would.
For example, you may have set up a new variable to replace the default page_location to remove any potential PII from the URL and (accidentally) added the UTM parameters as query keys (this will remove the UTM query parameters at the tag level).
Luckily, this is an easy fix; you must remove these parameters from this variable and publish your container (ensure nothing funky is going on anywhere else in the container). Unfortunately, you won’t gain back any of your missing data, but this will ensure that the UTM parameters are sent to GA4 from now on.
If you want to learn more about excluding URL query parameters in GA4 (not UTM parameters), check out this article.
Reason #5: Link with UTM parameters was clicked in the middle of a session
Google focuses on the traffic source at the start of a session, so if a user clicks a link with UTM parameters mid-session, that session will be attributed only to the original session source, medium and campaign. However, because of how GA4 works, if a user returns directly to the site the following day, that session might be credited to the link click.
You may encounter this issue when testing any marketing campaign links if you already have an open session.
But don’t worry—not all hope is lost here. There is a workaround that you can use to see the UTM data even if users clicked on links with UTM parameters mid-session.
Go to the GA4 interface > Explore and create a new report.
Add the Page location as a dimension and any metrics, e.g. Total users or Views. Double-click to add these to the report.
Drag the Page location to the filters and select “contains” and type in “utm_”.
Since GA4 collects a page_view event with every page load (make sure you have added tracking if you have a single-page app), if a user clicks a link containing URL parameters, then the URL will be captured with the event. We can leverage this to view the UTM data.
You can export this data into Google Sheets to clean it up for a better viewing experience.
Reason #6: Missing tracking code on the landing page
This one might sound a bit silly, but it is still worth checking because there’s a possibility that the page the user lands on is missing tracking. Let’s say a user lands on your site through a link containing UTM parameters, but there is no tracking, and then goes to another page where there is tracking. Those UTMs will not be captured.
While I won’t go into the specifics of why this is happening and the possible solutions, some possible explanations include technical issues like the developer not adding tracking code to the page or triggering issues in GTM.
Check out this article for more reasons and solutions: 8 Reasons Why a Tag in Google Tag Manager is Not Firing (or Fires When it Shouldn’t).

Reason #7: Consent-related issue
Imagine this: a user enters your site through a link containing UTMs and a popup shows up on the screen for the user to accept the site’s terms of use. The user ignores the popup, goes to the next page and then accepts the terms of use. Those UTMs are now lost.
When figuring out how to avoid these situations, things can get stocky since we are dealing with legal matters. I am no legal expert, so I advise you to consult with your legal team before pursuing any actions. If you want some ideas for what you discuss with your legal team, consider:
- Persisting the UTM parameters when a user goes to another page, so once they have accepted the terms of use, you can collect the UTM data.
- Reduce the number of ways users can ignore the consent popup. For example, make the cookie popup larger so users feel more inclined to make a selection rather than just ignore it. If the user accepts, then the UTM parameters will likely still be in the URL, so GA4 can collect them.
- You can use Advanced Consent mode to adjust your site’s data collection. For example, if a user denies consent to analytics cookies, Consent mode will enable your site to still collect cookieless pings. If consent is granted, cookies will be set, and data will be sent as usual. But please note that advanced consent mode still works best if consent is given on the landing page (instead of a second or third page).
Reason #8: Google Analytics 4 is in the iframe
Chances are, you have an iframe implemented on a page, and Google Analytics 4 is inside of it. This is common if you use a third-party tool (e.g., a booking form) that offers a built-in GA4 integration.
When GA4 is loaded inside the iframe (and that iframe is loaded from a 3rd-party domain, GA4 cannot access what is happening on the parent page. It cannot access the client ID of the parent page, and it also cannot reach the UTM parameters of the parent page.
Therefore, the events coming from the iframe will not get the correct traffic source data. What’s the solution? If possible, try to move the tracking from the iframe to the parent page. An example is the Calendly booking form.
Even though they offer a built-in GA4 integration, I recommend using this solution. Instead of tracking events inside the iframe, the custom listener would make the form events accessible on the parent page.
Reason #9: Delays in data processing
When checking if your UTM parameters are working or if event tracking is correctly implemented, it’s tempting to look at your GA4 reports immediately. However, a common reason data might seem missing is simply processing latency.
Google Analytics 4 needs time to fully process and attribute the incoming data. You should typically expect a delay of 24 to 48 hours before data is displayed in standard reports and explorations.
If you look sooner, chances are you will see more of the Unassigned traffic.
Reason #10: Unsupported UTM parameters
This one is a very common point of confusion, especially for teams that have used other analytics tools or have their own custom tracking parameters. You might be using parameters that look like UTMs, but Google Analytics 4 simply doesn’t recognize them.
GA supports a fixed list of UTM parameters (maybe that list will be expanded in the future):
- utm_source
- utm_medium
- utm_campaign
- utm_term
- utm_content
- utm_source_platform
- utm_creative_format
- utm_marketing_tactic
For the most up-to-date list, check this documentation.
If you use any other parameters (even if they start with utm_), they won’t work. For example, utm_agroup and utm_ad_placement won’t work.
Reason #11: Your website strips the UTM parameters from the URL
This is somewhat related to tips #1 and #2 from this article. But I just wanted to emphasize that this is definitely possible.
Here’s the scenario: a user clicks your campaign link with all the correct UTM parameters, but by the time the page finishes loading, the parameters have vanished from the URL in the browser’s address bar.
When the Google Analytics 4 tag fires, it reads a “clean” URL with no tracking parameters. As a result, GA4 has no campaign information and attributes the visit to “Direct” traffic, leaving a hole in your reports.
This usually happens for a few common reasons:
- Server-Side Redirects (don’t mix this with server-side tagging): Your website might have redirects in place (e.g., redirecting from http to https, or from a non-www to a www address). If these redirects are not configured to pass along the query parameters from the original URL, they simply get dropped during the redirect.
- JavaScript Frameworks: Modern websites, especially Single Page Applications (SPAs) built with frameworks like React or Vue, often handle URL routing with JavaScript. This client-side routing can sometimes “clean” the URL, inadvertently removing the UTM parameters after the page has loaded.
- Older website with limited functionality. I’ve seen a bunch of older websites (that are not very flexible), and if the URL contains some unsupported URL parameter, it throws a 404 (page not found) error. Technically, UTM parameters can also be treated as “not supported” but those websites. The only solution that solved this was to cooperate with developers and ask them to “whitelist” UTM parameters somewhere in the settings/code of the website.
UTM parameters not working in Google Analytics 4: Final Words
Nothing is more frustrating than spending a lot of time planning new marketing campaigns, being really excited to see the data come through in GA4 upon launch, and then having everything fall flat because the UTM parameters are not working.
While no one solution can solve all your problems, I have shared seven different scenarios and solutions in this article, so hopefully, one of these fixes the problems you are experiencing.
If you know another reason UTM parameters aren’t working, share it in the comments below and let us know what you did to overcome the problem!

2 COMMENTS
Hello ,
"So, if you came to this article trying to preserve UTMs across multiple pages of the same session, relax. That is unnecessary. GA4 handles this automatically as long as the URL of the first page contains UTMs."
Could you please clarify this matter? I'm looking for a solution to capture UTM parameters when a user converts on a subsequent page, rather than the landing page, on the same domain. If I use the "page_view" event on the second page, the page_location doesn't contain the UTM parameters. Additionally, if you have a solution for cross-domain tracking using two different Google Tags, I would greatly appreciate it.
Thank you for your response.
Hi Julius,
I installed Cookiebot on my website via Tag Manager and set Consent Mode v2. While debugging, I noticed that GA4 does not retain any UTM parameters even if all cookies are accepted after visiting the site. Only if the user who accepted cookies visits the site again with UTM parameters, these parameters are retained for that session. The Cookiebot support team also investigated the issue. What could be the issue?