{
  "slug": "overall-average-rank",
  "name": "Overall average rank",
  "aliases": [
    "Site average position across tracked keywords"
  ],
  "definition": "The mean of your per-keyword average ranks across every tracked keyword where your site holds a position, as a single headline figure.",
  "category": "Competitive SERP",
  "type": "derived metric",
  "unit": "results-page position (1 is best; higher is worse)",
  "direction": "lower-better",
  "verification": "verified",
  "calculation": "Each keyword's impression-weighted average rank is collected, rows without a position are dropped, and the remaining values are summed and divided by the number of keywords, rounded to two decimal places. Computed in the MCP over the returned rows. Note the weighting boundary: each keyword's own value is impression-weighted, but this mean over keywords is not, every keyword counts once.",
  "numerator": "sum of the per-keyword average ranks",
  "denominator": "count of tracked keywords with a position",
  "aggregation": "Already an aggregate. Do not average it again across periods or segments; recompute from the keyword rows.",
  "grain": "One segment × period × medium, across the segment's tracked keywords.",
  "dimensions": [
    "device",
    "country",
    "brand"
  ],
  "requiredFilters": [
    "segment_id",
    "selected_period",
    "source_medium"
  ],
  "sources": [
    "rank-tracking"
  ],
  "reports": [
    "competitor-search-report",
    "keyword-ranking-report",
    "serp-volatility-report"
  ],
  "skills": [
    "rank-movement-review",
    "market-share-review",
    "competitor-deep-dive"
  ],
  "verbs": [
    "competitive_keyword_ranking"
  ],
  "rungs": [
    "R2"
  ],
  "levers": [
    "L2",
    "L3"
  ],
  "questions": [
    "What is our average position across tracked keywords?",
    "Did our overall ranking improve this period?"
  ],
  "interpretation": "A directional headline only. Because every keyword counts equally, a long tail of low-demand keywords can move it while the keywords that matter sit still. Treat a move as a prompt to look at the keyword rows, not as a result.",
  "caveats": [
    "Unweighted across keywords: the demand behind each keyword is discarded at this step, even though it shaped each keyword's own value.",
    "The keyword rows it averages come from a single five-thousand-row read spanning every tracked domain in the segment, so a wide segment or a long roster silently truncates the set the mean is taken over.",
    "Keywords whose position resolves to zero are dropped before the mean. That filter is load-bearing: the semantic layer defaults a keyword with no impressions to zero, and counting those rows would drag the average toward one.",
    "The denominator is the count of keywords with a position, so keywords entering or leaving the tracked set move the figure by themselves.",
    "It is scoped to one segment's tracked keywords, never to the whole site."
  ],
  "freshness": "~1 day behind, Daily observation, available the following day.",
  "failureModes": [
    "Reporting it as \"our average position\" without the tracked-keyword scope.",
    "Comparing it across periods in which the tracked keyword set changed."
  ],
  "notSameAs": [
    {
      "slug": "avg-rank-vs-competitors",
      "why": "The per-keyword figure is impression-weighted; this mean over keywords is not, so the two answer different questions and can move in opposite directions."
    }
  ],
  "related": [
    "avg-rank-vs-competitors",
    "ranked-keyword-coverage",
    "head-to-head-rank-gap"
  ],
  "workflows": [],
  "lastVerified": "2026-08-04"
}