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
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;