KPI Methodology

KPI Definitions & Methodology — SEO Reborn: Testing Hackathon 2026
Technical Reference

KPI Definitions & Methodology

SEO Reborn: Testing Hackathon 2026

Last updated: 2026-06-10T00:23Z — SEO Reborn: Testing Hackathon 2026

1. Overview

The leaderboard tracks team SEO performance using a composite scoring model built from seven Key Performance Indicators (KPIs) drawn from three independent data sources: Google Analytics 4 (GA4), Google Search Console (GSC), and Ahrefs.

Each KPI measures a distinct dimension of SEO success — traffic volume, user engagement, search visibility, and off-site authority. These individual metrics are normalized, weighted, and combined into a single composite score from 0–100, enabling fair cross-team comparison within each competition track.

This document defines every KPI in full technical detail, explains the normalization and scoring methodology, and documents edge cases and data latency considerations. It is the authoritative reference for participants, judges, and hackathon staff.

Key principles:

  • Per-track normalization — teams are only compared against others in the same track
  • Min-max normalization — each KPI is scaled 0–1 relative to the best and worst performers
  • Inverted scoring — metrics where lower is better (bounce rate, position) are inverted
  • Missing data tolerance — unavailable KPIs are excluded from the composite score without penalty
  • Leaderboard is informational — official winners are determined by the separate judges rubric, not raw leaderboard position

2. KPI Definitions

2.1 Organic Sessions

SourceGoogle Analytics 4 (GA4)
GA4 Metricsessions filtered by sessionSourceMedium = 'organic'
Weight25%
DirectionHigher is better

The total number of sessions originating from organic (non-paid) search results. A session is a group of user interactions within a 30-minute window. This is the primary measure of a team’s ability to attract search traffic and carries the heaviest weight in the composite score.

Calculation: Sum of all sessions for the team’s GA4 property where sessionSourceMedium matches organic search patterns. Data is scoped to the competition period.

2.2 Average Engagement Time

SourceGoogle Analytics 4 (GA4)
GA4 MetricaverageSessionDuration (or userEngagementDuration / sessions)
Weight15%
DirectionHigher is better

The average duration (in seconds) that users actively engage with the team’s site per session. GA4 measures engagement as time the browser tab is in focus with content actively displayed. Longer engagement signals content quality, relevance, and user satisfaction.

Calculation: userEngagementDuration / sessions for all organic traffic during the competition period.

2.3 Bounce Rate (Inverted)

SourceGoogle Analytics 4 (GA4)
GA4 MetricbounceRate
Weight10%
DirectionLower is better (inverted during normalization)

The percentage of sessions that were not “engaged” — i.e., sessions lasting less than 10 seconds, with no conversion event, and with fewer than 2 pageviews. A high bounce rate often indicates poor content relevance, slow page load, or mismatched user intent.

Inversion: Since lower bounce rates indicate better performance, this KPI is inverted during normalization. The team with the lowest bounce rate receives the maximum normalized score (1.0), and all other teams are scaled proportionally.

Calculation: inverted_score = 1.0 - ((bounceRate - minBounceRate) / (maxBounceRate - minBounceRate))

2.4 New Users

SourceGoogle Analytics 4 (GA4)
GA4 MetricnewUsers filtered by sessionSourceMedium = 'organic'
Weight15%
DirectionHigher is better

The number of first-time visitors arriving from organic search. New users represent audience growth and the ability to attract previously unreached searchers — a key signal of expanding organic reach.

Calculation: Count of unique first-time visitors from organic search during the competition period. GA4 identifies new users via first-party cookies and device/browser fingerprinting.

2.5 Click-Through Rate (CTR)

SourceGoogle Search Console (GSC)
GSC Metricctr = clicks / impressions
Weight15%
DirectionHigher is better

The percentage of search impressions that result in a click to the team’s site. CTR reflects the effectiveness of title tags, meta descriptions, and rich snippets at compelling users to click. Higher CTR indicates better alignment between search results presentation and user intent.

Calculation: clicks / impressions aggregated across all pages in the shared GSC property that belong to the team’s site. Data is scoped to the competition period.

2.6 Average Position (Inverted)

SourceGoogle Search Console (GSC)
GSC Metricposition (average across all queries)
Weight10%
DirectionLower is better (inverted during normalization)

The average search result position across all queries for which the team’s site appeared. Position 1 is the top result. Lower positions mean higher visibility and typically more traffic. Like bounce rate, this KPI is inverted so that the team with the best (lowest) position receives the highest normalized score.

Inversion: inverted_score = 1.0 - ((position - minPosition) / (maxPosition - minPosition))

2.7 Backlinks

SourceAhrefs (if available)
Ahrefs Metricbacklinks or refdomains (referring domains)
Weight10%
DirectionHigher is better

The number of external domains linking to the team’s site. Backlinks are a foundational off-page SEO signal representing authority, trust, and third-party endorsement from the broader web. This KPI uses referring domains (unique external domains with at least one link) rather than raw backlink count to avoid domain-spam inflation.

Availability: This KPI is conditional on Ahrefs API access. If the Ahrefs API is unavailable (e.g., pending sponsorship), this KPI is excluded from the composite score and its 10% weight is proportionally redistributed across the remaining six KPIs. Teams with zero backlinks receive a normalized score of 0.0, not an exclusion.

Calculation: Count of unique referring domains from the Ahrefs API for the team’s site domain. Updated once daily.


3. Data Sources & Collection

KPI data is collected from three independent sources. Each source has its own collection mechanism, authentication model, and update frequency.

SourceKPIs ProvidedCollection MethodAuthentication
Google Analytics 4 (GA4) Organic Sessions, Engagement Time, Bounce Rate, New Users GA4 Data API (v1beta) Service account with property-level read access
Google Search Console (GSC) CTR, Average Position GSC API via shared Search Console property Service account with site-level read access
Ahrefs Backlinks (referring domains) Ahrefs API API key (pending sponsorship)

3.1 GA4 Collection Details

Every team site is automatically instrumented with a GA4 measurement ID at provisioning time via the WordPress wp_head hook. Teams do not need to configure analytics manually. The collector queries the GA4 Data API using a service account with read access to the shared hackathon GA4 property. Data is aggregated at the team level using a pagePath filter that matches the team’s subdomain.

3.2 GSC Collection Details

All team sites share a single Google Search Console property (domain-level verification via DNS TXT record). The collector queries the GSC API and scopes results to each team’s subdomain using URL filters. GSC data is subject to Google’s inherent 2–3 day reporting latency.

3.3 Ahrefs Collection Details

Backlink data is collected from the Ahrefs API using the team’s site domain as the target. Only referring domains are counted (not raw backlinks) to prevent domain-spam tactics from inflating scores. If the Ahrefs API key is unavailable, this KPI is gracefully excluded from scoring.


4. Normalization Methodology

4.1 Why Normalize?

Raw KPI values vary dramatically in scale. Organic sessions may reach thousands, while bounce rate is a 0–100 percentage and CTR is a 0–1 decimal. Without normalization, high-magnitude metrics would dominate the composite score regardless of their actual SEO significance.

Normalization scales every KPI to a common 0–1 range within each track, ensuring each contributes to the composite score exactly according to its assigned weight.

4.2 Min-Max Normalization

Each KPI is normalized using min-max scaling within its competition track:

normalized_value = (raw_value – min_value_in_track) / (max_value_in_track – min_value_in_track)

This produces a value between 0.0 (worst performer) and 1.0 (best performer) for each KPI, per track. Teams are only compared against others in the same track — a team in On-Page SEO is never normalized against a team in Off-Page SEO.

4.3 Inverted KPIs

For KPIs where lower raw values indicate better performance (Bounce Rate, Average Position), the normalization formula is inverted:

inverted_normalized = 1.0 – ((raw_value – min_value_in_track) / (max_value_in_track – min_value_in_track))

This flips the scale: the lowest raw value maps to 1.0 (best) and the highest maps to 0.0 (worst).

4.4 Edge Cases in Normalization

ScenarioHandling
Single team in track Normalization is undefined (max = min). The team receives a score of 1.0 for that KPI.
All teams have identical values All teams receive a normalized score of 0.5 for that KPI.
Zero across all teams All receive 0.0. The KPI is effectively excluded from differentiation.
Team added mid-competition The team enters the normalization pool on the next refresh cycle. Existing teams’ scores may shift slightly as the min/max boundaries expand.

5. Composite Scoring Formula

The composite score is a weighted sum of all normalized KPI values, scaled to a 0–100 range:

composite_score = 100 × (
  (organic_sessions_norm × 0.25)
  + (engagement_time_norm × 0.15)
  + (bounce_rate_inv_norm × 0.10)
  + (new_users_norm × 0.15)
  + (ctr_norm × 0.15)
  + (position_inv_norm × 0.10)
  + (backlinks_norm × 0.10)
)

5.1 Weight Distribution

#KPIWeightCategory
1Organic Sessions25%Traffic Volume
2Average Engagement Time15%User Engagement
3Bounce Rate (inverted)10%User Engagement
4New Users15%Traffic Volume
5Click-Through Rate (CTR)15%Search Visibility
6Average Position (inverted)10%Search Visibility
7Backlinks10%Off-Site Authority
Total weight sums to 100%. All seven KPIs must be present for the composite score to use the full formula. If any KPI is unavailable (see Section 8), its weight is redistributed proportionally across the remaining KPIs.

5.2 Missing KPI Weight Redistribution

When a KPI is unavailable (e.g., Backlinks without Ahrefs API, or GSC data for a newly provisioned team), the composite formula adapts:

  1. The unavailable KPI is removed from the formula.
  2. Its weight is distributed across the remaining KPIs proportionally to their original weights.
  3. For example, if Backlinks (10%) is unavailable, the 90% total weight of the remaining six KPIs is scaled to 100%: each remaining KPI’s effective weight = original_weight / 0.90.
effective_weight(k) = original_weight(k) / sum_of_available_weights

This ensures teams are never penalized for data that simply hasn’t arrived yet.


6. Infrastructure Performance Score

The Infrastructure Performance Score is a separate metric from the composite SEO KPI score. It appears as a color-coded badge in the leaderboard’s Performance column and reflects the health of the team’s hosting infrastructure, not their SEO execution.

6.1 Metrics

MetricWeightSourceDescription
Availability25%AWS CloudWatch (ALB)Percentage of 5-minute periods with a healthy backend target (target: 99%+)
Response Speed25%AWS CloudWatch (ALB)Composite of average and P95 response time in milliseconds
Error Rate20%AWS CloudWatch (ALB)Combined 4xx + 5xx error rate as a percentage of total requests
Capacity Headroom15%AWS CloudWatch (ECS)Available CPU and memory headroom (inverted: lower utilization scores higher)
Traffic Consistency15%AWS CloudWatch (ALB)Variance in request volume; stable traffic patterns score higher

6.2 Score Ranges

ColorScore RangeMeaning
Green80–100Excellent infrastructure health
Teal65–79Good, minor room for improvement
Yellow50–64Fair, some issues present
Orange30–49Needs work, significant issues
Red0–29Poor, critical infrastructure problems

Click any leaderboard row to expand a detailed breakdown of all infrastructure metrics. The Infrastructure Performance Score does not contribute to the composite SEO KPI score and is not part of the official judging rubric. It is provided for transparency and operational awareness.


7. Track-Specific KPI Relevance

While all seven KPIs are calculated for every team, certain KPIs are naturally more indicative of success in specific tracks:

TrackMost Relevant KPIsWhy
On-Page SEO Engagement Time, Bounce Rate, CTR On-page optimizations directly influence user behavior and search result appeal
Off-Page SEO Backlinks, CTR, Organic Sessions Off-page efforts build external signals that drive referral and organic traffic
AI / GEO Optimization Organic Sessions, New Users, Engagement Time AI-driven content strategies aim to capture new audiences and sustain engagement

Note: These are heuristic alignments. The composite score weights are identical across all tracks — no track receives preferential KPI weighting. The judges rubric provides the official track-specific evaluation.


8. Edge Cases & Missing Data

8.1 Newly Provisioned Teams

Teams provisioned within the last 30 minutes may show:

  • GA4 KPIs: Zeros or low values until the first data refresh cycle (~5 minutes after first traffic arrives)
  • GSC KPIs: “No data yet” — GSC data requires 2–3 days to accumulate
  • Backlinks: N/A until the daily Ahrefs refresh

Missing KPIs are excluded from the composite score with proportional weight redistribution (see Section 5.2). The team’s score will update automatically as data arrives.

8.2 Zero Values vs. Missing Data

Zero values are real data. A team with zero organic sessions has a valid KPI value of 0 and will receive a normalized score of 0.0 for that KPI. This is distinct from missing data (e.g., GSC not yet reporting), where the KPI is excluded from the formula entirely.

8.3 Team Deprovisioning

When a team is deprovisioned (at competition end or mid-event by staff):

  • The team is removed from the leaderboard immediately
  • Normalization recalculates against the remaining teams on the next refresh cycle
  • Other teams’ scores may shift as the min/max boundaries contract
  • Historical deprovisioned team data is retained for audit but not displayed

8.4 Score Volatility After Team Changes

Adding or removing teams changes the normalization boundaries (min/max values per track). This can cause score shifts across all teams in the track even if their raw KPI values are unchanged. Such shifts are expected and correct — they reflect the updated competitive landscape. Monitor for 2–3 refresh cycles before flagging score anomalies.


9. Data Freshness & Latency

Data SourceCollector IntervalSource LatencyEffective Freshness
GA4 Every ~5 minutes Near real-time ~5 minutes
GSC Every ~30 minutes 2–3 days (Google processing delay) ~30 minutes for available data; 2–3 days for new data to appear
Ahrefs Once daily Varies (Ahrefs crawl schedule) ~24 hours
Infrastructure (CloudWatch) Every ~5 minutes ~1 minute (CloudWatch metric delay) ~5 minutes

9.1 Understanding GSC Latency

Google Search Console does not provide real-time data. The GSC API exposes data with a 2–3 day delay from Google’s internal processing pipeline. This means:

  • A team’s CTR and position values reflect performance from 2–3 days ago
  • Recent optimizations to title tags, meta descriptions, or content may not be reflected in GSC KPIs for several days
  • This affects all teams equally and is part of the normal SEO measurement landscape

9.2 Timestamp Display

The leaderboard displays a “last updated” timestamp showing when KPI data was most recently refreshed. If scores appear frozen, check this timestamp before reporting an issue. If the timestamp is current but scores haven’t changed, the underlying data source has not yet provided new values.


Participant Leaderboard Guide

How to view and interpret the leaderboard, register your team, and manage your profile

Judges Scoring Guide

How judges evaluate teams using the leaderboard and qualitative rubric

Architecture & Ops Guide

Technical architecture of the leaderboard system (for staff)