SEO report template

An SEO report template as an Excel workbook with five tabs: twelve months of Search Console figures where CTR, conversion rate and every change column calculate themselves, query groups, page-level performance, and the report structure. A completed example is included as a PDF. It reports grouped query performance rather than individual keyword rankings, for reasons set out below.

  • TEMPLATE
  • XLSX
  • PDF
  • EXAMPLE
  • FREE
Best for
Anyone reporting non-paid search to a client, a manager or themselves
Includes
Excel workbook (5 tabs) + completed example (PDF)
Time to use
20 minutes to set up, 30 a month

Free to download and use in your own client work. No email address required.

Problems this solves

Recurring complaints about this task, and what this resource does about each one. If it does not solve your version of the problem, that is worth knowing before you download anything.

A client sees a keyword drop from #1 to #2 and treats it as a crisis
This reports grouped query performance from Search Console instead of individual rankings, and says plainly why: position varies by person, device and location, so a rank-tracker figure is one sample presented as a fact.
The client hands you eight keywords and wants only those tracked
The query-group tab gives you a better answer than refusing: branded, commercial, comparison, informational and navigational, each with clicks and conversions, so the conversation moves to which group produces enquiries.
Traffic is up and nobody can tell whether it mattered
Non-paid conversions sit above traffic in the report structure, deliberately. The completed example shows a month where clicks grew 9% and the real story was conversion rate.

Most SEO reports lead with traffic and a table of keyword rankings. Both are the wrong things to lead with, and the second one is close to indefensible.

This template leads with conversions from non-paid search, and reports grouped query performance instead of individual rankings.

Preview of the file

The monthly tab. Six yellow inputs per row from Search Console; CTR, conversion rate and both change columns calculate themselves. Month Clicks (input) Impressions (input) CTR (calculated) Avg position (input) Conversions (input) Conv. rate (calculated) Ref. domains (input) Indexed pages (input) Clicks MoM (calculated) Monthly Query groups Pages Report structure Column guide
The monthly tab. Six yellow inputs per row from Search Console; CTR, conversion rate and both change columns calculate themselves.

Why there are no keyword rankings in it

This is the part people push back on, so here is the reasoning.

An average position in Search Console is your own measured data across everyone who saw you. A rank-tracker number is a single check from one location on one device — and results are personalised, so two people searching the same term at the same moment see different pages. Reporting that number as a fact invites a conversation about why “we dropped to position 4”, which is often not a real event at all.

What to report instead

Grouped query performance. Split queries into branded, commercial, comparison, informational and navigational, then report clicks, position and conversions for each group. A total hides the story — branded growth and commercial decline average out to “flat” — and the group split makes the actual result visible.

What goes in the report

SectionWhat it containsWhy it is there
Headline One sentence: did non-paid search get better or worse this month, and by how much. Most readers stop here. If they cannot tell from this line, the report has failed regardless of what follows.
Non-paid conversions Conversions and enquiries from non-paid search, against the previous period and the same month last year. The only number the business genuinely cares about. It goes above traffic deliberately.
Traffic and visibility Clicks, impressions, average position and click-through rate from Search Console. Search Console is your own data rather than a tool estimate, which is why it is the source here.
Query groups Grouped queries — branded, commercial, informational — with clicks and position for each. A total hides the story. Branded growth and commercial decline can average out to "flat".
Page performance Pages gaining, pages losing, and pages that earned their first clicks this period. First-click pages are the earliest evidence new work is landing, usually weeks before totals move.
Technical health Indexed vs submitted, crawl errors, Core Web Vitals status, and anything newly broken. A technical problem is the one thing that can undo months of work between two reports.
Links earned New referring domains worth naming, and anything lost. Counts alone are noise. Three relevant domains beat forty scraped ones, and only naming them shows that.
Commentary What changed, why, and whether it was intentional. The part a blank template cannot give you, and the reason anyone keeps reading your reports.
Next actions Three at most, each with an owner and a date. A report with no action is a status update. Three is the most anyone acts on.

The order is deliberate. Conversions sit above traffic because nobody buys a session, and the headline sits above everything because most readers stop there.

What each column is for

ColumnWhat to put in it
Month One row per month. Twelve rows makes a trend readable instead of a snapshot.
Clicks Search Console clicks, non-paid only. Not sessions — they count differently.
Impressions From Search Console. Rising impressions with flat clicks means visibility without relevance.
CTR Calculated. Falling CTR at a stable position usually means the result no longer matches the query.
Avg position From Search Console. An average across queries, so treat a small move as noise.
Conversions From non-paid search specifically. Set this up before you need it.
Conv. rate Calculated. The check on whether extra traffic is the right traffic.
Ref. domains New referring domains this month. Name them in the report, do not just count them.
Indexed pages From the Search Console Pages report. A sudden fall is the most urgent thing on this sheet.
Every column in the Monthly tab. Six are inputs; the rest calculate.

Two of those are worth expanding. Impressions rising while clicks stay flat means you have gained visibility for queries you do not deserve to win — normal when a site grows, and not a problem unless CTR is falling on the queries that matter. And indexed pages falling suddenly is the most urgent line on the sheet: it is usually a technical change rather than an algorithm, and it is fixable within days if you notice.

The completed example

The PDF is one month for an invented business, written the way a report should be written. Two things in it are worth copying.

The query group table shows informational traffic as the largest group producing one enquiry, while commercial queries at under a quarter of the clicks produced twenty-six. That single table changes which work gets funded next quarter.

And the commentary states a decline and explains it — CTR fell year on year despite a better average position, because the site now appears for a wider set of queries. A decline you explained is a credibility gain. A decline the client finds themselves is how engagements end.

Mistakes, and what to do instead

MistakeWhat to do instead
Reporting keyword rankings for single terms Report grouped query performance from Search Console. Rankings differ by person, device and location, so a rank-tracker number is one sample presented as a fact.
Leading with traffic Lead with conversions from non-paid search. Traffic is an input; nobody buys a session.
No comparison period Compare with the previous period AND the same month last year. Seasonal businesses look broken every January without the year-on-year line.
Counting links instead of naming them Name the referring domains worth having. Forty scraped directories and three relevant sites are not the same result.
Sending a tool export A dashboard screenshot is not a report. If nobody wrote a sentence about what it means, nothing has been reported.
Hiding a decline State it in the headline with the reason. A decline you explained is a credibility gain; a decline they find themselves is the end of the engagement.

Using it in Google Sheets

File → Import, choose the workbook, and select “Replace spreadsheet”. Every formula here is standard — IFERROR, SUM, LOOKUP — so nothing breaks in the conversion. The yellow input shading survives; only the data validation dropdowns occasionally need reapplying.

If you would rather report every channel rather than search alone, the marketing report template is the same idea across paid, email and social, and the two are designed to sit alongside each other.