01 — Purpose

Improvement, not perfection

Most organisations do not start with a fast website — the goal is measurable progress on real constraints.

Legacy platforms often contain years of technical debt, third-party dependencies, and architectural limits. Performance strategy here is phased improvement — not a rewrite sold as a performance fix.

Set levels in performance planning, sequence work in performance roadmaps, and enforce limits with performance budgets. For broader legacy delivery, see refactoring legacy frontend — code shape and governance, not metrics alone.

02 — Principles

Challenges of legacy websites

Weight, scripts, third parties, platforms, and organisational limits compound.

  • large page weight — years of assets and templates
  • excessive JavaScript — frameworks, plugins, and one-off widgets
  • third-party dependencies — tags nobody owns
  • platform limitations — CMS, commerce, or enterprise constraints
  • organisational constraints — approvals, agencies, and release windows

03 — Practice

Phase 1: Quick wins

Low-risk improvements that rarely need architectural approval.

Images

  • compress assets — see image delivery
  • use modern formats — AVIF or WebP with fallbacks where needed
  • provide responsive images — correct sizes for layout, not desktop-only sources

Fonts

  • reduce font families and weights — font loading
  • subset where possible — drop unused glyphs and scripts

Third parties

  • remove unused tags — audit with third-party scripts
  • delay non-essential scripts — after consent or interaction where policy allows

Caching

  • improve asset caching — long cache for fingerprinted static files
  • optimise delivery — CDN configuration and compression

04 — Practice

Phase 2: Structural improvements

CSS cleanup, JavaScript reduction, and component simplification.

CSS cleanup

JavaScript reduction

Component optimisation

  • reduce unnecessary rendering — fewer client islands where HTML suffices
  • simplify interfaces — remove decorative client weight

05 — Practice

Phase 3 and prioritisation

Architectural work only after quick wins and structural fixes prove momentum.

Phase 3: Architectural improvements

  • rendering strategy — rendering strategy per route
  • framework review — hydration and bundle cost
  • platform review — CMS, commerce, or hosting limits
  • design system adoption — fewer one-off heavy components
  • technical debt reduction — coordinated with refactoring legacy frontend

Prioritisation framework

Before scheduling work, ask:

  • does it improve user experience?
  • is it low risk?
  • is it measurable?
  • is it sustainable — can the team maintain the gain?

06 — Practice

Example legacy roadmap

Milestones teams can communicate to leadership without promising overnight rewrites.

  • current — 6 MB page weight; LCP 5.2 s
  • 3 months — 4.5 MB page weight; LCP 4 s
  • 6 months — 3 MB page weight; LCP 3 s
  • 12 months — 2 MB page weight; LCP under 2.5 s

07 — Close

Build long-term momentum

Accept current reality, prioritise user impact, and avoid large-scale rewrites unless necessary.

  • accept the current reality — baseline before promises
  • focus on incremental progress — phases, not big-bang
  • prioritise user impact — field metrics over lab trophies
  • build long-term momentum — roadmaps reviewed every quarter
  • avoid large-scale rewrites unless necessary — delivery must continue

Common questions

How do you improve performance on a legacy website?

Improve incrementally: quick wins on images, fonts, third parties, and caching; then structural CSS and JavaScript reduction; then rendering, framework, and platform changes — avoid big-bang rewrites unless necessary.

What are quick wins for legacy site performance?

Compress and resize images, use modern formats, reduce font families and weights, remove or delay non-essential third-party scripts, and improve asset caching and CDN delivery.

When should legacy teams attempt an architectural rewrite for performance?

Only when incremental phases stall and delivery can continue — rewrites that halt shipping usually fail even if the new codebase is faster in theory.