Two free tools from Google, both installable in an afternoon, and most people look at the wrong one. They do not do remotely the same thing: one tells you what happens inside your site and the other how people get to it.
| Google Analytics 4 | Search Console | |
|---|---|---|
| Looks at… | What happens inside | What happens on Google |
| Answers | How many people come, to which pages, what they click, where they leave | What they search for, where you rank, how many see you and how many come in |
| Needs | A snippet of code on your site | Verifying the site is yours |
| Takes | Minutes | Days. Set it up today even if you will not look at it |
| Used for | Deciding what to change on the site | Deciding what to write about |
The one thing you have to understand about Search Console
Search Console gives you four numbers per search: impressions (how many people saw your link), clicks, CTR (the share who came in out of those who saw it) and average position.
And those four answer the only question that matters: does this page need a better title or does it need more content? They are not the same thing and the remedy for one does nothing for the other.
| Average position | What is happening | What a title fixes |
|---|---|---|
| ≤ 6 | Google already shows you. If the CTR is low, your sentence is not convincing | Everything. It is the only thing failing |
| > 7 | Hardly anyone scrolls down that far | Nothing. You have to climb first, and that is content |
Written down it looks obvious and in practice it is not: it is terribly easy to spend an afternoon polishing the headline of a page sitting at position 11, feel like you worked, and move not one click.
Installing Analytics without ending up at zero
This is the part most often got wrong, and the symptom is brutal: an empty dashboard with the site working fine. It happened here, and the two causes are the same ones as on almost every site.
-
The snippet goes in the
<head>of EVERY pageNot just the home page. If your site is loose files, it has to go in all of them — and count them, because "all of them" is always more than you remember.
-
The cookie banner: the order decides everything
With Consent Mode, if you start with analytics denied, the visit is sent at that moment as a cookieless ping — which does not count in the reports. When somebody later accepts, nothing else is sent.
Result: an empty dashboard with thousands of visits. Here it was chased for weeks in the wrong place. The decision that fixes it is a product one, not a technical one: grant analytics by default (measuring is legitimate interest and carries no advertising behind it) and leave advertising denied, with a reject button that genuinely works and is remembered. -
If you have security headers, check the CSP
Analytics does not send the data to the domain you would expect: for European traffic it uses a regional endpoint. If your security policy only allows the "normal" domain, the beacons are blocked and the dashboard says there is no data.
You can see it in the browser console:
Refused to connecterrors. If you have no CSP, this does not apply to you. -
Tag the three or four buttons you care about
Page views count themselves; what people click does not. And without that you know how many come in and how many buy, but nothing in between — which is exactly where something can be fixed.
Pick few: the tool button, the book-an-appointment button, the form submit. Three well-placed ones show you the whole funnel.
⚠️ The metric call must not be able to break what it measures. If it sits inside the save button and throws, it takes the save with it. Wrap it so it can never throw.
What to look at, and how often
| Every | Where | What |
|---|---|---|
| Month | Search Console | Queries at position ≤ 6 with low CTR → rewrite that title |
| Month | Search Console | Queries with lots of impressions at position 8-20 → a page is missing there |
| Quarter | Analytics | Which pages take the traffic and which nobody opens |
| Quarter | Analytics | The events: do they press the button? do they press it and not finish? |
| Never | Neither | Checking it daily. Daily noise cannot tell a trend from a Tuesday |
Three things Analytics will NOT tell you
- Why they leave. It tells you how many and from where, not the reason. For that, open the page on a phone and use it yourself.
- How much you sell through the site, unless you tag it by hand.
- The exact truth. Blockers eat a share of the traffic — more among younger audiences — so the absolute number is a floor. Use it to compare against yourself, not to boast.
Three tools that measure different things and never agree
The first thing that happens once everything is installed is that the numbers do not match, and the natural reaction is to assume something is misconfigured. It is not: they measure different things, and knowing exactly what each one measures saves weeks of chasing differences that are not errors.
| What it actually counts | What it cannot see | |
|---|---|---|
| Search Console | What happens in Google: how often you are shown and how often you are clicked | Nothing that happens inside your site. Not direct traffic, not social |
| GA4 | What happens inside: where people come from and what they do | Anybody blocking the script. And anybody refusing cookies, depending on setup |
| Your host's analytics | Real requests, counted at the server | Where they came from and what they did. It is a counter, not analysis |
Installing it properly: four steps and the three places it fails
-
The property and the data stream
You create the property, create a web data stream, and out comes an identifier. That is the only value you need.
And there is already a trap nobody warns you about: Google may show you two similar identifiers — the tag one and the stream one — and both work because they point at the same place. Use the one on the installation-instructions screen and do not overthink it; if two places on your site carry two different IDs, that is a problem.
-
The code goes in the
<head>, on EVERY pageA page without the snippet does not exist for analytics. And since pages get added all the time, this gets forgotten: the check is to search for the identifier across every file and count. If the number does not match your page count, one is missing.
-
Consent: the trap that leaves everything at zero
Consent mode decides whether a visit counts. And there is a very specific scenario where everything arrives denied: if the pageview is recorded at the instant consent is still "denied" and acceptance comes afterwards, that hit already went out as a ping that does not count — and no further one is sent.
It looks like this: the panel says the tag is installed, there are no console errors, and the reports are empty. It is the most demoralising of the three because everything looks fine.
-
The security headers
If your site declares where it may load and connect from — and it should — analytics has to be allowed. And allowing the obvious domain is not enough: measurement data is sent to regional subdomains different from the one serving the script. Allowing only the script's domain is the number one cause of "it loads fine and nothing arrives".
The check takes thirty seconds: open your site with the browser console open and look for red errors mentioning analytics. If they are there, this is it.
What deserves to be an event, and what is noise
GA4 counts visits by itself. What it does not count — and what is the only thing that answers whether your site works — are actions. But measuring everything is the same as measuring nothing: with thirty events you look at none.
| Deserves an event | Does not |
|---|---|
| They used the calculator and got a result | They scrolled |
| They pressed "book" or "call" | They hovered over the menu |
| They submitted the form | They opened the form |
| They reached the end of a multi-step flow | Each intermediate step, if you will never act on it |
// ⚠️ ALWAYS wrap it in try/catch. This line lives inside the button
// handler: if the metric throws, it takes down exactly the action
// you were trying to measure.
function event(name, data) {
try {
if (typeof gtag === 'function') gtag('event', name, data || {});
} catch (e) { /* measuring must never break the page */ }
}
// And when using it: stable names, never free text from the user.
event('calculator_result', { tool: 'payroll', agreement: 'national' });try/catch, because a metric that throws inside a button handler breaks the
button. Second: never send what the user typed. A search field sent as a
parameter ends up putting exactly what people type into analytics — which is a third-party
service. Send the category, not the content.
Search Console: the four numbers and the one that lies
Search Console gives four figures per query and per page, and they only make sense together:
| Figure | What it is | What it means when it moves alone |
|---|---|---|
| Impressions | Times you appeared | Rising on their own: Google is showing you more. Good |
| Clicks | Times you were clicked | The only number that is actually traffic |
| CTR | Clicks ÷ impressions | Falling while impressions rise means you are appearing where nobody clicks you |
| Average position | The mean rank | This is the one that lies. See below |
- Position 6 or better: Google already shows you. If nobody clicks, the problem is the title and description — and that is fixed in one line of HTML.
- Position 7 or worse: hardly anybody sees you. Rewriting the title fixes nothing, because the problem is not the phrase: it is that you do not get there. That needs content.
The funnel for a pharmacy, and what to measure at each step
With both tools in place, this is what you can reconstruct end to end. And the point is not the numbers: it is where people fall out, because that tells you what to fix.
| Step | Where it comes from | If they drop here, the problem is… |
|---|---|---|
| They search | Impressions (GSC) | You do not exist for those searches |
| They click | Clicks and CTR (GSC) | The title, if you are in the top 6 |
| They stay | Sessions and time (GA4) | The page does not answer what the title promised |
| They do something | Your event (GA4) | The action is invisible, or what they gain is unclear |
| They come back | Returning users (GA4) | It helped once and there is no reason to repeat |
What to look at, and how often
| Every | What | Why that rhythm |
|---|---|---|
| Week | GSC clicks and your two or three events | That is what moves in a week. The rest does not |
| Month | Queries in position 5-10 with volume | It is next month's to-do list, and it writes itself |
| Quarter | Which pages rose and which disappeared | SEO moves in quarters. Checking weekly only produces anxiety |
Before you call this learned
- I know which question each of the two answers.
- I have Search Console verified, even if I am not looking at it yet.
- I check that Analytics actually receives data, not that the snippet is present.
- Faced with a weak page, I look at POSITION before deciding what to fix.
- I have three buttons tagged, and their tracking cannot break what it measures.
← Previous: coding with AI Next: a chatbot for your pharmacy →