SEO report template for GA4 and Search Console
By the Analistable team · Updated · 3 min read
A free workbook with one sheet for a Search Console pages export, one for a GA4 landing page report and a Report sheet that joins them on URL path. Per page it shows clicks, impressions, CTR, position, sessions, engagement rate and key events, and flags low-CTR pages and pages with traffic but few conversions.
Part of our guide: How to join spreadsheets on a common column
What the template does
Search Console tells you how a page performs in Google; GA4 tells you what visitors did once they arrived. Neither shows both. This template lines the two exports up per page, the manual version of combining Google Analytics and Search Console data. The join itself is a standard lookup, covered in the joining spreadsheets guide.
Sheet-by-sheet guide
| Sheet | Columns | You fill in? |
|---|---|---|
| Instructions | Step, What to do | No |
| Search Console | Page, Clicks, Impressions, Position, Path | First four columns |
| GA4 | Landing page, Sessions, Engaged sessions, Key events | Yes |
| Report | Page, Clicks, Impressions, CTR, Position, Sessions, Engagement rate, Key events, Flag | No — fully calculated |
How to fill it in
- In Search Console, open Performance → Search results → Pages, set the date range and export. Paste Page, Clicks, Impressions and Position.
- In GA4, open Reports → Engagement → Landing page for the same dates, and export Landing page, Sessions, Engaged sessions and Key events. Use the Organic Search session default channel group filter if you only want search traffic.
- The Path column strips the domain from the Search Console URL so it matches GA4's landing page format.
- Extend the Report rows if you have more than seven pages.
Query strings are a common mismatch: GA4 may show /pricing?ref=nav while Search Console shows /pricing. Remove parameters in GA4 before pasting.
How the formulas work
The Path helper finds the first slash after 'https://' and keeps the rest:
=IFERROR(MID(A2,FIND("/",A2,9),300),A2)GA4 sessions are summed by path, so duplicate landing page rows still add up:
=SUMIFS(GA4!$B$2:$B$500,GA4!$A$2:$A$500,A2)The flag checks CTR first, then conversions per session:
=IF(AND(C2>=5000,D2<0.03),"Low CTR",IF(AND(F2>=500,IFERROR(H2/F2,0)<0.01),"Traffic, few conversions","OK"))Worked example
| Page | Clicks | Impr. | CTR | Pos. | Sessions | Eng. rate | Key events | Flag |
|---|---|---|---|---|---|---|---|---|
| / | 820 | 14000 | 5.86% | 3.1 | 2600 | 65.0% | 52 | OK |
| /pricing | 410 | 5200 | 7.88% | 4.2 | 980 | 73.5% | 41 | OK |
| /blog/merge-excel-files | 1250 | 38000 | 3.29% | 6.8 | 1400 | 65.0% | 9 | Traffic, few conversions |
| /blog/vlookup-guide | 960 | 41000 | 2.34% | 8.9 | 1050 | 53.3% | 6 | Low CTR |
| /features | 150 | 3900 | 3.85% | 7.5 | 400 | 75.0% | 9 | OK |
| /blog/csv-tips | 85 | 9600 | 0.89% | 14.2 | 110 | 45.5% | 0 | Low CTR |
| /contact | 40 | 600 | 6.67% | 2 | 260 | 88.5% | 31 | OK |
Two blog posts earn plenty of impressions but few clicks, so their titles are the first thing to test. The merge guide gets traffic but rarely leads to a key event, which points at the page's call to action rather than its ranking. For trends over time, find pages losing clicks by comparing two periods.
Limits and when to move on
Sessions in GA4 and clicks in Search Console are counted differently, so they will never match exactly. The template also covers one site and one date range. For monthly reporting across several sites, connect GA4 and Search Console to Analistable instead: the reports are fetched server-side, loaded into your browser, and you can ask questions such as 'pages with over 5,000 impressions and CTR below 2%' without exporting.
Frequently asked questions
- Why are some pages missing GA4 sessions?
- The paths don't match exactly — check trailing slashes, query strings and upper case. Or the page had no sessions in the GA4 date range.
- Should I use the Organic Search channel only?
- For an SEO report, yes: filter the GA4 landing page report to the Organic Search channel so sessions relate to Search Console clicks.
- Can I change the flag thresholds?
- Yes. Edit 5000 (impressions), 0.03 (CTR), 500 (sessions) and 0.01 (key events per session) in the Flag formula.