Website speed optimisation: Core Web Vitals in 2026
How to speed up an online store or landing page: LCP, CLS, INP. Image compression, caching, CDN. Real numbers and tools.
Why speed is critical
Google has used Core Web Vitals as a ranking factor since 2021. A slow site ranks lower, which means less organic traffic.
Every additional second of load time cuts conversion by roughly 7%. A site loading in five seconds instead of two loses 21% of potential customers.
Mobile users are even less patient: 53% abandon a site that takes longer than three seconds.
What Core Web Vitals measure
LCP (Largest Contentful Paint) — time until the largest visible element renders, usually the hero image or headline. Target under 2.5s; poor above 4s.
INP (Interaction to Next Paint) — responsiveness to a user action such as a click or tap. Replaced FID in 2024. Target under 200ms; poor above 500ms.
CLS (Cumulative Layout Shift) — how much content jumps around during load. Target under 0.1; poor above 0.25.
Test your own site at pagespeed.web.dev or with Lighthouse in Chrome DevTools.
The five problems in 90% of sites
From auditing 100+ sites, these come up most often:
- Oversized JPG/PNG images — 1,000kb where 80kb of WebP would do
- Render-blocking JavaScript: jQuery, heavy sliders, analytics loaded synchronously
- No page caching, so every request hits the database
- Google Fonts loaded in a render-blocking way
- Ads or video without reserved space, sending CLS through the roof
Image optimisation
Format: WebP for universal support, or AVIF for better compression where browser support allows. JPG and PNG are legacy.
Dimensions: serve exactly what you display. If the image renders at 800x600, do not ship 4000x3000. Use responsive images with srcset for different screens.
Compression: 70-85% quality on JPG/WebP is visually indistinguishable and 3-5× smaller.
Lazy loading: add loading="lazy" to every image below the fold so they load only as they approach the viewport.
CDN: Cloudflare, Bunny or Imgix serve images from the edge nearest the visitor, cutting latency by 100-500ms.
JavaScript and CSS
Minification: compress all JS and CSS with Terser, esbuild or swc for a 30-60% size reduction.
Code splitting: break bundles into chunks. A delivery information page should not load checkout scripts.
Defer and async: non-critical JS — analytics, chat widgets, ads — should never block rendering.
Drop jQuery where you can. Vanilla JS or lightweight libraries like Alpine.js or htmx usually cover the same ground.
CSS: inline the critical above-the-fold rules in the head and lazy-load or preload the rest.
Fonts
Self-host: serve Google Fonts from your own server instead of an external link. Saves 100-300ms of DNS and connection time.
Use font-display: swap so text renders in a system font first and swaps in without blocking the first paint.
Preload critical fonts with <link rel="preload">.
Subset: ship only the character ranges you need rather than Latin plus Cyrillic plus Greek.
One typeface instead of three. Modern faces like Inter, Manrope or Geist hold up across a whole site.
Server-side caching
OpenCart: OCDC or Hyperion Cache store generated HTML so a repeat visit lands under 300ms.
WordPress: WP Rocket, W3 Total Cache or LiteSpeed Cache do the same.
Custom builds (Next.js, Nuxt): ISR or SSG for static pages plus edge caching on Cloudflare or Vercel for dynamic ones.
Redis or Memcached for database query caching — especially effective on catalogs above 5,000 products.
PHP OPcache, enabled in php.ini, speeds PHP execution 2-5×.
CDN and geography
Cloudflare Free: a CDN with 250+ edge locations worldwide, connected in ten minutes by changing nameservers.
Bonus: DDoS protection, static caching, on-the-fly HTML/CSS/JS minification and Brotli compression.
Bunny CDN: a cheap alternative at around $0.01/GB. Not free, but very fast.
If your audience is one country, host near it. Latency of 20-50ms beats 100-200ms from across the Atlantic.
Real numbers from our work
What optimisation delivered on live clients:
- Abertime store: mobile PageSpeed 35 → 89, LCP 5.2s → 1.8s, add-to-cart conversion +18%
- Calculator landing page: PageSpeed 62 → 97, LCP 2.4s → 1.1s, +40 seconds average time on site
- B2B services site: 71 → 95, rankings up 8-15 positions over two months
- Apparel store: WebP conversion plus lazy loading took page load from 4.1s to 1.4s
Testing tools
PageSpeed Insights (pagespeed.web.dev) — Google's own, reporting Core Web Vitals with recommendations.
WebPageTest (webpagetest.org) — a detailed per-request waterfall.
GTmetrix — combines PageSpeed and WebPageTest in a readable format.
Chrome DevTools Lighthouse — local analysis, and the only way to test authenticated pages like an admin panel.
Calibre and SpeedCurve — paid continuous monitoring with alerts on regression.
Frequently asked questions
- What does speed optimisation cost?
- Baseline work (images, caching, CDN, lazy loading): $200-500 over 1-2 weeks. Advanced (code splitting, server cache, prefetch, fonts): $500-1,500 over 2-4 weeks. ROI arrives as a 10-30% conversion lift.
- What gives the biggest gain for the least effort?
- One: Cloudflare Free (five minutes, +20-30 points). Two: WebP instead of JPG (1-2 hours, +10-20). Three: lazy loading images (30 minutes, +5-10). That is 90% of the result in about four hours.
- Can we reach 100/100 in PageSpeed?
- Technically possible for a simple static site. For real e-commerce carrying ad code, analytics and a chat widget, 85-95 is the realistic target — enough to sit in Google's "good" band.
- Does speed really affect conversion?
- Yes. Walmart cut LCP by one second and gained 2% conversion. Pinterest reduced wait times 40% and saw signups rise 15%. Amazon has publicly estimated every 100ms of latency at $1.6bn a year.
- Does a small store need all of this?
- The basics — Cloudflare, WebP, lazy loading — yes, because they are free or cheap. Heavy optimisation like Redis and code splitting starts paying off around 10,000 visits a day.
Ready to discuss your project?
A free 15-minute consultation. We will tell you what your case actually needs, with indicative pricing and timelines, no strings attached.
Message on Telegram