SEO KPIs & Reporting
Visibility, engagement, conversion, brand, and AI visibility metrics for SEO. Looker Studio dashboards, executive-friendly client reports, and the metrics that survive contact with the CFO.
The CFO does not care that you ranked #4 for “best CRM software.” She cares whether SEO is profitable. SEO reporting in 2026 is the discipline of translating the technical reality of search into the financial reality of a business — and doing it on a dashboard the executive team will actually open.
TL;DR
- Five KPI tiers: visibility, engagement, conversion, brand, and AI visibility. Every report should be a balanced scorecard across all five — not a wall of impressions.
- Branded vs non-branded must be split. A 40% YoY growth in organic clicks is meaningless if it is all branded traffic following a TV campaign.
- Looker Studio is the right tool for 95% of SEO dashboards. It is free, connects natively to GSC, GA4, and BigQuery, and is the format C-suites are already trained to read.
The mental model
SEO reporting is like a dashboard in a car. The driver does not need every sensor reading — they need the four gauges that tell them whether to keep going, slow down, or pull over. Tachometer, speedometer, fuel, temperature. Everything else is diagnostic, not strategic.
This matters because the failure mode of SEO reporting is not “we did not measure enough.” It is “we measured everything and surfaced nothing.” A 40-page deck of every keyword’s rank change tells a CMO nothing they can act on. A single chart showing branded vs non-branded organic revenue against forecast tells them everything.
The other half of the mental model: the audience determines the metric. The same SEO program produces three reports — a tactical operator dashboard with crawl errors and indexing states, a strategic stakeholder dashboard with traffic and revenue trends, and an executive scorecard with three numbers. Different cuts of the same underlying data, never one report rolled up to all audiences.
Deep dive: the 2026 reality
The KPI stack you actually need looks like this.
1. Visibility metrics.
| Metric | Source | What it answers |
|---|---|---|
| Impressions (branded vs non-branded) | GSC | Did Google show our pages more? |
| Average position | GSC | Are we trending up or down on the queries that matter? |
| Share of voice | Ahrefs / Semrush / AccuRanker | What percent of available demand are we capturing? |
| Indexed URLs | GSC Indexing report | Is our crawlable surface area growing or shrinking? |
2. Engagement metrics.
| Metric | Source | What it answers |
|---|---|---|
| CTR by query/page | GSC | Are titles/descriptions earning the click? |
| Engagement rate | GA4 | Did the click deliver value? |
| Average engagement time | GA4 | Is the content holding attention? |
| Pages per session | GA4 | Is internal linking working? |
3. Conversion metrics.
| Metric | Source | What it answers |
|---|---|---|
| Organic Key Events | GA4 | How many leads/signups/purchases? |
| Organic revenue | GA4 + CRM | Top-line dollars |
| CPL / CPA | Finance + GA4 | Unit economics |
| Pipeline created | CRM (Salesforce, HubSpot) | Lagging quality indicator |
4. Brand metrics.
| Metric | Source | What it answers |
|---|---|---|
| Branded search volume | Google Trends / GSC | Is awareness growing? |
| Branded vs non-branded split | GSC + regex | Is non-branded the engine? |
| Direct sessions | GA4 | Direct + branded together = brand strength |
5. AI visibility metrics — the 2026 addition.
| Metric | Source | What it answers |
|---|---|---|
| AI Overviews impressions | GSC Search Appearance | Are we cited in generative SERPs? |
| AI Mode impressions | GSC Search Appearance | Are we surfaced in Google AI Mode? |
| Citation share in ChatGPT/Perplexity/Claude | Profound, Otterly, Peec AI | What share of AI answers cite us? |
| AI traffic referrals | GA4 (referrer = chatgpt.com, perplexity.ai, etc.) | Real clicks from AI answers |
Every one of these has caveats. AI Overviews impressions are logged when your page appears in the source carousel, not when the user actually reads the answer. Citation share tools poll prompts on a schedule and infer share from the sample — they are directional, not census-grade. Treat AI metrics as new and noisy until you have 90+ days of trend data.
Branded regex. The single most important piece of regex an SEO writes:
(?i)\b(brandname|brand-name|brandnamehq|brandnameapp|brandname\.com)\b
Apply it as a negative match to the GSC query field to isolate non-branded queries. Apply it as a positive match for the branded report. Tune it by inspecting the top 100 queries to catch typos and variants.
Visualizing it
flowchart TD
A[Raw data sources] --> B[GSC Bulk Export]
A --> C[GA4 BigQuery export]
A --> D[CRM API]
A --> E[Rank tracker API]
A --> F[AI visibility tool API]
B --> G[BigQuery dataset]
C --> G
D --> G
E --> G
F --> G
G --> H[Looker Studio]
H --> I[Operator dashboard]
H --> J[Stakeholder dashboard]
H --> K[Executive scorecard]
Bad vs. expert
The bad approach
The agency exports a CSV from GSC, drops it into PowerPoint, and writes “organic traffic +12% MoM” on the title slide. The deck has 30 slides, no breakdown of branded vs non-branded, and no link between SEO activity and business outcome.
Slide 1: Organic traffic +12% MoM
Slide 2: Top 10 keywords (vanity list)
Slide 3: Bounce rate down 2%
Slide 4: Page 1 rankings (count: 47, up from 41)
[...]
Slide 30: "Continue executing on the strategy"
This fails because the +12% might be entirely branded growth driven by paid media or a press cycle, the rankings count is a vanity stat (#1 for a zero-volume keyword counts the same as #1 for “auto insurance”), and bounce rate is a metric the executive team neither understands nor trusts.
The expert approach
A Looker Studio dashboard with three pages tied to a BigQuery dataset that joins GSC, GA4, CRM, and rank tracker data. The exec page is one screen. The stakeholder page expands to trends. The operator page exposes crawl/index health.
-- BigQuery: branded vs non-branded clicks and revenue, last 90 days
WITH gsc AS (
SELECT
data_date,
query,
SUM(clicks) AS clicks,
SUM(impressions) AS impressions,
REGEXP_CONTAINS(LOWER(query), r'\b(brandname|brand-name|brandnameapp)\b') AS is_branded
FROM `project.searchconsole.searchdata_url_impression`
WHERE data_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY)
GROUP BY data_date, query
),
revenue AS (
SELECT
PARSE_DATE('%Y%m%d', event_date) AS event_date,
SUM(ecommerce.purchase_revenue) AS revenue
FROM `project.analytics_123456789.events_*`
WHERE event_name = 'purchase'
AND traffic_source.medium = 'organic'
AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
GROUP BY event_date
)
SELECT
gsc.data_date,
SUM(IF(is_branded, clicks, 0)) AS branded_clicks,
SUM(IF(NOT is_branded, clicks, 0)) AS nonbranded_clicks,
ANY_VALUE(revenue.revenue) AS daily_revenue
FROM gsc
LEFT JOIN revenue ON gsc.data_date = revenue.event_date
GROUP BY data_date
ORDER BY data_date;
This works because the executive sees one chart of non-branded clicks against revenue (the line that only SEO can move), the stakeholder sees the trend with annotations of major launches, and the operator sees the underlying queries.
Do this today
- Open Looker Studio (
lookerstudio.google.com) and create a new report. Add three data sources: Search Console (Site Impression and URL Impression as separate sources), GA4, and your BigQuery dataset. - Build page 1: Executive scorecard. One scorecard each for non-branded clicks, organic Key Events, organic revenue, and AI Overviews impressions. Trend lines overlaid. Comparison: previous 90 days.
- Build page 2: Stakeholder trends. Time-series charts of clicks, impressions, average position, engagement rate by content cluster (use a calculated field with regex on
Landing page). Annotate with launch dates. - Build page 3: Operator detail. Top 100 pages by impression delta WoW, top 100 queries gaining and losing, indexing state counts, Core Web Vitals pass rate.
- Define your branded regex in BigQuery as a saved view:
r'(?i)\b(yourbrand|your-brand|yourbrandapp|yourbrand\.com)\b'. Use it as a calculated field in Looker Studio:CASE WHEN REGEXP_MATCH(Query, "...") THEN "Branded" ELSE "Non-branded" END. - Connect a rank tracker (AccuRanker, SE Ranking, Ahrefs Rank Tracker) via its Looker Studio connector. Add a share of voice widget on the stakeholder page.
- Connect an AI visibility tool (Profound, Otterly, Peec AI, or AthenaHQ) — most have native Looker Studio connectors as of late 2025. Add an
AI citation sharechart by competitor. - Schedule email delivery of the executive page weekly to leadership and monthly to the board. Use Looker Studio’s Schedule email with PDF attached.
- Document each metric’s definition in a Notion or Confluence page linked from the dashboard footer. Numbers without definitions are how you lose stakeholder trust.
- Set annotations in Looker Studio for every algorithm update (Google core updates, AI Mode rollouts), every site launch, and every major piece of content. Future-you will thank present-you.
Mark complete
Toggle to remember this module as mastered. Saved to your browser only.
More in this part