A one-second delay in page load time reduces conversions by 7%. A two-second delay drops mobile search rankings. And yet most agency websites we inherit take 4–6 seconds to load on a real phone on a real network.
Here's what's actually causing it, and what actually fixes it.
The usual suspects
1. Images that haven't been optimised
This is responsible for 60–70% of slow websites. A full-size JPEG uploaded straight from a camera is 4–8MB. Displayed at 400px wide, it should be 20–40KB in WebP or AVIF format. That's a 100× difference.
The fix: every image goes through a build-time optimisation pipeline. Next.js <Image> does this automatically. Page builders and most WordPress themes do not.
2. Too many third-party scripts
Google Tag Manager, 3 analytics tools, a chat widget, a cookie consent banner, a heatmap tool. Each one adds 50–300ms of blocking load time. Some fire before the page even renders.
The fix: audit every script. Keep what you can measure value from. Everything else goes.
3. Render-blocking CSS and JavaScript
If your browser has to download and parse a 500KB CSS file before it shows anything, your First Contentful Paint (FCP) is going to hurt. Same with JS that runs synchronously on load.
The fix: code-splitting, lazy loading, and moving non-critical CSS to async. This is mostly handled automatically in a well-built Next.js setup.
4. No caching
Every page request hits the server and rebuilds the page from scratch. This is fine for dynamic content. It's wasteful for a services page that changes once a month.
The fix: static generation for anything that can be pre-built. CDN caching for assets. Vercel and Cloudflare both handle this well.
5. Shared hosting on a slow server
If your site is on a £5/month shared host in a US data centre, a UK visitor is waiting on a round-trip to America for every uncached request.
The fix: edge delivery via a CDN. Vercel, Netlify, and Cloudflare Pages all serve from the closest node to the user by default.
What a Lighthouse 90+ score actually requires
We target 90+ on Lighthouse mobile on every site we ship. The checklist:
- All images: WebP or AVIF, correct dimensions, lazy-loaded below the fold
- Font loading:
font-display: swap, self-hosted or preloaded - No render-blocking resources above the fold
- Core Web Vitals passing: LCP < 2.5s, CLS < 0.1, INP < 200ms
- Static generation for all non-dynamic pages
- HTTP/2 or HTTP/3 enabled at the CDN level
The honest caveat
A fast website won't save bad content or a broken offer. But a slow website will torpedo a good one. Users bounce before they read. Google penalises before they convert.
Speed is table stakes. It's not a feature.
If your site is slow and you want to know exactly why, book a free audit — we cover web performance alongside AI. Or get in touch directly.