Semalt platform — Analytics

The Monday report problem: what GA4 cannot tell a Brazilian SEO team

Every agency in São Paulo has the same Monday ritual: three tabs open — GA4, Search Console, the rank tracker — and three different numbers for the same month. Semalt Analytics exists to end that meeting, by rebuilding organic sessions from server logs, restoring the queries GA4 anonymises, and attaching real BRL revenue to each term.

Read time: 11 minMarket: Brazil / São PauloUpdated:

Contents

  1. Why three tools give three numbers
  2. Where Semalt gets its data
  3. Five views you cannot build in GA4
  4. LGPD: what changes for tracking in Brazil
  5. Case: auto parts store, Tatuapé
  6. Connecting it in an afternoon
  7. What to keep GA4 for
  8. Frequently asked questions
16m
Months of Search Console history
0
Queries returned as (not provided)
4–10
The position band that pays
R$
Revenue attached per keyword

Why three tools give three numbers for the same month

The gap is not a bug in anyone's product — it is three different definitions of the same event. Search Console counts a click when Google hands the user off. GA4 counts a session when its JavaScript executes. Your rank tracker counts a position at the moment it happened to sample. Between the first and the second sits every reader who blocked the script, refused the cookie banner, left before the tag fired on a 4G connection in a lift on Avenida Paulista, or opened the page inside the in-app browser of Instagram, which many Brazilian audiences use as their default web browser.

For content-led Brazilian sites that gap is not a rounding error. In the accounts we run out of São Paulo, the distance between Search Console clicks and GA4 organic sessions has ranged from roughly 15% to well over 60%, widest on sites whose audience skews young, mobile and social-first. Every one of those readers is a real person who read your page and does not exist in the report you send the client.

The second problem is the one that costs money: (not provided). GA4 will tell you a landing page received traffic, but not which query earned it. So the monthly report degrades into page-level storytelling, and nobody can answer the only question the CFO actually asks — which words bring in revenue.

Bar chart: organic sessions, queries, assisted conversions and revenue as GA4 reports them versus the full figure
Every bar is the same month. The difference is what GA4 was allowed to record — which is why the monthly report and the log file never agree.

Where Semalt gets its data

Semalt Analytics is not another JavaScript tag competing for the same events. It is a layer that joins three independent sources and reconciles them:

  1. Search Console API — the full 16-month history at daily granularity, not the truncated top-1,000 view the web interface shows you.
  2. Server-side collection — a Cloudflare Worker, an Nginx log stream or a single server-rendered line. Because the count happens when the server returns the page, ad blockers and consent rejections do not erase the visit.
  3. Semalt's own SERP crawl — the same engine behind the rank tracker, so each organic visit is stamped with the position the term actually held that day and the SERP features sitting above it.

That third join is the part no general-purpose analytics product does. Knowing that a page got 400 visits is trivia. Knowing that those 400 visits came from a term sitting in position 6, under an AI Overview and a Mercado Livre listing, on mobile, is a decision.

What GA4 is genuinely good at

  • Product and checkout events
  • Audience export into Google Ads
  • Free at any volume
  • Raw export into BigQuery

Where it fails an SEO team

  • Queries arrive as (not provided)
  • Sampling on high-event properties
  • Blind to blocked and refused sessions
  • No link between a visit and a position
  • No revenue per query, only per channel

Five views you cannot build in GA4

1. Striking distance, sorted by money

Every URL carries the queries that sit in positions 4 to 10 — close enough that a title rewrite, an internal link and a new H2 move them. Semalt orders that list by estimated revenue rather than by search volume (the same logic behind the intent map), which reorders priorities dramatically for Brazilian ecommerce: a term with 90 searches a month and clear purchase intent routinely outperforms a 12,000-a-month head term that Mercado Livre and Shopee already own.

2. Sessions the tag never saw

Log-based collection catches the visits JavaScript missed. Beyond the raw number, the interesting output is the shape: which pages lose the largest share, which devices, which hours. Pages that lose disproportionately are usually heavy, script-dependent templates — and that is a performance bug you can fix, not a measurement quirk you have to explain away.

3. Query × position × device, in one table

CTR by position means nothing as a global average. It means a great deal when you can see that on mobile, for a query where an AI Overview and three sponsored Mercado Livre cards occupy the fold, your position-3 listing behaves like a position-8 listing. That view tells you when to stop chasing rank and start chasing the feature.

4. Revenue tied to the first organic query

Connect the store — VTEX, Nuvemshop, Tray, Loja Integrada, WooCommerce, Shopify — and each order is mapped back to the query that first brought the customer in. For businesses where PIX has pushed conversion up but average order value down, this is the only honest way to compare a high-volume informational term against a low-volume commercial one.

5. Cannibalisation, visible at last

Two URLs alternating for the same term is invisible in GA4, which reports them as two independent pages doing fine. Semalt flags the alternation, shows how many clicks the split costs, and names the URL to consolidate into. On Brazilian sites with years of blog output and overlapping category pages, this is often the single fastest win available.

LGPD: what actually changes for tracking

The Lei Geral de Proteção de Dados (Lei 13.709/2018) does not ban analytics, and it is not the GDPR with different words. What it demands is a lawful basis, a defensible retention period and honesty about what you collect. Two practical consequences for the setup described here:

Nothing in this article is legal advice; run the final wording past whoever signs off your privacy notice.

Case: an auto parts store in Tatuapé

A parts retailer with a physical counter in Tatuapé and a Tray storefront came to us in February 2026 with a familiar complaint: traffic was flat according to GA4, but the counter staff kept hearing «achei vocês no Google».

After connecting Semalt Analytics, the reconciled picture was straightforward. Real sessions sat close to the Search Console figure. More usefully, the revenue join showed that a cluster of long-tail fitment queries — part number plus model plus year — carried the majority of orders, while the broad category terms the team had been optimising for months carried almost none, because those SERPs were owned end to end by marketplaces.

The strategy changed in a fortnight: fitment pages generated from the catalogue, one page per part-model-year combination, internally linked from the category. Marketplace-dominated head terms were dropped from the content plan entirely and left to paid.

The lesson generalises across Brazilian retail: when Mercado Livre, Shopee and Magalu hold the head, the winnable market is the specific, the local and the technical — and you cannot see that market at all in a report that hides its queries.

Connecting it in an afternoon

Step 1

Sign in with Google

From semalt.com/authorize. No new credentials to manage.

Step 2

Attach Search Console

An existing property connects on the spot; the 16-month backfill runs in the background while you carry on.

Step 3

Choose a collection method

Cloudflare Worker, Nginx log shipping, or the standard tag. The Worker route is the one we default to for Brazilian sites behind a CDN.

Step 4

Join the store or CRM

Native connectors for VTEX, Nuvemshop, Tray, WooCommerce, Shopify and Magento, plus a plain HTTP webhook for anything bespoke.

Historical Search Console data is queryable immediately. Log-based sessions need a full day before the comparison is fair — resist the urge to judge the numbers after two hours.

What to keep GA4 for

Question you are askingBest sourceWhy
How many people actually read this page?SemaltCounted server-side, survives blockers
Which query earned this visit?SemaltNo (not provided); joined to live position
What did the checkout funnel do?GA4Event model built for exactly this
Which audience do I push into Ads?GA4Native export; Semalt does not replace it
Is Google indexing what I published?Search ConsoleThe authoritative source, always
Which words made money last month?SemaltOrder-level join back to first organic query

The rule we give clients

Keep GA4 as the product and advertising source. Keep Search Console as Google's own word. Use Semalt for every decision about which page to write, which query to attack, which URL to consolidate and what to tell the board about organic revenue. Three tools, three jobs, one number per question.

Frequently asked questions

Does this replace GA4?

For SEO decisions, yes. For advertising audiences and checkout events, no — keep both, with a clear rule about which answers which question.

Is server-side collection compatible with the LGPD?

It is a narrower form of collection than tag-based tracking: no advertising identifiers, pseudonymised at ingest, configurable retention. That makes compliance easier to document, not automatic — the obligation to declare and justify still sits with you.

How long before it is useful?

The Search Console history is useful in minutes: the striking-distance list is actionable the same afternoon. The session reconciliation needs 24 hours of data before you compare it with GA4.

Does it make sense for a small site?

Yes, and the value is different. Large sites use it to find money; small sites use it to find the two or three pages that are one edit away from page one.

How does it relate to AutoSEO?

Analytics decides what deserves attention, AutoSEO executes the on-page part without waiting for a developer. See the AutoSEO guide, and the technical audit walkthrough for what to fix first.

Bottom line

GA4 was never designed to answer SEO questions, and no amount of custom reporting fixes that. Reconciling logs, queries and positions in one place turns the Monday meeting from an argument about numbers into a decision about pages.

Practical next step

Take last month's report, put the Search Console click total next to the GA4 organic session total, and write down the gap. That number is what this platform exists to explain.

Sign in to Semalt Analytics →

Start with the gap in your own report

Free account, no card. Connect Search Console and see how much traffic your current stack is failing to count.

Sign in to Semalt →