Why WordPress Sites Are Slow by Default

WordPress powers 43% of the web but has a well-earned reputation for slow performance. The reasons are structural: every page request runs PHP to query the database, assemble templates, and render HTML — all before anything reaches the user's browser. Add a premium theme loading 40 CSS files, 8 unoptimised plugins, and 4MB of uncompressed images, and you have the typical slow WordPress site.

The good news: a properly optimised WordPress site can achieve LCP under 1 second, green Core Web Vitals, and PageSpeed scores above 90 on mobile. Here's the complete roadmap.

The performance audit before you start: Baseline your site with Google PageSpeed Insights (mobile score), WebPageTest on 4G throttling, and GTmetrix. Record LCP, CLS, INP, Total Page Weight, and TTFB. Every fix you make should be measured against this baseline.

Step 1: Upgrade Your Hosting (The Foundation)

No amount of plugin optimisation will make a poorly-hosted WordPress site fast. Shared hosting with PHP 7.4, no object caching, and servers in the wrong region will cap your TTFB at 800ms+ before a single byte of content loads.

The hosting upgrade path:

  • Managed WordPress hosting: Kinsta, WP Engine, or Cloudways offer PHP 8.2+, built-in Redis object caching, and server-level page caching. Kinsta's edge caching achieves TTFB under 100ms globally.
  • Object caching: Redis or Memcached stores database query results in memory. Without it, every page load runs the same database queries repeatedly. Redis typically reduces TTFB by 200–400ms.
  • PHP 8.2+: PHP 8.2 is 2–3× faster than PHP 7.4 for WordPress. Check your hosting control panel and upgrade immediately if you're on anything below 8.0.

Step 2: Implement Page Caching

Page caching stores the fully-rendered HTML of each page and serves it directly — bypassing PHP and the database entirely. This is the single biggest performance improvement most WordPress sites can make.

The best caching plugins:

  • WP Rocket (£49/year) — the easiest to configure correctly. Page caching, GZIP compression, CSS/JS minification, and database optimisation in one plugin. Best choice for most sites.
  • W3 Total Cache (free) — more complex but free. Requires correct configuration to be effective — misconfigured W3TC is worse than no caching.
  • LiteSpeed Cache (free) — the best option if your host runs LiteSpeed server. Integrates directly with the server for optimal performance.
WP Rocket quick config: Enable page caching, browser caching, GZIP compression, CSS/JS minification, and "Load JS Deferred." These 5 settings handle 80% of what the plugin can do and are safe to enable on most themes.

Step 3: Image Optimisation

Images are typically 60–80% of a WordPress page's total weight. Fixing images is the highest-ROI optimisation on most sites.

Serve correctly-sized images: WordPress generates multiple image sizes automatically. Use wp_get_attachment_image() with the correct size argument — don't load a 2000px image and scale it to 400px via CSS.

Convert to WebP: WebP images are 25–35% smaller than JPEG at equivalent quality. Use Imagify or ShortPixel to bulk-convert your media library and automatically serve WebP to supporting browsers.

Lazy load: WordPress 5.5+ adds loading="lazy" to images automatically. Ensure your theme doesn't override this. Add fetchpriority="high" to your hero/above-fold image to tell the browser to prioritise it.

CDN delivery: Serve images from a CDN (Cloudflare, BunnyCDN, or the CDN built into your host) so they load from a server geographically close to each visitor.

Step 4: Eliminate Plugin and Theme Bloat

Every plugin you install can load CSS and JavaScript on every page — even pages where the plugin does nothing. Audit your plugin load using Query Monitor (free plugin) to see exactly what each plugin adds per page.

Common offenders:

  • Contact form plugins loading on every page when only the contact page needs them
  • WooCommerce loading cart scripts on blog posts
  • Slider plugins loading 200KB of JavaScript on pages with no sliders
  • Social sharing plugins loading multiple external API calls

Use Asset CleanUp or WP Rocket's "Remove Unused CSS" feature to disable plugin assets on pages where they're not needed. This alone can remove 500KB–1MB from non-relevant pages.

Step 5: Cloudflare and Content Delivery

Cloudflare's free plan adds a CDN, basic DDoS protection, and global edge caching to any WordPress site. The Pro plan ($20/month) adds Automatic Platform Optimisation (APO) — a feature that caches your WordPress pages at Cloudflare's 310 edge locations globally.

With APO enabled, cached pages load from a server 5–20ms from most global visitors, making 100ms TTFB achievable worldwide. This is the closest thing to Vercel/Next.js edge performance available for WordPress.

Results from a typical optimisation engagement: PageSpeed mobile 38 → 88. LCP 4.2s → 0.9s. Total page weight 5.8MB → 720KB. Conversion rate +24% within 30 days. These are real results from a WooCommerce fashion client we optimised in 2024.