In this article · 17 sections
- 01First, measure
- 021. Optimise images
- 032. Use a CDN
- 043. Enable caching
- 054. Compress text files
- 065. Reduce and defer JavaScript
- 076. Minimise render-blocking CSS
- 087. Optimise fonts
- 098. Reduce server response time
- 109. Cut the number of requests
- 1110. Prevent layout shifts
- 1211. Preload and prioritise key resources
- 1312. Keep it fast over time
- 14A quick priority order
- 15Common mistakes
- 16Checklist
- 17Final thoughts
Key takeaways
- Measure first with PageSpeed Insights or Lighthouse on a throttled mobile profile, and note LCP, INP, CLS and page weight.
- Images are usually the heaviest part of a page: resize them, use WebP or AVIF, serve responsive sizes and lazy-load everything except the hero.
- A CDN, long cache lifetimes for versioned files and Brotli or gzip compression are low-effort wins with large impact.
- Trim and defer JavaScript, audit third-party scripts, and load only the font weights you need with font-display swap.
- Keep sites fast over time with a performance budget, checks in the build process and real-user monitoring.
Visitors rarely wait for slow pages. Delays frustrate users, reduce conversions and can hurt search visibility. The good news is that most slow websites suffer from a small number of common problems, and fixing them often brings big improvements without a redesign.
This list of twelve practical wins is ordered roughly by impact for typical sites. For the formal metrics behind them, see our Core Web Vitals checklist.
First, measure
Do not guess. Run your key pages through PageSpeed Insights or Lighthouse, and check real-user data in Google Search Console. Note your starting numbers: Largest Contentful Paint, Interaction to Next Paint, Cumulative Layout Shift and total page weight. Test on a mobile profile with throttled network, since that is where problems show up.
1. Optimise images
Images are usually the heaviest part of a page.
- Resize to the dimensions actually displayed. Do not upload a 4000 px photo for a 400 px slot.
- Use modern formats such as WebP or AVIF
- Compress with sensible quality settings
- Serve responsive images with
srcsetandsizes - Lazy-load images below the fold, but not the main hero image
- Set width and height to prevent layout shift
2. Use a CDN
A content delivery network stores copies of your files in many locations and serves each visitor from a nearby one, which cuts latency. Many CDNs also provide free HTTPS, compression and DDoS protection.
3. Enable caching
Tell browsers and CDNs to keep static files.
- Set long
Cache-Controllifetimes for versioned assets (files whose names change when content changes) - Use shorter lifetimes or validation for HTML
- Enable server-side or page caching if you use a CMS
Returning visitors then skip downloading what they already have.
4. Compress text files
Enable Brotli or gzip compression on the server for HTML, CSS, JavaScript and JSON. It routinely shrinks text assets by well over half.
5. Reduce and defer JavaScript
JavaScript is expensive: it must be downloaded, parsed and executed.
- Remove unused libraries and scripts
- Split code so each page loads only what it needs
- Use
deferorasyncfor scripts that are not critical - Prefer lightweight solutions for simple interactions
- Audit third-party scripts (chat widgets, trackers, tag managers, ad scripts) and remove any that do not earn their cost
6. Minimise render-blocking CSS
- Keep CSS small and remove unused rules
- Inline the critical CSS needed for the first screen, and load the rest asynchronously where practical
- Avoid chains of
@importstatements
Frameworks that build only the CSS you use, or static site generators, help here. See static sites vs CMS.
7. Optimise fonts
Custom fonts can delay text rendering.
- Use system fonts where the design allows
- Load only the weights and character sets you need
- Use
font-display: swapso text shows immediately - Preload your most important font file
- Self-host fonts to avoid extra connection setup, if licensing permits
8. Reduce server response time
A slow server delays everything.
- Choose good hosting and keep software updated
- Use static generation or full-page caching to avoid building pages on every request
- Optimise slow database queries
- Consider edge hosting for global audiences. See choosing web hosting.
9. Cut the number of requests
Each request has overhead, even with modern protocols.
- Combine or remove unnecessary files
- Use SVG for icons and logos, or an icon subset instead of loading a huge icon font
- Avoid unnecessary embeds such as autoplaying videos and social feeds
- Use facade techniques for heavy embeds, loading the real player only on click
10. Prevent layout shifts
Reserve space for images, ads, embeds and banners so content does not jump as the page loads. Animate with transform and opacity instead of properties that trigger layout changes.
11. Preload and prioritise key resources
Use <link rel="preload"> for critical assets such as the hero image or main font, preconnect for essential third-party origins, and fetchpriority="high" on the Largest Contentful Paint image. Use these sparingly, because over-prioritising everything prioritises nothing.
12. Keep it fast over time
Performance decays as features are added.
- Set a performance budget for page weight and script size
- Add checks to your build or CI process
- Re-test after each significant change
- Monitor real-user metrics
- Review new plugins and scripts before adding them
A quick priority order
| Effort | Typical wins |
|---|---|
| Low | Compress images, enable compression, add caching, remove unused plugins |
| Medium | CDN, lazy-loading, font tuning, defer scripts |
| Higher | Re-architect for static or edge delivery, reduce JavaScript at the source |
Common mistakes
- Optimising without measuring
- Ignoring mobile conditions
- Huge hero images and videos
- Piling on third-party scripts
- Lazy-loading the main image
- Tuning once and never checking again
Checklist
- Baseline measured on mobile
- Images resized, compressed and in modern formats
- CDN and caching enabled
- Text compression on
- JavaScript trimmed and deferred
- CSS and fonts optimised
- Layout shift prevented
- Key resources preloaded sparingly
- Performance budget and monitoring in place
Final thoughts
Fast sites come from steady attention to a few fundamentals: smaller files, fewer scripts, smart caching and a good foundation. Measure, fix the biggest issue, and repeat. For a site built for speed from the ground up, see our web development service or contact us.
Frequently asked questions
Why is my website slow?
Most slow sites share a few causes: oversized images, too much JavaScript and third-party scripts, missing caching or compression, heavy fonts, and slow hosting or server response.
What is the quickest way to speed up a website?
Compress and resize images, enable text compression and caching, and remove unused plugins and scripts. These low-effort fixes often bring the biggest gains.
Should I lazy-load all images?
No. Lazy-load images below the fold, but load the main hero image normally, ideally with fetchpriority set to high, because it is often the Largest Contentful Paint element.
How do I measure website speed?
Use PageSpeed Insights or Lighthouse for lab tests on a mobile profile, and check real-user Core Web Vitals data in Google Search Console.