2026-02-20 15:30:30 +00:00
<!doctype html>
2026-01-06 13:52:00 +00:00
< html lang = "en" >
2026-02-20 15:30:30 +00:00
< head >
< meta charset = "UTF-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< title > SchoolCompare | Compare Primary School Performance< / title >
2026-01-08 11:47:38 +00:00
2026-02-20 15:30:30 +00:00
<!-- Primary Meta Tags -->
< meta
name="description"
content="Compare primary school KS2 performance across England. Search, filter and compare Reading, Writing and Maths results for thousands of schools."
/>
< meta
name="keywords"
content="school comparison, KS2 results, primary school performance, England schools, SATs results"
/>
< meta name = "author" content = "SchoolCompare" / >
< meta name = "robots" content = "index, follow" / >
2026-01-08 11:47:38 +00:00
2026-02-20 15:30:30 +00:00
<!-- Analytics -->
< script
defer
src="https://analytics.schoolcompare.co.uk/script.js"
data-website-id="d7fb0c95-bb6c-4336-8209-bd10077e50dd"
>< / script >
2026-02-20 15:17:00 +00:00
2026-02-20 15:30:30 +00:00
<!-- Favicon -->
< link rel = "icon" type = "image/svg+xml" href = "/favicon.svg" / >
2026-01-08 15:10:14 +00:00
2026-02-20 15:30:30 +00:00
<!-- Canonical -->
< link rel = "canonical" href = "https://schoolcompare.co.uk/" / >
2026-01-08 11:47:38 +00:00
2026-02-20 15:30:30 +00:00
<!-- Open Graph / Facebook -->
< meta property = "og:type" content = "website" / >
< meta property = "og:url" content = "https://schoolcompare.co.uk/" / >
< meta
property="og:title"
content="SchoolCompare | Compare Primary School Performance"
/>
< meta
property="og:description"
content="Compare primary school KS2 performance across England. Search and compare Reading, Writing and Maths results."
/>
< meta property = "og:site_name" content = "SchoolCompare" / >
2026-01-08 11:47:38 +00:00
2026-02-20 15:30:30 +00:00
<!-- Twitter -->
< meta name = "twitter:card" content = "summary" / >
< meta name = "twitter:url" content = "https://schoolcompare.co.uk/" / >
< meta
name="twitter:title"
content="SchoolCompare | Compare Primary School Performance"
/>
< meta
name="twitter:description"
content="Compare primary school KS2 performance across England."
/>
2026-01-08 11:47:38 +00:00
2026-02-20 15:30:30 +00:00
<!-- JSON - LD Structured Data -->
< script type = "application/ld+json" >
{
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "SchoolCompare",
"url": "https://schoolcompare.co.uk",
"description": "Compare primary school KS2 performance across England",
"applicationCategory": "EducationalApplication",
"operatingSystem": "Web",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "GBP"
},
"author": {
"@type": "Organization",
"name": "SchoolCompare",
"url": "https://schoolcompare.co.uk"
}
}
< / script >
2026-01-08 11:47:38 +00:00
2026-02-20 15:30:30 +00:00
< link rel = "preconnect" href = "https://fonts.googleapis.com" / >
< link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin / >
< link
href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700&family=Playfair+Display:wght@600; 700& display=swap"
rel="stylesheet"
/>
< script src = "https://cdn.jsdelivr.net/npm/chart.js" > < / script >
<!-- Leaflet Map Library -->
< link
rel="stylesheet"
href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
crossorigin=""
/>
< script
src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
crossorigin=""
>< / script >
< link rel = "stylesheet" href = "/static/styles.css" / >
< / head >
< body >
< div class = "noise-overlay" > < / div >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
< header class = "header" >
< div class = "header-content" >
< a href = "/" class = "logo" >
< div class = "logo-icon" >
< svg
viewBox="0 0 40 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
< circle
cx="20"
cy="20"
r="18"
stroke="currentColor"
stroke-width="2"
/>
< path
d="M20 8L20 32M12 14L28 14M10 20L30 20M12 26L28 26"
stroke="currentColor"
stroke-width="1.5"
stroke-linecap="round"
/>
< circle cx = "20" cy = "20" r = "4" fill = "currentColor" / >
< / svg >
< / div >
< div class = "logo-text" >
< span class = "logo-title" > SchoolCompare< / span >
< span class = "logo-subtitle" > schoolcompare.co.uk< / span >
< / div >
< / a >
< nav class = "nav" >
< a href = "/" class = "nav-link active" data-view = "home"
>Home< /a
>
< a href = "/compare" class = "nav-link" data-view = "compare"
>Compare< /a
>
< a href = "/rankings" class = "nav-link" data-view = "rankings"
>Rankings< /a
>
< / nav >
2026-01-06 13:52:00 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< / header >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
< main class = "main" >
<!-- Home View -->
< section id = "home-view" class = "view active" >
< div class = "hero" >
< h1 class = "hero-title" >
Compare Primary School Performance
< / h1 >
< p class = "hero-subtitle" >
Search and compare KS2 results across England's primary
schools
< / p >
2026-01-07 15:04:30 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< div class = "search-section" >
< div class = "search-mode-toggle" >
< button class = "search-mode-btn active" data-mode = "name" >
< svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
width="16"
height="16"
>
< circle cx = "11" cy = "11" r = "8" / >
< path d = "M21 21l-4.35-4.35" / >
< / svg >
Find by Name
< / button >
< button class = "search-mode-btn" data-mode = "location" >
< svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
width="16"
height="16"
>
< path
d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"
/>
< circle cx = "12" cy = "10" r = "3" / >
2026-01-07 15:04:30 +00:00
< / svg >
2026-02-20 15:30:30 +00:00
Find by Location
< / button >
< / div >
< div id = "name-search-panel" class = "search-panel active" >
< div class = "search-container" >
< input
type="text"
id="school-search"
class="search-input"
placeholder="Search primary schools by name..."
/>
< div class = "search-icon" >
< svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
>
< circle cx = "11" cy = "11" r = "8" / >
< path d = "M21 21l-4.35-4.35" / >
< / svg >
< / div >
< / div >
< div class = "filter-row" >
< select
id="local-authority-filter"
class="filter-select"
>
< option value = "" > All Areas< / option >
< / select >
< select id = "type-filter" class = "filter-select" >
< option value = "" > All School Types< / option >
< / select >
2026-01-07 15:04:30 +00:00
< / div >
< / div >
2026-02-20 15:30:30 +00:00
< div id = "location-search-panel" class = "search-panel" >
< div class = "location-input-group" >
< input
type="text"
id="postcode-search"
class="search-input postcode-input"
placeholder="Enter postcode..."
/>
< select
id="radius-select"
class="filter-select radius-select"
>
< option value = "0.5" selected > 1/2 mile< / option >
< option value = "1" > 1 mile< / option >
< option value = "2" > 2 miles< / option >
< / select >
< select
id="type-filter-location"
class="filter-select"
>
< option value = "" > All School Types< / option >
< / select >
< button
id="location-search-btn"
class="btn btn-primary location-btn"
>
Find Nearby
< / button >
< / div >
2026-01-06 13:52:00 +00:00
< / div >
< / div >
2026-01-07 15:04:30 +00:00
2026-02-20 15:30:30 +00:00
< div class = "view-toggle" id = "view-toggle" style = "display: none" >
< button class = "view-toggle-btn active" data-view = "list" >
< svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
width="16"
height="16"
>
< line x1 = "8" y1 = "6" x2 = "21" y2 = "6" / >
< line x1 = "8" y1 = "12" x2 = "21" y2 = "12" / >
< line x1 = "8" y1 = "18" x2 = "21" y2 = "18" / >
< line x1 = "3" y1 = "6" x2 = "3.01" y2 = "6" / >
< line x1 = "3" y1 = "12" x2 = "3.01" y2 = "12" / >
< line x1 = "3" y1 = "18" x2 = "3.01" y2 = "18" / >
< / svg >
List
< / button >
< button class = "view-toggle-btn" data-view = "map" >
< svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
width="16"
height="16"
>
< path
d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"
/>
< circle cx = "12" cy = "10" r = "3" / >
< / svg >
Map
< / button >
< / div >
< div class = "results-container" id = "results-container" >
< div class = "results-map" id = "results-map" > < / div >
< div class = "schools-grid" id = "schools-grid" >
<!-- School cards populated by JS -->
2026-01-07 15:04:30 +00:00
< / div >
2026-01-06 13:52:00 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< / section >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
<!-- Compare View -->
< section id = "compare-view" class = "view" >
< div class = "compare-header" >
< h2 class = "section-title" > Compare Primary Schools< / h2 >
< p class = "section-subtitle" >
Select schools to compare their KS2 performance over
time
< / p >
< / div >
2026-01-15 11:09:35 +00:00
2026-02-20 15:30:30 +00:00
< div class = "compare-search-section" >
< input
type="text"
id="compare-search"
class="search-input"
placeholder="Add a school to compare..."
/>
< div id = "compare-results" class = "compare-results" > < / div >
2026-01-15 11:09:35 +00:00
< / div >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
< div class = "selected-schools" id = "selected-schools" >
< div class = "empty-selection" >
< div class = "empty-icon" >
< svg
viewBox="0 0 48 48"
fill="none"
stroke="currentColor"
stroke-width="1.5"
>
< rect
x="6"
y="10"
width="36"
height="28"
rx="2"
/>
< path d = "M6 18h36" / >
< circle
cx="14"
cy="14"
r="2"
fill="currentColor"
/>
< circle
cx="22"
cy="14"
r="2"
fill="currentColor"
/>
< / svg >
< / div >
< p > Search and add schools to compare< / p >
< / div >
< / div >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
< div
class="charts-section"
id="charts-section"
style="display: none"
>
< div class = "metric-selector" >
< label > Select KS2 Metric:< / label >
< select id = "metric-select" class = "filter-select" >
< optgroup label = "Expected Standard" >
< option value = "rwm_expected_pct" >
Reading, Writing & Maths Combined %
< / option >
< option value = "reading_expected_pct" >
Reading Expected %
< / option >
< option value = "writing_expected_pct" >
Writing Expected %
< / option >
< option value = "maths_expected_pct" >
Maths Expected %
< / option >
< option value = "gps_expected_pct" >
GPS Expected %
< / option >
< option value = "science_expected_pct" >
Science Expected %
< / option >
< / optgroup >
< optgroup label = "Higher Standard" >
< option value = "rwm_high_pct" >
RWM Combined Higher %
< / option >
< option value = "reading_high_pct" >
Reading Higher %
< / option >
< option value = "writing_high_pct" >
Writing Higher %
< / option >
< option value = "maths_high_pct" >
Maths Higher %
< / option >
< option value = "gps_high_pct" >
GPS Higher %
< / option >
< / optgroup >
< optgroup label = "Progress Scores" >
< option value = "reading_progress" >
Reading Progress
< / option >
< option value = "writing_progress" >
Writing Progress
< / option >
< option value = "maths_progress" >
Maths Progress
< / option >
< / optgroup >
< optgroup label = "Average Scores" >
< option value = "reading_avg_score" >
Reading Avg Score
< / option >
< option value = "maths_avg_score" >
Maths Avg Score
< / option >
< option value = "gps_avg_score" >
GPS Avg Score
< / option >
< / optgroup >
< optgroup label = "Gender Performance" >
< option value = "rwm_expected_boys_pct" >
RWM Expected % (Boys)
< / option >
< option value = "rwm_expected_girls_pct" >
RWM Expected % (Girls)
< / option >
< option value = "rwm_high_boys_pct" >
RWM Higher % (Boys)
< / option >
< option value = "rwm_high_girls_pct" >
RWM Higher % (Girls)
< / option >
< / optgroup >
< optgroup label = "Equity (Disadvantaged)" >
< option value = "rwm_expected_disadvantaged_pct" >
RWM Expected % (Disadvantaged)
< / option >
< option
value="rwm_expected_non_disadvantaged_pct"
>
RWM Expected % (Non-Disadvantaged)
< / option >
< option value = "disadvantaged_gap" >
Disadvantaged Gap vs National
< / option >
< / optgroup >
< optgroup label = "School Context" >
< option value = "disadvantaged_pct" >
% Disadvantaged Pupils
< / option >
< option value = "eal_pct" > % EAL Pupils< / option >
< option value = "sen_support_pct" >
% SEN Support
< / option >
< option value = "stability_pct" >
% Pupil Stability
< / option >
< / optgroup >
< optgroup label = "3-Year Trends" >
< option value = "rwm_expected_3yr_pct" >
RWM Expected % (3-Year Avg)
< / option >
< option value = "reading_avg_3yr" >
Reading Score (3-Year Avg)
< / option >
< option value = "maths_avg_3yr" >
Maths Score (3-Year Avg)
< / option >
< / optgroup >
< / select >
< / div >
2026-01-08 09:53:35 +00:00
2026-02-20 15:30:30 +00:00
< div class = "chart-container" >
< canvas id = "comparison-chart" > < / canvas >
< / div >
< div class = "data-table-container" >
< table class = "data-table" id = "comparison-table" >
< thead >
< tr id = "table-header" > < / tr >
< / thead >
< tbody id = "table-body" > < / tbody >
< / table >
2026-01-06 13:52:00 +00:00
< / div >
< / div >
2026-02-20 15:30:30 +00:00
< / section >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
<!-- Rankings View -->
< section id = "rankings-view" class = "view" >
< div class = "rankings-header" >
< h2 class = "section-title" > Primary School Rankings< / h2 >
< p class = "section-subtitle" >
Top performing primary schools ranked by KS2 metric
< / p >
< / div >
< div class = "rankings-controls" >
< select id = "ranking-area" class = "filter-select" >
< option value = "" > All Areas< / option >
<!-- Populated by JS -->
< / select >
< select id = "ranking-metric" class = "filter-select" >
2026-01-06 13:52:00 +00:00
< optgroup label = "Expected Standard" >
2026-02-20 15:30:30 +00:00
< option value = "rwm_expected_pct" >
Reading, Writing & Maths Combined %
< / option >
< option value = "reading_expected_pct" >
Reading Expected %
< / option >
< option value = "writing_expected_pct" >
Writing Expected %
< / option >
< option value = "maths_expected_pct" >
Maths Expected %
< / option >
< option value = "gps_expected_pct" >
GPS Expected %
< / option >
< option value = "science_expected_pct" >
Science Expected %
< / option >
2026-01-06 13:52:00 +00:00
< / optgroup >
< optgroup label = "Higher Standard" >
2026-02-20 15:30:30 +00:00
< option value = "rwm_high_pct" >
RWM Combined Higher %
< / option >
< option value = "reading_high_pct" >
Reading Higher %
< / option >
< option value = "writing_high_pct" >
Writing Higher %
< / option >
< option value = "maths_high_pct" >
Maths Higher %
< / option >
2026-01-06 13:52:00 +00:00
< option value = "gps_high_pct" > GPS Higher %< / option >
< / optgroup >
< optgroup label = "Progress Scores" >
2026-02-20 15:30:30 +00:00
< option value = "reading_progress" >
Reading Progress
< / option >
< option value = "writing_progress" >
Writing Progress
< / option >
< option value = "maths_progress" >
Maths Progress
< / option >
2026-01-06 13:52:00 +00:00
< / optgroup >
< optgroup label = "Average Scores" >
2026-02-20 15:30:30 +00:00
< option value = "reading_avg_score" >
Reading Avg Score
< / option >
< option value = "maths_avg_score" >
Maths Avg Score
< / option >
2026-01-06 13:52:00 +00:00
< option value = "gps_avg_score" > GPS Avg Score< / option >
< / optgroup >
< optgroup label = "Gender Performance" >
2026-02-20 15:30:30 +00:00
< option value = "rwm_expected_boys_pct" >
RWM Expected % (Boys)
< / option >
< option value = "rwm_expected_girls_pct" >
RWM Expected % (Girls)
< / option >
< option value = "rwm_high_boys_pct" >
RWM Higher % (Boys)
< / option >
< option value = "rwm_high_girls_pct" >
RWM Higher % (Girls)
< / option >
2026-01-06 13:52:00 +00:00
< / optgroup >
< optgroup label = "Equity (Disadvantaged)" >
2026-02-20 15:30:30 +00:00
< option value = "rwm_expected_disadvantaged_pct" >
RWM Expected % (Disadvantaged)
< / option >
< option value = "rwm_expected_non_disadvantaged_pct" >
RWM Expected % (Non-Disadvantaged)
< / option >
2026-01-06 13:52:00 +00:00
< / optgroup >
< optgroup label = "3-Year Trends" >
2026-02-20 15:30:30 +00:00
< option value = "rwm_expected_3yr_pct" >
RWM Expected % (3-Year Avg)
< / option >
2026-01-06 13:52:00 +00:00
< / optgroup >
< / select >
2026-02-20 15:30:30 +00:00
< select id = "ranking-year" class = "filter-select" >
<!-- Populated by JS -->
< / select >
2026-01-06 13:52:00 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< div class = "rankings-list" id = "rankings-list" >
<!-- Rankings populated by JS -->
2026-01-06 13:52:00 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< / section >
< / main >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
<!-- School Detail Modal -->
< div class = "modal" id = "school-modal" >
< div class = "modal-backdrop" > < / div >
< div class = "modal-content" >
< button class = "modal-close" id = "modal-close" >
< svg
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
>
< path d = "M18 6L6 18M6 6l12 12" / >
< / svg >
< / button >
< div class = "modal-header" >
< button
class="btn btn-primary modal-compare-btn"
id="add-to-compare"
>
Add to Compare
< / button >
< h2 id = "modal-school-name" > < / h2 >
< div class = "modal-meta" id = "modal-meta" > < / div >
< div class = "modal-details" id = "modal-details" > < / div >
2026-01-06 13:52:00 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< div class = "modal-body" >
< div class = "modal-chart-container" >
< canvas id = "school-detail-chart" > < / canvas >
< / div >
< div class = "modal-stats" id = "modal-stats" > < / div >
< div class = "modal-map-container" id = "modal-map-container" >
< h4 > Location< / h4 >
< div class = "modal-map" id = "modal-map" > < / div >
< / div >
2026-01-09 11:52:13 +00:00
< / div >
2026-01-06 13:52:00 +00:00
< / div >
< / div >
2026-02-20 15:30:30 +00:00
< footer class = "footer" >
< div class = "footer-content" >
< div class = "footer-contact" >
< a href = "mailto:contact@schoolcompare.co.uk" > Contact Us< / a >
< / div >
< div class = "footer-source" >
< p >
Data source:
< a
href="https://www.compare-school-performance.service.gov.uk/"
target="_blank"
>UK Government - Compare School Performance< /a
>
< / p >
< / div >
2026-01-14 20:01:47 +00:00
< / div >
2026-02-20 15:30:30 +00:00
< / footer >
2026-01-06 13:52:00 +00:00
2026-02-20 15:30:30 +00:00
< script src = "/static/app.js" > < / script >
< / body >
2026-01-06 13:52:00 +00:00
< / html >