What does an organic visibility overview dashboard show in Metabase?
An organic visibility overview dashboard shows how a tracked keyword portfolio is performing: keywords in the top 3, 10, and 20, volume-weighted average position, estimated organic traffic, and share of voice — built from rank-tracker data synced from Ahrefs, Semrush, or SE Ranking. It is the tracked-keyword counterpart to the measured organic search performance dashboard, and the summary view of SEO analytics in the warehouse.
For: SEO leads and growth teams reporting search visibility to stakeholders. Grain: one row per keyword × domain × snapshot date, in a seo_keyword_positions table.
Which cards belong on an organic visibility overview dashboard?
Keywords in top 3 / top 10 / top 20 over time (line)
Volume-weighted average position trend (line)
Estimated organic traffic trend (line)
Striking-distance keywords — positions 11–20 by volume (table)
Share of voice vs. tracked competitors, latest snapshot (bar)
Position distribution, latest snapshot (bar)
Keywords entering and leaving the top 10 this week (table)
SERP features held — snippets, AI overviews, packs (table)
What data does the dashboard need?
seo_keyword_positions — keyword, target_domain, stat_date, position, search_volume, estimated_traffic, serp_features — one row per keyword per domain per snapshot.
A keyword-to-topic mapping table, so bucket counts and weighted position can be sliced by content area.
Competitor domains tracked in the same campaigns, if the share of voice card should be more than a single bar.
Rank trackers don't backfill: history starts the day a tracking campaign starts. Create projects and the warehouse sync before you need the trend, and keep the tracked keyword set fixed so week-over-week numbers compare like with like.
How do you build it?
Sync keyword positions to the warehouse — no managed connector exists for the major SEO suites, so schedule a small script against the Ahrefs, Semrush, or SE Ranking API landing daily snapshots.
Freeze the core keyword set and add a topic-mapping table; put experimental keywords in a separate campaign.
Model bucket counts (top 3/10/20), volume-weighted position, and summed estimated traffic per snapshot date in a view.
Assemble the cards with a topic filter, and label modeled numbers (estimated traffic, share of voice) so nobody reads them as measured clicks.
Example card SQL
Visibility buckets, weighted position, and estimated traffic by dayPostgreSQL
SELECT
stat_date,
COUNT(*) FILTER (WHERE position <= 3) AS top_3,
COUNT(*) FILTER (WHERE position <= 10) AS top_10,
COUNT(*) FILTER (WHERE position <= 20) AS top_20,
ROUND(
SUM(position * search_volume)::numeric
/ NULLIF(SUM(search_volume), 0), 1
) AS volume_weighted_position,
SUM(estimated_traffic) AS estimated_traffic
FROM seo_keyword_positions
WHERE target_domain = 'yourdomain.com'
GROUP BY 1
ORDER BY 1;
SELECT
keyword,
position,
search_volume,
estimated_traffic,
serp_features
FROM seo_keyword_positions
WHERE target_domain = 'yourdomain.com'
AND stat_date = (
SELECT MAX(stat_date) FROM seo_keyword_positions
)
AND position BETWEEN 11 AND 20
ORDER BY search_volume DESC
LIMIT 25;
How is this different from the organic search performance dashboard?
Source and meaning. The organic search performance dashboard is measured: real clicks and impressions Google logged for every query you appeared for, from Search Console. This one is tracked: positions and modeled traffic for a keyword set you chose, from a rank tracker like Ahrefs or Semrush. Tracked data covers competitors and keywords you don't rank for yet — things GSC cannot see — but its traffic numbers are estimates. Run both: GSC for outcomes, this one for the competitive map.
Why doesn't estimated organic traffic match GSC or GA4?
Because it isn't measured anywhere — vendors model it as search volume × a click-through-rate curve applied to your position, summed over tracked keywords. It moves when rankings move, which makes it a good directional trend line, but it will not reconcile with Search Console clicks or GA4 sessions and should never be reported as if it did. Keep modeled and measured numbers on separate cards with clear labels.
Why does the trend start on a specific date?
Rank trackers only collect positions from the day a tracking campaign starts — there is no backfill. History begins when you create the project in SE Ranking, Ahrefs, or Semrush and starts syncing snapshots to the warehouse. That is the strongest argument for setting up tracking (and the sync) well before you need the trend, and for never deleting a campaign you might want history from later.
Should the tracked keyword set change over time?
Not the one driving the trend cards. Every card on this dashboard is an aggregate over the keyword set, so adding 200 keywords mid-quarter makes counts jump and weighted position lurch for reasons that have nothing to do with rankings. Keep a fixed core set for trends, and put new research keywords in a separate campaign or a separate filter until an annual review. When you must change the core set, annotate the date on the dashboard.
What is volume-weighted average position?
A plain average position treats a 10-searches-per-month keyword the same as a 10,000-per-month one, so it rewards ranking well for keywords nobody searches. Weighting each position by search volume makes the number track visibility where demand actually is: SUM(position × volume) / SUM(volume). Pair it with the keywords in top 10 count — the weighted average says where the portfolio sits, the bucket counts say how it is distributed.