Metric · SEO

What is share of voice in SEO, and how do you measure it in Metabase?

Share of voice is your percentage of the organic visibility available across a fixed keyword set, measured against named competitors. Each ranking is weighted by search volume and an expected CTR for its position, then divided by the total across all players — turning a pile of rankings into the closest thing SEO has to a market share.

TL;DR — SoV is a comparative metric built on two frozen inputs: a fixed keyword-and-competitor set and an assumed CTR-by-position curve (position 1 ≈ 28%, top 3 ≈ 15%, top 10 ≈ 5% is a common one). Change either input and the trend breaks; keep them fixed and the relative shares are robust even though the absolute percentages are soft.

What share of voice measures

Rankings alone can't tell you whether you're winning, because everyone's rankings live on the same ten-slot page. Share of voice reframes the question competitively: of the clicks this keyword set is expected to produce, what fraction lands on each domain? Volume weighting puts the emphasis where demand is, and the CTR curve converts positions into expected clicks — position 1 on one head term can outweigh page-one rankings on fifty long-tail keywords.

The CTR curve is an assumption, and honesty about that is what keeps the metric useful. Because the same curve applies to every competitor, errors largely cancel in the comparison: the absolute percentage is soft, but who is gaining on whom — the thing SoV exists to show — is reliable as long as the keyword set, competitor set, and curve stay frozen.

What data does it need?

  • A seo_keyword_positions table covering every tracked domain — yours and competitors — with keyword, target_domain, stat_date, position, and search_volume.
  • A frozen, versioned keyword set and competitor list, with changes annotated and history restated when either changes.
  • Optionally, similarweb_traffic_monthly with domain, month, and visits for the market-traffic-share variant.

SQL patterns

Volume- and CTR-weighted share of voice by snapshot datePostgreSQL
WITH weighted AS (
  SELECT
    stat_date,
    target_domain,
    SUM(
      search_volume * CASE
        WHEN position = 1 THEN 0.28
        WHEN position <= 3 THEN 0.15
        WHEN position <= 10 THEN 0.05
        ELSE 0
      END
    ) AS weighted_visibility
  FROM seo_keyword_positions
  WHERE stat_date >= CURRENT_DATE - INTERVAL '6 months'
  GROUP BY 1, 2
)
SELECT
  stat_date,
  target_domain,
  ROUND(
    100.0 * weighted_visibility
      / NULLIF(
        SUM(weighted_visibility) OVER (PARTITION BY stat_date),
        0
      ),
    1
  ) AS share_of_voice_pct
FROM weighted
ORDER BY stat_date, share_of_voice_pct DESC;
Market traffic share vs. competitors from Similarweb estimatesPostgreSQL
SELECT
  month,
  domain,
  visits,
  ROUND(
    100.0 * visits
      / NULLIF(SUM(visits) OVER (PARTITION BY month), 0),
    1
  ) AS traffic_share_pct
FROM similarweb_traffic_monthly
WHERE domain IN (
  'yourdomain.com', 'competitor-a.com', 'competitor-b.com'
)
  AND month >= CURRENT_DATE - INTERVAL '24 months'
ORDER BY month, traffic_share_pct DESC;

Pitfalls

Changing the keyword or competitor set mid-trend.→ Add keywords you happen to rank for, or drop a strong competitor, and your share rises with no competitive change at all — shares are relative, so editing the denominator is editing the result. Version both sets, annotate changes, and restate history whenever either changes materially.
Treating the CTR curve as measured truth.→ The 28/15/5 weights are aggregate assumptions; real click curves vary by query type, SERP features, and brand strength. Present SoV as expected-visibility share, not predicted clicks, document the curve you chose, and resist re-tuning it often — a changed curve silently rewrites the whole series.
Comparing SoV numbers across different tools.→ Semrush, SE Ranking, and a hand-rolled DataForSEO pipeline each use their own keyword sets, volume estimates, and click curves — a 24% here and a 31% there are not the same quantity. Pick one methodology, trend it consistently, and never mix vendors' shares on a single chart.
Weighting by keyword count instead of volume.→ Counting keywords treats a 10-searches-a-month term as equal to a 10,000-a-month head term, so a long-tail-heavy competitor looks dominant while losing everywhere it matters. Weight by search volume times the CTR curve — the entire point of SoV is measuring visibility where demand actually is.

Where this metric applies

Metrics

Dashboards

FAQ

How is SEO share of voice calculated?
Take a fixed keyword set, look up who ranks where, and weight each ranking by the keyword's search volume times an expected click-through rate for that position. Sum per domain, divide by the sum across all competing domains on the same date, and you get each player's percentage of the available organic visibility. The whole construction stands on two frozen inputs — the keyword set and the CTR curve — which is why changing either breaks the trend.
Where do the CTR-curve weights come from?
They are assumptions, not measurements. Curves like position 1 ≈ 28%, top 3 ≈ 15%, top 10 ≈ 5% come from aggregate click studies, and the real curve varies by query type, SERP layout, and brand. That imprecision is acceptable because share of voice is a comparative metric — the same curve applies to every competitor, so relative position and trend hold up even when absolute percentages are soft. Calibrate against your own organic CTR data if you want tighter weights, but document whatever you use.
How is share of voice different from average position?
Average position describes only your rankings; share of voice describes your rankings relative to everyone else's, weighted by where the demand is. That makes SoV the metric that catches competitive drift: your positions can hold perfectly still while a competitor climbs past you on the highest-volume keywords, and only the share number moves. It's the closest SEO gets to a market-share statement.
Can share of voice be measured with traffic instead of rankings?
Yes — the market-share variant divides each competitor's estimated visits by the total across the tracked set, using panel-based estimates from Similarweb. It answers a broader question (share of all traffic, not just tracked-keyword visibility) and needs no CTR curve, at the cost of relying on modeled traffic estimates. Running both views side by side on a share-of-voice dashboard is the strongest setup: rankings explain what traffic share merely reports.
How do you track share of voice in Metabase?
Sync keyword positions for your domain and named competitors — from Semrush position tracking or DataForSEO SERP snapshots, which capture every ranking domain per keyword — into a SQL database, then compute the weighted share with a CTE and window function per snapshot date. Chart it as a stacked area by domain, next to the Similarweb traffic-share variant for the market view.