Google it and you get lists. "Ten tips to make your website faster!" Install a caching plugin. Compress your images. Use a CDN. Not wrong, but they're plasters. The real speed gains are in the foundation: how your server is configured, how your code is written, and how your assets are loaded. Let's talk about that.
The server: where it all begins
Choose the right hosting
Everything below is irrelevant if your server itself is the bottleneck. A €5/month hosting package at a bulk provider undermines every optimisation. Start at the foundation: a server with reserved resources and a decent configuration.
NGINX over Apache
Apache is the default at many hosting providers. NGINX is faster at serving static files and better at handling many simultaneous connections. The difference is measurable: NGINX serves the same page in a fraction of the time.
Server-side caching
A page rebuilt on every visit by PHP and the database is always slower than a page that's ready as a static HTML file. NGINX FastCGI Cache, Redis or Varnish — server-side caching is the biggest single step you can take.
PHP version
Every new PHP version is faster than the last. PHP 8.x is up to twice as fast as PHP 7.0. Check your version. Upgrade if you can. It takes five minutes and delivers measurable speed.
The frontend: what the browser has to load
Optimise images
Images account for 50-70% of page size. Three steps:
- Compress: Tools like ShortPixel, Imagify or Squoosh.
- Right format: WebP or AVIF instead of PNG/JPEG. Smaller file, same quality.
- Lazy loading: Off-screen images only load when they come into view. Standard in modern browsers with
loading="lazy".
Minimise CSS and JavaScript
Every kilobyte counts. Minify your CSS and JS (remove whitespace, comments, unused code). Bundle where possible. Load non-critical scripts with defer or async. Remove what you don't use — that jQuery library you added three years ago but no longer call anywhere? Get rid of it.
Render-blocking resources
If the browser has to wait for a CSS or JS file before it can draw anything, that's called render-blocking. Put critical CSS inline in the <head>. Load the rest asynchronously. Move scripts to the end of the <body> or use defer.
Web fonts
Loading fonts takes time, especially when they come from Google Fonts (extra DNS lookup, extra HTTP request). Self-host your fonts, use font-display: swap to make text visible right away, and limit the number of variants.
Content Delivery Network (CDN)
A CDN serves your files from a server close to your visitor. Your visitor in Amsterdam gets your images from a server in Amsterdam, not from a server in Frankfurt or New York. Cloudflare is free and effective. BunnyCDN is affordable and fast. For most websites a CDN is a quick win.
Measuring and monitoring
Google PageSpeed Insights
The standard. Measures LCP (Largest Contentful Paint), FID/INP (Interaction to Next Paint) and CLS (Cumulative Layout Shift). Score below 90? There's work to do.
GTmetrix
More detailed than PageSpeed. Shows exactly which files take longest to load, which scripts block, and where the waterfall chart stalls.
WebPageTest
For the serious optimiser. Test from different locations and connections. Compare before and after. The filmstrip view is worth its weight in gold.
Real User Monitoring
Synthetic tests (PageSpeed, GTmetrix) are useful, but real user data is better. Google Search Console shows Core Web Vitals from real visitors. That's the truth.
The order of attack
If you don't know where to start:
- Server: Upgrade hosting, enable caching
- Images: Compress and convert to WebP
- Scripts: Remove unused JS/CSS, defer the rest
- Fonts: Self-host, limit variants
- CDN: Enable Cloudflare or an alternative
- Measure again: Compare the results
In that order you tackle the biggest gains first.