{
  "slug": "ctr",
  "name": "Average CTR",
  "aliases": [
    "CTR",
    "Click-through rate",
    "Average click-through rate"
  ],
  "definition": "The share of the impressions in a slice that produced a click, reported as a percentage.",
  "category": "Search performance",
  "type": "derived metric",
  "unit": "percent (0 to 100, rounded to one decimal)",
  "direction": "higher-better",
  "verification": "verified",
  "calculation": "`ROUND(100.0 * clicks / NULLIF(impressions, 0), 1)`, the pooled clicks of the slice over the pooled impressions of the same slice, expressed on a 0 to 100 scale.",
  "numerator": "Organic clicks in the slice",
  "denominator": "Organic impressions in the slice",
  "aggregation": "Recomputed from summed clicks and summed impressions at whatever grain is queried. Never average a column of CTRs, rows carry wildly different impression counts, so the mean of rates is not the rate.",
  "grain": "One date range × the selected slice.",
  "dimensions": [
    "query",
    "page",
    "country",
    "device",
    "intent",
    "category",
    "brand",
    "rank bucket"
  ],
  "requiredFilters": [
    "date range",
    "source medium"
  ],
  "sources": [
    "search-console"
  ],
  "reports": [
    "ai-overview-report",
    "cannibalization-report",
    "content-decay-report",
    "content-performance-report",
    "keyword-ranking-report",
    "weekly-search-report"
  ],
  "skills": [
    "ctr-opportunity-audit",
    "weekly-search-report",
    "rank-movement-review",
    "anomaly-investigator"
  ],
  "verbs": [
    "search_performance",
    "gsc_breakdown",
    "compare_periods"
  ],
  "rungs": [
    "R2"
  ],
  "levers": [
    "L3"
  ],
  "questions": [
    "What is our CTR for non-brand keywords?",
    "Which pages have high impressions and low CTR?",
    "Did CTR drop after the title rewrites?"
  ],
  "interpretation": "The click-earning step: given that you appeared, how often you were chosen. It is only interpretable against a position, a 2% CTR at position 3 and a 2% CTR at position 14 are opposite findings, which is why the reference keeps a fitted expected-CTR curve rather than a benchmark.",
  "caveats": [
    "Stored on a 0 to 100 scale here, while the CTR figures computed by the CTR-curve and striking-distance analyses are 0 to 1 fractions. The same word covers both scales in different parts of the product.",
    "Rounded to one decimal at the source, so small CTR movements on large slices are inside the rounding.",
    "A site-level CTR blends branded and non-branded demand, and the branded half dominates it. Split before drawing a conclusion.",
    "There is no click-share metric anywhere in the product; a share-shaped click number is always something else mis-stated."
  ],
  "freshness": "1 to 2 days behind, Google's own reporting lag. Any answer touching the last 48 hours says so on the card.",
  "failureModes": [
    "Averaging per-row CTRs instead of recomputing from pooled clicks and impressions.",
    "Comparing a 0 to 100 CTR to a 0 to 1 modeled CTR and reporting a 100× gap.",
    "Reading a blended branded and non-branded CTR as a site-wide snippet verdict."
  ],
  "notSameAs": [
    {
      "slug": "actual-ctr",
      "why": "Both are clicks over impressions, but this one is a LookML measure returned on a 0 to 100 scale for whatever slice was queried, while actual CTR is computed in our own compute pass as a 0 to 1 fraction for a single query-and-page row. Different scale, different grain, and they are never interchangeable in a formula."
    },
    {
      "slug": "search-impression-share",
      "why": "CTR is the share of impressions you received that clicked; impression share is the share of an available paid auction you appeared in at all. They share no numerator and no denominator, and click share, the metric people reach for when they conflate the two, does not exist in the product."
    },
    {
      "slug": "weighted-ctr",
      "why": "Search Console's average CTR is a warehouse measure returned on a 0 to 100 scale for whatever slice was queried; weighted CTR is computed in our own compute pass as a 0 to 1 fraction for one position bucket inside one segment cell. Same arithmetic, different scale and a completely different grain.",
      "mirroredFrom": "weighted-ctr"
    }
  ],
  "related": [
    "clicks",
    "impressions",
    "expected-ctr",
    "ctr-delta"
  ],
  "workflows": [],
  "lastVerified": "2026-08-04"
}