Recently Updated: 17 min read

Why Ad Clicks and GA4 Sessions Differ: Causes and Checks

Why Ad Clicks and GA4 Sessions Differ: Causes and Checks

An ad click and a GA4 session are two different counts taken in two different places, so they are not expected to match. A click is recorded on the ad side the moment someone presses the ad. A session begins on your site, after your page has loaded and your measurement code has run. Between those two moments sit redirects, page load, blockers, filters and tagging, and each can remove a visitor from the second count without touching the first. If you run a pram and stroller shop and the campaign report shows more clicks than GA4 shows sessions, the useful move is to split the gap into links in a chain and test each one.

Inference note: Google's help pages do not compare clicks with GA4 sessions directly. They describe reporting discrepancies between ad systems and the effect of missing UTM parameters.

A click and a session are separate counts

A click belongs to whoever logs it: the publisher's ad server, a third-party ad server, or a redirect link you control. A session belongs to your analytics tool and means a visitor started interacting with your site. The first is counted in the advertising system. The second is counted in your own. Since a visitor can click and never reach a state in which your code records them, the click total can exceed the session total without any fault in either system.

That is why verdicts such as "the clicks are fake" or "the publisher inflated the report" come too early. The sound approach is to treat the gap as a loss spread over the links of a chain and examine them from cheapest to the costliest. Start with the chain itself.

LinkWhat happensHow a gap appears
ClickA person presses the ad and the ad system logs itThe click total is set here
RedirectThe click passes through trackers and redirect addressesA broken tracker or macro can spoil the record
Page loadYour landing page loadsThe visitor can leave before it finishes
Measurement codeYour analytics code runsA blocker, a consent choice or a code fault can prevent the session
Tag readingGA4 reads source, medium and campaignMissing UTM values appear as (not set)

You control links three to five directly: your page, your code and your tags. Those are the ones to inspect first, because they are also the ones you can improve.

The Analytics page on collecting campaign data with custom URLs (Opens in a new tab) says that when you add parameters you should always use utm_source, utm_medium and utm_campaign. Missing UTM parameters result in (not set) values in reporting. Values are case sensitive, so utm_source=google differs from utm_source=Google. The page also recommends setting related parameters, particularly utm_id and utm_source_platform. Parameters can be added in any order, with a question mark before the first and an ampersand between pairs when built by hand.

One detail matters for click-to-session comparison: UTM parameters are omitted from the Landing page + query string and Page path + query string dimensions, and that information appears in the Page location dimension. Searching for UTM values in those two dimensions will mislead you. If you use the interface in another language, labels may look different.

Inference: a visitor who arrives through a link with missing tags is still a session, but it is credited to (not set) or another source rather than your campaign. Your campaign report will not show those sessions even though the clicks happened. The gap is a tagging error and it is entirely in your hands. For unassigned traffic, see GA4 unassigned traffic: causes and fixes. For tagging routines, see sponsored post reporting with UTM and GA4 and separating marketplace and social traffic with UTM tags.

  • Does every ad link carry utm_source, utm_medium and utm_campaign?
  • Are values lowercase and spelled the same way every time?
  • Were utm_id and utm_source_platform added where needed?
  • Do the parameters survive the end of the redirect chain?
  • Is the first parameter introduced with a question mark and the rest joined with ampersands?
  • Did a test click show up in GA4 under the expected source and campaign?

Common tag errors and their fingerprints

MistakeWhat the report showsFix
utm_campaign missing(not set) in the campaign fieldRebuild the link with all three required parameters
Case inconsistencyOne source on two rowsPick a single lowercase spelling
Parameters lost in a redirectThe session is credited to an unexpected sourceTest the address after every hop
Wrong parameter formatCampaign data never readQuestion mark first, ampersands after
Several mediums for one adThe campaign splits across channelsDefine one medium in the vocabulary

The first, second and fourth rows follow the Analytics page on required parameters, case sensitivity and format. The third and fifth rows are practical observations and should be read as inference.

Click trackers, macros and redirect hops

The Ad Manager page lists incorrect creative setup among the causes of variance for third-party creatives, such as missing click trackers or macros. For a click to arrive at your site, the click address, the redirect chain and the destination must all be built correctly. If one link in the chain is broken, the visitor can land on the wrong page, never arrive at all, or lose the UTM parameters during the redirect.

Inference: losing parameters in a redirect can cause GA4 to attribute the session to a different source. Total sessions may then look close to the click count while the sessions under your ad source look low. This is why you should read sessions arriving with the right tags, not only total sessions.

Test before launch. Click your own ad link, confirm the UTM parameters are visible in the address bar, then confirm in GA4 that the session appears under the source you expect. Two minutes of testing prevents weeks of confusion.

Visitors who give up before the page loads

The Display & Video 360 page on reporting discrepancies (Opens in a new tab) treats delay as a cause of mismatch, and notes that people may close the tab before a creative or page has finished loading. The Ad Manager page on investigating report discrepancies (Opens in a new tab) also lists latency, including users leaving before load.

Inference: the same reasoning applies between click and session. If your landing page is slow, a visitor who pressed the ad may go back before your measurement code runs. The ad system has counted the click, but no session starts on your side. The slower the page, the larger this loss can be.

Practical suggestion: before the campaign starts, time how long your landing page takes to open on a mobile connection and check that the measurement code does not wait for the whole page to finish. It is the cheapest part of the gap to close.

Page weight and the visits it costs

Inference: what your landing page loads first changes the size of the loss. Large images, heavy scripts and third-party widgets delay the moment the page is ready for interaction. A stroller product page that loads a gallery, a video, a size chart and a chat box together can push the measurement code behind all of them. Keeping the page for ad traffic light reduces both the chance the visitor leaves and the chance the session is never recorded. A plain, separate landing page for a campaign also makes its results easier to read.

Blockers, filters and invalid traffic

Display & Video 360 documents blocking software as a reason a third-party line item never arrives. Ad Manager adds that the blocked creative may follow an impression already logged on its side. Both pages add that every ad server cleans out bots and spam by its own method and on its own schedule, so totals split.

Inference: a visit counted as a click might be removed by an invalid traffic filter on one side and never appear as a session on yours. Because each side filters at a different moment, the two totals drift apart. A blocker could also stop your own measurement code from reaching the analytics service.

Filtering your own staff and bot traffic from GA4 is a separate task, covered in filtering internal traffic and bots in GA4. For measurement lost to consent choices, the cookie consent and measurement loss guide helps.

Losses outside your control

Blockers and differing filter timing are not in your control or the publisher's. For these, the goal is to record their presence and treat them as a fixed share in your evaluation, not to close the gap. If you run several campaigns with the same publisher, compare that share across them. A similar share points to a property of the measurement environment. A share that changes from one campaign to the next points to a setup difference worth searching for.

Small volume and mismatched report setups

Both ad pages warn that a few missing counts look huge as a percentage when volume is low. Inference: the same holds for clicks and sessions. A handful of clicks per day makes any gap look dramatic. Look at the absolute difference, then the volume, and only last the percentage.

Ad Manager's first step is making sure both reports span identical dates and share a time zone. Display & Video 360 wants matching dates, a shared time zone, equal filters and completed reports. The Ad Manager page adds that investigation works best while the line item is running. Inference: sessions that start near midnight can land on different days in two time zones, so read both reports in the same one.

Example scenario: stroller shop running a weekend offer

Example scenario: a pram and stroller shop runs a banner campaign on a parenting publisher to promote a new lightweight travel stroller. The campaign report shows a click total. The owner opens GA4 for the same dates and sees fewer sessions. Before blaming anyone, the owner decides to split the gap by links.

First, the dates and time zone are aligned. Next, the owner checks the links: the banner link carries utm_source and utm_medium, but utm_campaign was never written. Because of the missing parameter, a share of sessions shows up with (not set) as the campaign. The owner fixes the link and asks the publisher to swap it in.

Third, the landing page is tested. It is a product page with a gallery, a video and a size chart, and on a phone it opens slowly. The measurement code loads at the end. The owner compresses the images and moves the code earlier. Fourth, the owner checks volume: with few clicks per day, the percentage gap looks exaggerated, while the absolute gap is modest. The remaining difference goes to the publisher together with daily reports.

A week later the owner repeats the comparison. After the tag fix, campaign-level sessions have moved closer to source-level sessions. After the speed work, the ratio on mobile improved a little. The remaining gap sits at a steady level week after week. The owner records it as a fixed share of the measurement environment and judges the campaign by form submissions, product page views and orders. What matters is that both weeks were calculated at the same level; otherwise the improvement would only be an artefact of the count.

Each step names what is compared, who controls it, and what changes next.

When a gap deserves escalation

Practical suggestion: a gap alone is not grounds for suspicion, but these patterns call for an investigation.

  • The gap widens steadily over time, which can point to a setup or page problem.
  • One link has a much larger gap than the others, which can mean its tagging or redirect is broken.
  • Clicks exist but only (not set) appears as the source, which means tagging is missing.
  • The gap jumps right after a page change, which can mean the measurement code was affected.

If the gap is small, steady and explained, record it as a measurement allowance and judge the campaign on sessions, key events and sales instead.

Totals, sources and campaigns: three comparison levels

Which sessions you count changes the answer. Think in three levels: all sessions on your site, sessions from the ad source, and sessions with the correct campaign tag.

LevelWhat is countedWhat it tells you
TotalEvery session on the siteDoes not isolate ad traffic, so it is unsuitable for this comparison
SourceSessions with the ad source and mediumShows the size of ad traffic if tags worked
CampaignSessions with the right campaign nameA campaign-specific view that looks low when tags are missing

Compare clicks with the campaign level and a missing tag widens the gap. Compare with the source level and you can separate the share caused by tagging. The difference between the two levels is a rough measure of the tagging error. It is an inference, not an exact figure, because the source level can differ for other reasons too.

Practical suggestion: start with the narrowest level, the campaign, then step up one level to see how much of the gap tagging explains. If tagging explains little, the rest of the chain needs attention.

A dry run before launch day

  1. Paste the ad link into a browser and look for the UTM parameters in the address bar.
  2. Click it on a phone and note how long the landing page takes to open.
  3. Confirm the measurement code runs before the page finishes loading everything.
  4. Check in GA4 that the test visit shows the expected source, medium and campaign.
  5. If a redirect chain exists, check parameters after every hop.
  6. Record the result with a date and repeat if the page changes during the campaign.

A staged comparison, cheapest check first

StepQuestionWhere to look
1Do both reports share the same dates and time zone?Report settings
2Are the same campaign and link being compared?Campaign name, link list
3Is the volume small?Daily click count
4Does the link carry the three required UTM parameters?Ad links
5Do parameters survive the redirect?Test click
6Does the landing page open quickly?Mobile load test
7Does the code run, and do blockers or consent matter?Tag audit, consent flow
8Are sessions credited to (not set) or another source?Source and medium report
9Is any gap still unexplained?Publisher or ad server support

Work down the table from cheap to costly. The first three steps only require looking. Steps four to six are short tests. Steps seven and eight need some analysis. Step nine involves another party.

Seven-day review cadence

Practical suggestion: track the gap weekly. In week one, note the level the ratio settles at. In later weeks, calculate the same ratio at the same level. If it shifts noticeably, ask whether the page, the link or the measurement code changed that week. If none did, ask the publisher about changes on their side, such as a new creative or placement. A dated note turns an end-of-month argument into evidence.

The page points to the Campaign URL Builder for websites and the Play Campaign URL Builder for Android app ads. The Play builder requires the Google Analytics for Firebase SDK, although the SDK itself does not need changing. It also suggests using dynamic UTMs in platforms that support them, which removes manual entry errors. Practical suggestion: let one person or one sheet own link creation, because two spellings of one campaign become two rows.

Matching questions to tag fields

The Analytics page recommends setting all relevant UTM parameters, and each one answers a different reporting question. Reading the fields this way helps when a gap has to be traced back to a specific link.

FieldQuestion it answersPractical suggestion: what to expect when it is missing
utm_sourceWho sent the visitorThe session lands under (not set) or an unrelated source
utm_mediumWhat kind of placement it wasChannel rules cannot sort the session reliably
utm_campaignWhich campaign the click belongs toThe click cannot be matched to a campaign row
utm_idWhich campaign ID, as used when uploading campaign dataMatching against uploaded data has no key to use
utm_source_platformWhich platform directed the trafficThe platform that sent the click stays unnamed

The page defines utm_id as the campaign ID and says to use the same IDs that you use when uploading campaign data. It defines utm_source_platform as the platform responsible for directing traffic to the property, with Search Ads 360 and Display & Video 360 as examples.

Why the final three days mislead

Display & Video 360 cautions that live screen figures can shift for two to three days, while generated reports hold steadier. A click total from the last two or three days is therefore a poor basis for a conclusion about sessions.

  • Pull both sides as generated reports, not dashboard tiles.
  • Leave the latest three days out of the first comparison.
  • Repeat the same comparison the following week and note whether the gap moved.
  • Write down the date range and time zone next to every figure you share.

Practical suggestion: raise anything unexplained with the publisher while the campaign is running. Ad Manager points out that troubleshooting gets harder once a campaign is over.

Reporting the gap to the publisher and your team

Stick to observations: the two figures compared, the dates and time zone, the link you tested and the causes you already excluded. Ad Manager advises raising the case while the campaign runs, with daily reports from both sides and a live page URL at hand. Thin data leaves little to investigate. For the team, summarize causes in a short table: tags, page speed, blockers, filters, small volume. The next campaign then starts with these questions already answered.

Misreadings to avoid

  • A click and a session are different units. One is counted on the ad side, the other on your site.
  • Fewer sessions than clicks does not prove the ad is fake. Loading, blockers, filters and tagging must each be tested.
  • The mapping here is inference and should be confirmed with your own test.
  • A missing UTM does not remove the session. It credits the session to an unclear or wrong source.
  • Live dashboards cannot stand in for finished reports.
  • Percentages at low volume mislead.
  • Equal clicks and sessions are not the goal. The goal is to know the reasons and reduce the part you control.

Frequently Asked Questions

Why does my GA4 session count fall short of the click count?

A click is counted on the ad side and a session on your site. Redirects, page load, measurement code and tag reading sit in between.

Is a visitor who bails before load still a session?

Google's two ad help pages note that people may close the tab before a creative or landing page has loaded. As inference, this can mean a click is counted while no session starts.

Do sessions vanish when UTM tags are missing?

They do not disappear, but they are not credited to your campaign. The Analytics page says missing UTM parameters result in (not set) values in reporting.

The Analytics page says to always use utm_source, utm_medium and utm_campaign when adding parameters to a URL. It also recommends utm_id and utm_source_platform.

Why does a tiny campaign show such a large percentage gap?

Ad Manager notes that a few missing counts look large as a percentage when volume is low. Look at the absolute difference first.

Who should I contact when the gap keeps widening?

Run your own tag, page and code checks first. For a gap you cannot explain, write to the publisher or ad server support during the run, attaching daily reports.

Conclusion

The difference between ad clicks and GA4 sessions is the result of a measurement chain. The help pages describe latency, users who leave before load, ad blockers, filtering at different times, small volume and missing UTM values as causes of discrepancies; applying them to clicks versus sessions is inference. For a pram and stroller shop, the order is the same as for any advertiser: align dates and time zone, test the three required UTM parameters, the redirect, page speed and the measurement code, and compare at the campaign and source levels. Take what remains to the publisher with daily reports while the campaign is running.

If you want to buy ad space with the measurement plan settled from the start, browse our ad spaces.

0 Comments

No comments yet for this article.

Post a comment

Please log in to leave a comment. Login