{
  "slug": "head-to-head-rank-gap",
  "name": "Head-to-head rank gap",
  "aliases": [
    "Position gap vs a rival",
    "Rank difference"
  ],
  "definition": "The difference in average results-page position between your site and one named competitor on the same tracked keyword.",
  "category": "Competitive SERP",
  "type": "derived metric",
  "unit": "rank positions (positive means we rank worse than the rival)",
  "direction": "lower-better",
  "verification": "verified",
  "calculation": "Your average rank minus the named competitor's average rank on the same keyword, rounded to two decimal places, computed only where BOTH sides hold a position above zero, otherwise null. The competitor is resolved from the roster by domain or label before the read. A row is kept when either side has a position, ordered so that the keywords YOU rank on come first and ascending by your own position within them; the ordering looks only at your side, not at whether the rival also ranks. Capped at one hundred rows.",
  "aggregation": "Not summable. It is a per-keyword difference; a portfolio view is the distribution of gaps, not their total.",
  "grain": "One keyword × your domain × one competitor domain × segment × period.",
  "dimensions": [
    "keyword",
    "device",
    "country",
    "brand"
  ],
  "requiredFilters": [
    "segment_id",
    "selected_period",
    "source_medium",
    "competitor"
  ],
  "sources": [
    "rank-tracking"
  ],
  "reports": [
    "competitor-search-report"
  ],
  "skills": [
    "keyword-gap-audit",
    "competitor-deep-dive",
    "striking-distance-sprint"
  ],
  "verbs": [
    "competitive_keyword_ranking"
  ],
  "rungs": [
    "R2"
  ],
  "levers": [
    "L2",
    "L3",
    "L5"
  ],
  "questions": [
    "On which keywords does this rival outrank us, and by how much?",
    "Where are we close enough to overtake them?"
  ],
  "interpretation": "The sign carries the meaning: positive means the rival is ahead of you on that keyword. Small positive gaps on keywords with real demand are the most actionable rows in the family; large gaps usually reflect a different kind of page rather than a small optimisation.",
  "caveats": [
    "Null where either side has no position, that is a coverage fact, not a tie.",
    "Where you hold no position the row still reports your rank as zero rather than null: the semantic layer defaults a no-impressions ratio to zero and the verb defaults a missing keyword to zero as well. A zero in that column means \"no position\", never \"position zero\".",
    "A rival name is resolved by substring against the roster's domains and labels, and an unmatched name falls through as a literal domain, which can return an empty comparison.",
    "The row set is capped at one hundred and the ordering is driven by your own position, so a wide keyword portfolio is truncated by where YOU rank, not by where the gap is largest.",
    "A gap is a position difference, not a traffic difference; nothing here says what either position earns."
  ],
  "freshness": "~1 day behind, Daily observation, available the following day.",
  "failureModes": [
    "Treating a null gap as parity.",
    "Reading a zero in your own rank column as a position rather than an absence.",
    "Ranking work by gap size alone, which puts the hardest keywords at the top of the list."
  ],
  "notSameAs": [
    {
      "slug": "gap-to-leader",
      "why": "That gap is a difference in CTR-modeled share of tracked demand against the segment leader; this one is a difference in ranking positions against a named rival."
    }
  ],
  "related": [
    "avg-rank-vs-competitors",
    "overall-average-rank"
  ],
  "workflows": [],
  "lastVerified": "2026-08-04"
}