To check website traffic in GA4, open Reports, then Realtime, while the visits arrive. Confirm that the target page and its events show up. A day later, open Traffic acquisition to check the source, then compare the session count with what was delivered.
That order matters most when you send test traffic, such as visits from a traffic tool. The second half of this page shows how to label those visits and keep them out of the reports your team uses.
What GA4 can and cannot prove
GA4 is Google Analytics 4, Google’s free analytics tool. It shows that your site recorded activity on a page, from a source, in a country, on a device, at a time. That makes it a good tool for checking your tracking.
GA4 cannot prove:
- that one GA4 user is one person;
- that a visitor wanted to buy;
- that a source label tells the whole story of how someone arrived;
- that traffic caused a ranking change;
- that a provider’s count and GA4’s count should match exactly.
Software can run a real browser and fire your GA4 tag. So a session in GA4 proves that a browser ran your tag. It does not prove that a person sat behind it. Our guide to bot traffic explains the difference.
Before launch: save a baseline
Pick a short period before the test. Write down these numbers for the target page:
- users and sessions;
- views;
- average engagement time;
- key events;
- country and device split;
- session source and medium.
Use the same time zone and page path you will use after launch. The baseline shows what normal looks like, so you can see what the test added.
If the page already gets a lot of visits, use a separate test URL. That keeps the new sessions easy to find.
Step 1: label the test with UTM tags
UTM tags are short labels you add to the end of a URL. GA4 reads them and files the visit under your labels. Google lists three core fields:
utm_source: where the visit came from;utm_medium: the type of traffic;utm_campaign: the name of the test.
A test URL might look like this:
https://example.com/pricing
?utm_source=serplify_test
&utm_medium=qa_traffic
&utm_campaign=pricing_mobile_oct
Pick a source name you will never mix up with a real channel. serplify_test or qa_test works. google or newsletter does not.
Keep every value lowercase and spell it the same way each time. serplify_test and Serplify-Test become two rows in GA4. Google’s campaign URL guide shows where the values appear.
Tag the test before it starts. Untagged visits blend into your real traffic, and you cannot sort them out later.
Then test the final URL after every redirect. A redirect can drop the tags, and the visit then shows as Direct. Google’s guide to (direct) / (none) traffic lists missing tags, redirects and link shorteners as common causes. Our guide to direct traffic explains each cause and how to fix it.
Step 2: test one visit yourself
Open the exact test URL in a private browser window. Accept or decline the cookie banner the way the test will.
Then check:
- Does the right page load?
- Does the GA4 tag fire?
- Is the page title correct?
- Do the events you expect fire?
- Do the UTM tags survive redirects?
- Do the main button and form work?
If your own visit does not show up in GA4, more traffic will not fix it. Fix the tracking first.
Step 3: watch Realtime during the first small batch
In GA4, open Reports, then Realtime. Google’s Realtime report guide says it covers the last 30 minutes. It shows pages, events, sources and key events.
During the first small batch, check four cards:
- Views by page title. Is the target page there?
- Event count by event name. Do
page_view,session_startand your own events appear? - Active users by device. Does the device split look right?
- Active users by source or campaign. Do your UTM labels appear?
Realtime is a quick health check. Google notes that attribution there is limited. A missing source five minutes after launch is not a final answer.
Step 4: check the landing page, then the totals
A rise in total users can come from anything: another campaign, a newsletter, a busy news day. Look at the exact page instead.
In standard reports or in Explore, use these dimensions:
- Landing page;
- Page path and screen class;
- Page title;
- Session campaign;
- Session source / medium.
Make sure the page path matches the target after redirects. Watch for /pricing and /pricing/ showing as two rows. URL parameters can also split one page into many rows.
For a page test, the page and its events matter more than the total user count.
Step 5: check events and key actions
List the events the page should create before the test starts. For example:
page_view;scroll;- a button or menu click;
form_start;- a custom signup event.
Use test traffic only for passive checks. Do not create fake purchases, leads or ad clicks and then count them as results.
Check event parameters too. A button event with no page or button label is hard to debug later.
Step 6: check country and device
Compare the test settings with GA4’s Country and Device category. Start with one country and one device. A mixed test makes errors hard to spot.
Expect small gaps. GA4 guesses location from the network, and small samples look uneven. Set a tolerance before launch. For example, at least 85 percent of sessions should land in the chosen country. Pick the number before you see the result.
Step 7: check the source in Traffic acquisition
After GA4 has processed the data, open Reports, then Acquisition, then Traffic acquisition. Google’s Traffic acquisition guide explains each column. Check:
- Session source;
- Session medium;
- Session source / medium;
- Session campaign.
Do not mix up First user source and Session source. First user fields show how GA4 first met a user. Session fields show where this visit came from. A returning user can keep an old first user source even when the new session has your test label. Google explains this on its page about traffic source scopes.
That is one reason Realtime and Traffic acquisition can show different sources. If a source lands somewhere you did not expect, read how GA4 sorts traffic sources into channels.
Step 8: compare delivered visits with GA4 sessions
Use the same time window, time zone, page and unit on both sides. If the provider counts visits and GA4 counts sessions, work out a visibility rate:
GA4 visibility rate = matching GA4 sessions / delivered visits x 100
For example:
850 matching GA4 sessions / 1,000 delivered visits x 100 = 85%
Write down both numbers, the page, the label and any filters. A result of 85 percent means nothing if nobody knows how you got it.
Do not use page views as the top number when the provider sells visits. One visit that opens three pages makes three page views.
Why GA4 and the provider disagree
Common causes:
- the visitor declined consent;
- an ad blocker or privacy tool stopped the tag;
- the GA4 tag failed or loaded late;
- a redirect removed the UTM tags;
- an active data filter;
- a visit crossed two domains and started a new session;
- the two sides use different time zones;
- reporting delay;
- you compared visits with users, page views, hits or events;
- a tag or event fired twice;
- your site blocked a visit.
Check in this order: the page, the tag, consent, labels, filters, time window, then the provider.
How to keep test traffic out of your reports
Test traffic is useful while you check it. It does harm when it leaks into the reports your team reads every week. Unlabelled test visits can:
- inflate sessions and users, so week over week trends stop meaning anything;
- pull down your conversion rate, because test visits do not buy;
- land in Direct or an odd referral and blur your channel reports;
- join audiences you build in GA4, including ones you share with Google Ads.
The goal is simple. Default reports leave the test out. One report, on purpose, shows it. There are three ways to get there.
Option 1: a separate GA4 property
Create a second GA4 property just for tests and put its tag on the test page. Your main property never sees the visits. This is the cleanest choice for launch checks and load tests.
Option 2: a test page plus a comparison or segment
Sometimes the test must run in your main property, for example to check a real signup flow. Send the visits to a dedicated page with your UTM labels. Then hide them where people look:
- In standard reports, add a comparison. Pick a dimension such as Session source, choose “does not exactly match” and enter your test source. Save it so the team can reuse it.
- In Explore, build a session segment that excludes your test campaign. Apply it to every exploration that matters.
- Keep one view that includes it. Save a second comparison that shows only the test source. That is where you check the test.
Comparisons and segments do not change your data. You can always go back to the raw numbers.
Option 3: a data filter, with care
GA4 data filters can drop internal or developer traffic before it is processed. You mark internal traffic by IP address. Visits from a traffic tool come from many IPs, so an IP rule will not catch them.
An active filter is also permanent. Google’s internal traffic guide says filtered data is never processed and cannot be recovered. Its data filter guide says the same. Test a filter before you turn it on. For most paid tests, Option 1 or Option 2 is safer.
A full verification table
| Evidence | Provider side | GA4 side | Pass rule |
|---|---|---|---|
| Volume | Delivered visits | Matching sessions | Within your tolerance |
| Target | Requested URL | Landing page or page path | Correct final page |
| Time | Delivery times | Session date and hour | Same window and time zone |
| Source | Referrer or campaign you set | Session source / medium | Expected label after processing |
| Country | Requested country | Country | Within your tolerance |
| Device | Requested device | Device category | Matches the plan |
| Behavior | Visit length and pages you set | Engagement time and views | Makes sense for the page |
| Events | Expected page actions | Event names and parameters | Required events present |
When to stop a test
Pause and look into it when:
- the wrong page gets visits;
- your own test visit does not appear;
- key events do not fire;
- the site’s error rate goes up;
- country or device data misses your range;
- UTM labels vanish after a redirect;
- you cannot match the provider’s unit to a GA4 metric.
Fix the cause, then resume with a small batch.
Checking Serplify test traffic
If you want labelled test traffic for these checks, Serplify sends automated visits in real Chrome browsers on residential and mobile IPs. Each visit loads your page, runs your GA4 tag, and can scroll and open more pages. The project page lists every delivered visit with its URL, country, device, pages and duration, so you can line it up with GA4.
You can pause a project, fix the settings and resume. To plan the test, set up a test campaign on a dedicated page. To judge any other provider, use the website traffic quality checklist.
Frequently asked questions
Where can I see new website traffic in GA4?
Open Reports, then Realtime, to see activity from the last 30 minutes. Check the page and events there first. A day later, use the Traffic acquisition report for source, medium and campaign, because Realtime has limited attribution.
Why does GA4 show fewer sessions than my traffic provider delivered?
Consent choices, ad blockers, tag errors, redirects, filters, reporting delays and time zones can all lower or change the GA4 count. Compare the same page, time window and unit before you decide that delivery failed.
How do I keep test traffic out of my main GA4 reports?
Tag every test visit with a UTM source you never use for real channels. Then send it to a separate GA4 property, or hide that source with a saved comparison or an Explore segment. Keep one view that shows only the test so you can still check it.
Should I permanently filter test traffic out of GA4?
Be careful. An active GA4 data filter stops matching data from being processed, and you cannot get it back. A separate property, a comparison or a segment is safer because the evidence stays available.
Does a session in GA4 mean a person visited?
No. GA4 records any browser that runs its tag, and automated browsers run the tag too. A session proves that a browser loaded the page with your tag. It does not prove who was behind it.
Sources and further reading
- Google Analytics Help: Collect campaign data with custom URLs support.google.com
- Google Analytics Help: Understand (direct) / (none) traffic support.google.com
- Google Analytics Help: Realtime report support.google.com
- Google Analytics Help: Traffic acquisition report support.google.com
- Google Analytics Help: Scopes of traffic-source dimensions support.google.com
- Google Analytics Help: Apply comparisons to reports support.google.com
- Google Analytics Help: Segment builder support.google.com
- Google Analytics Help: Filter out internal traffic support.google.com
- Google Analytics Help: Data filters support.google.com