Google Analytics and Search Console
What each one measures, CTR and position, GA4 events, UTMs, consent.
Updated
Why you measure
SEO without measurement is guesswork. You need to know: where visitors come from, what they search for, which pages work, what they do on the site and whether they reach the goal (an account created, an order, a subscription). Two free Google tools cover almost everything:
| Google Search Console | Google Analytics 4 | |
|---|---|---|
| Answers | how Google sees you | what people do on the site |
| Data | searches, impressions, clicks, position, indexing, errors | visitors, sources, pages, events, conversions |
| The moment | before the click | after the click |
| Setup | domain verification (DNS) | a script on the site |
Google Search Console — what to watch
| Report | What you learn |
|---|---|
| Performance | the searches you appear for: impressions, clicks, CTR, average position — by page, country, device |
| Pages (Indexing) | which pages are indexed and why others aren't |
| URL Inspection | the state of a specific page + "Test live" + "Request indexing" |
| Sitemaps | you submit the sitemap, see how many URLs it discovered |
| Core Web Vitals | real-world performance, by groups of pages |
| Links | who links to you |
The quick win from Performance: pages with many impressions and a low CTR — you show up, but you don't get clicks. Rewrite the title and description.
CTR = clicks / impressions × 100
Google Analytics 4 — the model
GA4 is built on events: every action is an event (page_view, click, sign_up, purchase), with parameters. The events marked as key events (conversions) are your goals.
// app/layout.tsx
import { GoogleAnalytics } from '@next/third-parties/google'
<html>
<body>{children}</body>
<GoogleAnalytics gaId="G-XXXXXXX" />
</html>'use client'
import { sendGAEvent } from '@next/third-parties/google'
<button onClick={() => sendGAEvent('event', 'sign_up', { method: 'email' })}>Create account</button>| Concept | What it means |
|---|---|
| session | a visit |
| engaged session | a visit longer than 10 s, or with a conversion, or with 2+ pages |
| source / medium | where from: google / organic, facebook / cpc, newsletter / email |
| key event | the action that matters for the business |
UTMs — know where every click comes from
The links you share (a newsletter, social, ads) get parameters:
https://site.com/course?utm_source=newsletter&utm_medium=email&utm_campaign=october-launch
| Parameter | Example |
|---|---|
utm_source |
newsletter, facebook, linkedin |
utm_medium |
email, social, cpc |
utm_campaign |
the campaign's name |
utm_content |
the variant (button A vs B) |
Don't put UTMs on internal links — it breaks the session's attribution. And set the canonical without parameters.
GDPR and consent
In the EU, analytics cookies need consent before they're set. You need a consent banner (a CMP) and Google Consent Mode v2, which tells the Google scripts what the user accepted.
Cookie-free alternatives, simpler from a legal point of view: Vercel Web Analytics, Plausible, Umami — fewer details, but no banner needed for analytics.
Summary
- Search Console = how Google sees you (searches, CTR, indexing); GA4 = what people do (events, conversions).
- A quick win: pages with many impressions and a low CTR → rewrite the title.
- UTMs on external links; consent in the EU, or cookie-free analytics.