Measuring Cluster Performance: KPIs, Dashboards, Cohorts, Rank Distribution, Content Decay

Cluster Analytics

Measuring Cluster Performance

Set up KPIs and dashboards that show how clusters work as systems. Track cohorts from publish date, watch rank distribution by cluster, and detect content decay before traffic slips. This guide excludes prioritization models and focuses only on measurement.

Updated ~20 to 30 min read

Scope and data sources

Everything here is cluster level measurement. You already grouped keywords and pages into clusters. Now you need visibility. The fastest stack uses Google Search Console for queries and positions, Google Analytics 4 for engagement and conversions, and a sheet or database to join data. Review Google docs for Search Console performance reports, Search Console API, and GA4 reporting.

Minimum inputs per URL:
  • Cluster name and type like problem, feature, comparison, onboarding
  • Publish date and last updated date
  • Primary intent and canonical URL
  • Top linked keywords or a canonical head term for the page

KPI framework

Pick KPIs that show coverage, quality, and business impact. Keep a small core set and segment by cluster. Below is a practical list you can build with standard tools.

Coverage

  • Keywords captured per cluster from Search Console
  • Pages indexed per cluster and sitemap health
  • New queries per month entering the cluster

Quality

  • Rank distribution across buckets 1 to 3, 4 to 10, 11 to 20, 21 to 50, 51 plus
  • Average position weighted by clicks
  • Click through rate by bucket and by page type

Outcome

  • Sessions and engaged sessions per cluster
  • Primary conversions from GA4 events like demo, signup, lead
  • Assisted conversions where cluster pages appear on the path

Use Search Console for impressions, clicks, position. Use GA4 for engagement and conversions. Keep names stable so joins are painless.

Data model

Store URLs and queries with cluster labels. Many teams start with a sheet then move to a database. Below is a lightweight schema you can use in Sheets, BigQuery, or any SQL store.

Tables

  • pages(url, cluster, type, publish_date, updated_date, canonical, status)
  • gsc_daily(date, url, query, clicks, impressions, ctr, position)
  • ga4_daily(date, url, sessions, engaged_sessions, conversions)

Joins

  • Join gsc_daily to pages on url to roll up by cluster
  • Join ga4_daily to pages on url for outcomes
  • Keep a cluster_meta table for owners and goals

Example SQL for cluster daily facts

SELECT
  p.cluster,
  d.date,
  SUM(d.clicks) AS clicks,
  SUM(d.impressions) AS impressions,
  SAFE_DIVIDE(SUM(d.clicks), SUM(d.impressions)) AS ctr,
  AVG(d.position) AS avg_position
FROM gsc_daily d
JOIN pages p ON p.url = d.url
GROUP BY 1,2
ORDER BY 1,2;

Example SQL for rank buckets

SELECT
  p.cluster,
  COUNTIF(d.position >= 1 AND d.position <= 3) AS top3,
  COUNTIF(d.position >= 4 AND d.position <= 10) AS p1,
  COUNTIF(d.position >= 11 AND d.position <= 20) AS p2,
  COUNTIF(d.position >= 21 AND d.position <= 50) AS p3_5,
  COUNTIF(d.position >= 51) AS beyond50
FROM (
  SELECT url, query, MIN(position) AS position
  FROM gsc_daily
  WHERE date = CURRENT_DATE()
  GROUP BY 1,2
) d
JOIN pages p ON p.url = d.url
GROUP BY 1;

Rank distribution by cluster

Rank distribution is the fastest way to see cluster momentum. Track how many unique query and url pairs sit in each bucket. Watch the shift from page two to page one, then into top three. Distribution beats a single average because it shows depth and headroom.

Bucket design

  • 1 to 3 shows win zone
  • 4 to 10 shows page one coverage
  • 11 to 20 shows near wins
  • 21 to 50 shows early traction

What good looks like

  • Near win bucket shrinks over time
  • Top three grows and stabilizes
  • New queries appear in early buckets and move right to left

Tips

  • Deduplicate by query and url per day with best position
  • Exclude branded queries when you want a clean view
  • Segment by page type to see where support pages help hubs

Read the Search Console docs on position and filters in the performance report.

Cohort tracking

Cohorts answer how fast new content starts to work. Group pages by publish month and follow their clicks, impressions, and rank distribution over time. You can also measure time to first click or time to top ten.

Cohort fields

  • publish_month like 2025-07 for each url
  • cluster and page type
  • days_since_publish calculated in queries

Questions cohorts answer

  • How many days to reach top ten for at least one head term
  • How many days to first 100 clicks
  • Which clusters warm up faster

Example SQL for time to top ten

WITH best_pos AS (
  SELECT url, query, MIN(position) AS pos, MIN(date) AS first_seen
  FROM gsc_daily
  GROUP BY 1,2
),
first_top10 AS (
  SELECT p.url, MIN(b.first_seen) AS top10_date
  FROM best_pos b
  JOIN pages p ON p.url = b.url
  WHERE b.pos <= 10
  GROUP BY 1
)
SELECT
  p.cluster,
  DATE_DIFF(f.top10_date, p.publish_date, DAY) AS days_to_top10
FROM first_top10 f
JOIN pages p ON p.url = f.url
WHERE f.top10_date IS NOT NULL;

Use GA4 for cohort engagement if you want a behavior view. See GA4 explorations.

Dashboards

Dashboards should help decisions. Start with one page per cluster. Charts should be readable on one screen with no scrolling.

Charts that matter

  • Clicks, impressions, CTR by cluster over time
  • Rank distribution bars for the latest week
  • New queries captured this month

Tables to keep

  • Top movers: queries that changed buckets
  • Pages with rising CTR but flat position
  • Pages with falling clicks and rising position flagging SERP shifts

Stack ideas

  • Looker Studio with the Search Console connector
  • BigQuery plus Looker Studio for custom SQL
  • Sheets for quick pilots with IMPORTDATA or app scripts

Google explains the Search Console data model in the Search Analytics API. Review GA4 event basics in the events guide.

Content decay detection

Content decays when a page loses traffic or rankings after a period of stability. Detect decay at the cluster level so you refresh the right parts of the system. The method below is simple and works with standard data.

Rule of thumb

  • Compute a rolling 28 day average of clicks for each url
  • Flag urls where the latest 28 day average is down at least 30 percent vs the best 28 day average in the last 12 months
  • Require stability first like at least 84 days above a baseline to avoid false alarms

Why it works

  • Removes weekly noise with rolling windows
  • Uses relative change rather than a fixed target
  • Easy to compute in SQL or Sheets

Example SQL for decay flags

WITH daily AS (
  SELECT date, url, SUM(clicks) AS clicks
  FROM gsc_daily
  GROUP BY 1,2
),
roll AS (
  SELECT
    url, date,
    SUM(clicks) OVER (PARTITION BY url ORDER BY date
      ROWS BETWEEN 27 PRECEDING AND CURRENT ROW) / 28.0 AS avg28
  FROM daily
),
stats AS (
  SELECT url,
         MAX(avg28) OVER (PARTITION BY url) AS best28,
         ANY_VALUE(avg28) KEEP (DENSE_RANK LAST ORDER BY date) AS latest28
  FROM roll
)
SELECT url,
  latest28, best28,
  SAFE_DIVIDE(latest28, best28) AS pct_of_best,
  CASE WHEN SAFE_DIVIDE(latest28, best28) <= 0.70 THEN 1 ELSE 0 END AS is_decayed
FROM stats
GROUP BY url, latest28, best28;

Roll up to cluster

SELECT p.cluster,
       COUNTIF(s.is_decayed = 1) AS decayed_pages,
       COUNT(*) AS total_pages,
       SAFE_DIVIDE(COUNTIF(s.is_decayed = 1), COUNT(*)) AS decay_rate
FROM page_decay s
JOIN pages p ON p.url = s.url
GROUP BY 1;

Use the Search Console performance report for click data. See filters and dimensions. If seasonality is strong, compare to the same period last year as a second check.

Alerting and QA

You do not need a full data team to catch problems. A few simple alerts go a long way.

Weekly alerts

  • Decay rate per cluster rises by more than 5 percentage points
  • Near win bucket grows while page one shrinks
  • New queries captured falls below a rolling median

Monthly QA

  • Pages with many impressions but weak CTR check titles and descriptions
  • Pages with strong CTR but weak position check internal links and depth
  • Clusters with traffic but few conversions review alignment and CTAs

Governance

  • Stable cluster names and a single source of truth for page labels
  • Change log for redirects and slug updates
  • Sitemaps and canonicals consistent with the cluster map

FAQ

How often should I refresh dashboards

Daily for Search Console rollups. Weekly for cohort summaries. Monthly for content decay and outcome trends. Pick a cadence you can maintain and automate exports with the API.

Do I track branded and non branded together

Track both, but segment. Branded queries hide cluster problems because they convert easily. Use Search Console filters to exclude brand when you want a clean view.

What if a page ranks for queries across two clusters

Keep one canonical cluster for the page. If it genuinely serves two intents, consider splitting content or adding a sibling page with clearer scope. Measurement improves when each page has one job.

Can I do this without SQL

Yes. Looker Studio and Sheets work for smaller sites. For larger sites, SQL saves time and reduces manual errors. Google documents the Search Console API and GA4 exports.

Have a quick question? Send a message.