← All posts

SEO reporting that holds up and how to prove a change worked


A useful SEO report gives leadership a short answer to one question, whether organic search is producing more for the business than before and at what cost, and gives the team a separate set of diagnostics that explain why. When someone asks whether a specific change worked, answer with a comparison group and a stated level of confidence, not a before-and-after chart.

Reports go wrong when those jobs blur. Rankings tables end up in board decks, revenue never reaches the team's dashboard, and every traffic swing gets credited to whatever shipped most recently. The sections below cover the leadership page, the Search Console limits that belong in every footnote, a diagnostic for falling click-through rate, and the evidence ladder for proving impact.

The page leadership reads

Keep it to one page with five or six numbers, each trended and each with one sentence of interpretation. The table is a template: every row names the question it answers, so anything that does not answer a question leadership asked can move to the appendix.

SectionQuestion it answersWhere the number comes from
Organic revenue or pipelineIs search earning more for the business?Analytics or CRM, organic channel
Non-brand clicks, year over yearIs the site reaching people who did not know the brand?Search Console branded queries filter
Cost per acquisition against paid searchIs organic a cheaper way to win customers?Program cost divided by organic conversions
Share of search in the categoryIs the site gaining on named competitors?Rank tracker visibility or brand search share
What shipped and what movedDid the work change anything?Annotation log and test results
Next quarter's betsWhat should be funded, and what will it change?Roadmap with expected effect and confidence

If AI assistants matter in your category, the share-of-search row can also carry AI referral visits and a monthly check of which sources assistants cite for your core questions.

Compare against the same period last year, not just the previous month, or seasonality will write half your commentary. Search Console keeps 16 months of performance data, enough for one year-over-year comparison and not much more, which is one reason to export it, covered below.

Attribution needs a sentence on the page too. Last-click reports undercount search when people research through organic results and return later by typing the address or clicking an email. Report the model you use and keep it stable between reports. If tracking itself is shaky, fix that first; the comparison of gtag.js and Google Tag Manager covers the setup choice.

Some numbers look like progress and belong nowhere near this page.

  • Third-party authority scores are vendor estimates of link strength, not Google metrics. A score can climb in a quarter when organic revenue falls.

  • A count of ranking keywords grows every time a page starts ranking at position 70 for something irrelevant.

  • Sitewide average position blends unrelated queries. Search Console computes it from the topmost result for each query, so a site that starts ranking at position 40 for hundreds of new long-tail queries sees its average get worse while every existing ranking holds.

  • Impressions growth on its own can come from queries the site has no realistic chance of winning clicks for.

Here is a hypothetical case that shows why the brand split leads the page. Say a retailer runs a television campaign in the spring. Organic clicks rise sharply and the report calls it a record quarter. Split by brand, the picture changes: branded clicks doubled because people typed the company name after seeing the advert, and non-brand clicks were flat. The SEO program did not lose that quarter, but it did not win it either, and only the split shows that.

Reading Search Console without fooling yourself

Search Console is the closest thing to ground truth for Google traffic. It also has limits that should sit in a footnote of every report that uses it.

Start with the brand split. Search Console now has a branded queries filter in the Performance report, announced in November 2025 and available to all eligible sites from March 2026. Google classifies queries with an AI-assisted system that catches brand names in any language, misspellings, and queries for products unique to the site. It is available only for top-level properties with enough query volume, and Google warns that some queries will be misclassified. Where it is not available, or where your definition of brand differs, a regex filter on the query is the fallback. Large properties also get query groups in Search Console Insights, which cluster variations of the same question so trends are easier to read.

Then account for what the data leaves out. Google's explainer on performance data filtering and limits explains the two big ones.

  1. Anonymized queries, those not issued by more than a few dozen users over two to three months, never appear as rows. They are counted in chart totals but dropped whenever you apply a query filter, so a regex for brand plus its inverse will not add up to the total. On long-tail sites the gap is large.

  2. Row limits. The interface exports up to 1,000 rows, and the API returns up to 50,000 rows per day per site per search type. Large sites lose part of the tail in both.

The way around the row limits is bulk data export to BigQuery, which sends a daily dump of all performance data except anonymized queries and is not subject to the row limit. It runs on an ongoing basis from the day you set it up, so the history you can query later depends on when you start. Starting now is cheaper than wishing you had.

Two smaller caveats round it out. The most recent data is preliminary and can change, so do not report on a period that closed yesterday. And Google's page on AI features says clicks and impressions from AI Overviews and AI Mode are counted inside the Web search type, alongside everything else, so a shift in informational queries can reflect a change in the results page itself.

When click-through rate falls and position holds

A falling click-through rate with a stable average position often means something changed on the results page rather than on your site. Work through the causes in this order, because the early checks are the quickest.

  1. Find where the drop sits. Filter to the queries and pages that lost clicks; a drop concentrated in one template points somewhere different from a drop spread across the site.

  2. Compare queries at the same position. If some position-three queries still earn healthy clicks and others do not, the difference is in the results pages.

  3. Look at the live results page for the queries that fell, and at your rank tracker's history of which features appear. New ads, an AI Overview, a video block or a shopping unit above the links all take clicks without moving your position.

  4. Check how your listing renders. Google may be rewriting the title; why Google rewrites title tags covers the causes and fixes.

  5. Check for lost rich results with the Search appearance filter. A template change that broke review or product markup removes stars and prices overnight; the guide to schema types that still earn rich results covers what to check.

  6. Separate brand from non-brand. A rise in searches for the brand name lifts CTR, and when it ends CTR falls back.

  7. Check demand. If impressions fell too, the topic may be seasonal or fading, and CTR is a symptom.

Segmenting the keyword set by results-page layout, not just by position, makes the numbers explain themselves. The table describes how to read the same stable position on different layouts.

Results page above your listingWhat a stable position meansWhat to do
Ten links, nothing aboveCTR should track positionLook at your title and snippet
Ads and an AI OverviewLikely fewer clicks for every organic resultJudge by conversions, not clicks
A featured snippet your page holdsYour result likely takes a larger shareProtect the passage it quotes
A newly added video or shopping blockSome clicks may move into the new blockDecide whether to compete in that format

Some queries will turn out to give almost nothing back to any site. Moving effort from those to queries where visits are still available is a legitimate recommendation, and the layout segment is the evidence for it.

Proving a change worked

Annotate before you need to

Every report that explains a traffic change starts with a timeline. Search Console added custom annotations to its performance charts in November 2025: right-click the chart, add a note of up to 120 characters with a date, and it shows for everyone with access to the property, so leave out anything sensitive. Keep a fuller log alongside it, because 120 characters will not hold scope or expectations.

DateChangePages affectedOwnerExpected effectMetric to watch
2026-03-02New title template1,200 city pagesContentHigher CTR, same positionCTR on those pages
2026-03-16robots.txt update/search/ pathsEngineeringFewer crawled parameter URLsCrawl requests in logs
2026-04-07Competitor launches comparison pagesCategory pagesExternalPossible loss of clicksNon-brand clicks

The rows above are invented, to show the format. Log external events as well as your own releases, including any confirmed Google update, but do not treat an empty Search Status Dashboard as proof that nothing changed: Google's core updates documentation says it continually makes smaller core updates that are not announced. Migrations need the most careful logging of all; the site migration checklist covers what to record before and after launch.

Match the method to the evidence available

The strongest claim you can make depends on how many comparable pages the change touched.

SituationMethodWhat you can claim
Hundreds of pages on one template, steady trafficPage-group split testA causal estimate with an interval
Dozens of similar pagesChanged set against an untouched comparison setA direction, with caveats stated
One page or a sitewide changeAnnotated before and after, year over yearTiming only, and the report should say so

How a page-group split test works

SEO tests split pages, not people. Ordinary user A/B tests are allowed in Google Search as long as you follow Google's guidance on website testing: no cloaking, rel="canonical" on alternate test URLs, 302 rather than 301 redirects, and tests that run only as long as needed. But Googlebot sees one version of the page, so a user test measures how visitors behave, not what the change does to organic rankings.

A page-group test takes many similar pages on one template, assigns them at random to a control bucket and a variant bucket, applies the change to the variant only, and compares the two over the following weeks. Anything that hits the whole site during the test, an algorithm update or a seasonal swing, hits both buckets. The usual analysis builds a forecast of what the variant bucket would have done without the change, from its own history and the control bucket's actual traffic, and measures the gap. Google's open-source CausalImpact package implements this approach, and it rests on one assumption you must protect: the control pages are not affected by the change.

Scale is the prerequisite. SearchPilot, a vendor of SEO testing software, publishes guidance of at least hundreds of pages on the same template and around 30,000 organic sessions a month to the tested group, with most tests reaching significance in two to four weeks. Smaller sections can be tested, but only large effects will show.

A worked example, entirely hypothetical. A travel site has 1,200 city pages on one template. It assigns 600 to each bucket at random, then checks the previous 100 days and finds that the two buckets' daily clicks moved together, which is the A/A check. It rewrites the title template on the variant pages only, confirms in the logs that Googlebot has recrawled most of them, and then counts four full weeks. At the end, variant clicks sit above the forecast and the interval around the gap does not include zero, so the change ships to the control pages too. Had the interval spanned zero, the right summary would be "no detectable effect at this scale", not "titles do not matter".

Before starting any test, run through this list.

  • Every page in the test shares a template and a search intent.

  • Assignment is random, and the buckets tracked each other before the change.

  • The test changes one thing.

  • The primary metric is chosen in advance, such as CTR for a title test.

  • The duration is fixed in advance and covers recrawl time plus full weekly cycles.

  • No other release touches those templates during the test.

  • The ship date is annotated.

Fixing the duration matters more than it sounds. Checking daily and stopping the moment the numbers look good is a reliable way to ship noise, because random swings cross any threshold if you look often enough.

Sites without enough pages for a split can still do better than two screenshots of date ranges. Change one thing at a time on a defined set of pages, compare against similar pages left alone, watch the metric closest to the change first, and wait until the affected pages have been recrawled before judging.

Saying how sure you are

SEO results come from a system nobody outside Google can observe fully, so every claim in a report should carry its confidence. Three levels cover most situations.

ConfidenceEvidence that earns itExample wording
HighA split test, or a clean comparison set"The title change lifted CTR on city pages"
ModerateTiming matches and other explanations were checked"Most likely driven by the internal linking release"
LowOverlapping causes that cannot be separated"A core update and the migration landed the same fortnight"

Forecasts work the same way. Give a range, name the assumptions, and open each quarter's report by grading the last forecast. Leadership expectations about timing are their own conversation; how long SEO takes is a useful reference when that comes up.

A concrete next step for the coming week: switch on bulk data export if it is not running, add the last three months of releases to Search Console as annotations, and rebuild the leadership page around the six questions in the first table.