{
  "slug": "losing-keywords",
  "name": "Losing keywords",
  "aliases": [
    "Losing bucket",
    "Keywords where competitors beat us"
  ],
  "definition": "Tracked keywords where you rank but the best tracked competitor ranks above you.",
  "category": "Competitive keywords",
  "type": "raw measure",
  "unit": "keywords",
  "direction": "lower-better",
  "verification": "verified",
  "calculation": "A keyword falls into the losing bucket when your rank exists and the gap to the best tracked competitor is strictly greater than zero. The rows are sorted by gap descending and the top 25 are returned; the bucket total is reported separately and is not capped.",
  "aggregation": "A count of keywords. The three buckets partition every keyword on which at least one tracked competitor ranks.",
  "grain": "One tracked segment × the date range.",
  "dimensions": [
    "query",
    "competitor domain",
    "segment"
  ],
  "requiredFilters": [
    "segment_id",
    "date range"
  ],
  "sources": [
    "rank-tracking"
  ],
  "reports": [
    "competitor-search-report",
    "search-opportunity-report"
  ],
  "skills": [
    "keyword-gap-audit",
    "competitor-deep-dive",
    "market-share-review"
  ],
  "verbs": [
    "seo_keyword_gap_analysis"
  ],
  "rungs": [
    "R2"
  ],
  "levers": [
    "L2",
    "L3",
    "L5"
  ],
  "questions": [
    "Where do competitors beat us?",
    "Which keywords are we losing to this rival?",
    "How many of our tracked keywords do we lose?"
  ],
  "interpretation": "The battle map's contested column: demand you are already in, held by someone else. It is the refresh-and-push list rather than the build list, because the page already exists and already ranks.",
  "caveats": [
    "The returned rows are the widest 25 gaps; the totals describe the whole bucket, so a list and a count answer different questions.",
    "Segment-scoped, so the bucket only covers demand the segment tracks.",
    "Rank comparisons are positions on tracked keywords, not promises of traffic, demand weighting comes before prioritisation."
  ],
  "freshness": "~1 day behind, daily observation, available the following day.",
  "failureModes": [
    "Reading the returned rows as the whole losing set.",
    "Prioritising the widest gaps rather than the ones with demand behind them."
  ],
  "notSameAs": [],
  "related": [
    "winning-keywords",
    "not-ranked-keywords",
    "keyword-rank-gap"
  ],
  "workflows": [],
  "lastVerified": "2026-08-04"
}