A slow website quietly costs visitors, search rankings, and sales. People leave pages that feel slow, search engines notice how real visitors experience your pages, and a slow checkout loses orders that were already decided. The fix is rarely a full redesign. It is usually a handful of causes, found by measuring first and then fixing the biggest ones in order.
This guide works for a company website, a blog, a WordPress site, or an online store such as WooCommerce. It covers how to measure, what the numbers mean, and the seven fixes that deliver most of the gain. If you want it done and tested for you, see our web and e-commerce support.
Step 1: measure before you change anything
Run your key pages through PageSpeed Insights or Lighthouse, on mobile as well as desktop, and write the results down. Test the pages that matter most: the home page, a product or service page, and the checkout if you sell online. There are two kinds of data, and they answer different questions:
- Lab data is a controlled test you can repeat. It is best for finding and fixing problems.
- Field data comes from real visitors, for example in the Core Web Vitals report in Google Search Console. It shows what people actually experience.
The three numbers that matter
Google's Core Web Vitals measure loading, responsiveness, and stability. Aim for the "good" range on all three.
- LCP is how fast the main content appears.
- INP is how quickly the page reacts to taps and clicks.
- CLS is how much the page jumps around as it loads.
Where the time usually goes
Most slow pages share the same pattern: the server answers late, then too much heavy content is sent, and the browser has to run a lot of script before the page is usable.
Fix 1: images
Images are the most common reason a page is heavy.
- Resize images to the size they are actually shown, instead of uploading camera originals.
- Use modern formats such as WebP or AVIF where your platform supports them.
- Lazy-load images below the first screen with
loading="lazy", but not the main image at the top, which should load as soon as possible. Marking it withfetchpriority="high"helps. - Always set width and height so the layout does not jump while images load.
Fix 2: hosting and server response
If the server is slow to respond, no front-end tweak can hide it. Look at the time to first byte (TTFB) in your test results, and aim for about 0.8 seconds or less. Use a current PHP version with OPcache enabled, on a plan that is not starved of CPU and memory. For stores and busy sites, server-side page caching and an object cache such as Redis make a large difference.
Fix 3: caching, compression, and a CDN
- Turn on page caching for pages that are the same for everyone.
- Never cache the cart, checkout, or account pages, because they are personal.
- Enable compression (gzip or Brotli) and long browser caching for static files that never change under the same name.
- Consider a CDN so images and scripts are served from a location close to the visitor.
# Example header for versioned static files (CSS, JS, fonts)
Cache-Control: public, max-age=31536000, immutable
Fix 4: plugins, scripts, and third parties
Every plugin, tracking script, chat widget, and embedded video adds work for the visitor's phone. Remove what you do not use, replace heavy plugins with lighter ones, and load third-party scripts late with defer or after the page is interactive. Check which scripts run on every page: a plugin you only need on the contact page should not load on the product page.
Fix 5: fonts and CSS
- Use as few font families and weights as you can, and serve them from your own domain where possible.
- Use
font-display: swapso text is visible while the font loads. - Remove unused CSS from themes and page builders, which often ship far more than a page uses.
Fix 6: the database and the store
On WordPress and WooCommerce sites, old revisions, expired transients, and leftover plugin data pile up over time. Clean them carefully, with a backup first. For stores, watch for cart-related requests that run on every page, product pages that run many database queries, and search or filter features that scan the whole catalogue. These are common reasons a store feels slow only when it gets busy.
Fix 7: mobile first
Most visitors arrive on a phone with a slower processor and a weaker connection than your office computer. Test on a mid-range phone and a throttled connection, keep the first screen light, and make buttons easy to tap. Mobile results are usually the ones that decide your rankings and your sales.
Priorities: what to do first
| Symptom in the test | Likely cause | Start here |
|---|---|---|
| High TTFB | Slow hosting, no caching | Page cache, PHP version, hosting plan |
| Slow LCP | Large hero image, slow server | Resize and compress the main image, preload it |
| Poor INP | Too much JavaScript | Remove plugins and third-party scripts |
| High CLS | Images without size, late-loading banners | Set dimensions, reserve space |
| Slow only at checkout | Uncached, query-heavy pages | Object cache, database, payment plugins |
Step 2: test again
Re-run the same tests and compare them with your first numbers. Keep what helped, undo what did not, and check that the checkout still works end to end. A fast site that cannot take an order is not a fix. Then retest after every major plugin or theme update, because speed tends to slip back unnoticed.
Frequently asked questions
Does page speed affect search rankings?
Yes. Page experience, including Core Web Vitals, is one of many signals, and slow pages also lose visitors and sales regardless of ranking, so it is worth fixing either way.
What is a good PageSpeed score?
Aim for green scores on mobile, but focus on the Core Web Vitals and real-visitor data rather than one number, which can change between tests.
Why is my store slow only at checkout?
Cart and checkout pages cannot be cached like other pages, so they depend on server speed, database queries, and payment or shipping plugins. An object cache and fewer plugins usually help most.
Will a CDN fix a slow website?
A CDN delivers images and scripts faster to distant visitors, but it cannot fix a slow server or heavy pages, so fix those first.