WebAnts

WordPress · Performance · 14 min read

WordPress Website Speed Optimisation

Your WordPress site is slow. Here is exactly why — and the 8 proven fixes that push Core Web Vitals into the green, Lighthouse past 90, and your rankings upward.

By WebAntsPublished 4 September 20268 fixes · realistic expectations

Quick summary

The average WordPress site on shared hosting scores 35–55 on Google Lighthouse. With image optimisation, a caching plugin, and a CDN, most sites reach 70–80 without touching a line of code. Getting above 90 — which is what actually moves rankings — requires a developer to fix render-blocking scripts, inline critical CSS, and correctly preload the LCP image. This guide covers both levels. If you would rather hand it off, WebAnts offers a full WordPress speed optimisation service from £499.

Why WordPress is slow by default

WordPress powers 43% of the web. That popularity comes with a cost: the platform is built to be flexible for everyone, not fast for your specific site. Out of the box, WordPress generates pages dynamically on every request — meaning PHP, MySQL queries, plugin hooks, and theme templates all fire before a single byte reaches the visitor's browser.

Layer on a visual page builder (Elementor, Divi, WPBakery), a contact form plugin, a slider, a social sharing widget, a cookie consent banner, and a few SEO tools, and you've easily added 20–40 additional HTTP requests and 2–4 MB of JavaScript the browser must parse before anything appears on screen. This is why keeping plugins lean and regularly audited is part of ongoing site maintenance — not a one-off task.

The 6 root causes of a slow WordPress site

01

Unoptimised images

PNG/JPEG files at original camera resolution, no WebP conversion, no lazy loading. Often accounts for 60–80% of page weight.

02

Too many plugins

Each active plugin can add scripts, stylesheets, and database queries. 30+ plugins on a shared server is a common recipe for 5+ second load times.

03

No server caching

Without caching, WordPress rebuilds every page from scratch on each visit. A caching plugin serves pre-built HTML instead — often 10× faster.

04

No CDN

Serving all assets from a single UK server means visitors in the US, Asia, or anywhere else wait for transatlantic round-trips on every image and script.

05

Cheap shared hosting

Shared hosting at £2–5/month puts your site on a server with hundreds of others. High TTFB (Time to First Byte, often 700ms+) puts a hard ceiling on performance.

06

Bloated theme

All-in-one themes like Divi and Avada load their entire framework on every page. A lean custom theme or a block theme loads only what each page actually needs.

Core Web Vitals explained for WordPress owners

Google uses three metrics — collectively called Core Web Vitals — to measure real-world page experience. These are ranking signals. They are measured from real Chrome users visiting your site and reported in Google Search Console under "Core Web Vitals."

LCP — Largest Contentful Paint

Good: Under 2.5 secondsPoor: Above 4.0s

How long it takes for the largest visible element (usually your hero image or H1) to appear.

WordPress issue: WordPress commonly fails LCP because the hero image is not preloaded, is too large, or is served in JPEG from a slow server.

INP — Interaction to Next Paint

Good: Under 200 millisecondsPoor: Above 500ms

How quickly the page responds when a visitor clicks or taps something. Replaced FID as a Core Web Vital in March 2024.

WordPress issue: Heavy JavaScript from page builders and plugins (Elementor, sliders, chat widgets) blocks the main thread and delays responses.

CLS — Cumulative Layout Shift

Good: Under 0.1Poor: Above 0.25

How much the page layout jumps around as it loads — images without defined dimensions, web fonts swapping in, and ads are the main culprits.

WordPress issue: Common in WordPress when images have no width/height attributes, Google Fonts load without a fallback, or cookie banners push content down.

Important distinction

Your Lighthouse score (the number in Chrome DevTools or PageSpeed Insights) is a lab simulation. Google's Core Web Vitals field data — the ranking signal — comes from real Chrome users and takes 28 days to update after any changes. Improving Lighthouse is useful, but you need to monitor the "Core Web Vitals" report in Google Search Console to know what actually affects your rankings.

1

Images — the biggest win

For most WordPress sites, images are the single largest contributor to page weight and slow LCP. The good news: image optimisation is the highest-impact fix you can make without a developer.

What to do

  • Convert all images to WebP format. WebP is 25–35% smaller than JPEG at the same quality. Most modern image plugins (ShortPixel, Imagify, EWWW) do this automatically.

  • Compress images before uploading. A hero image should be under 200KB. A blog thumbnail under 50KB. Use Squoosh.app to check sizes before any plugin touches them.

  • Add width and height attributes to every <img> tag. This prevents layout shift (CLS). Page builders often strip these — check in DevTools.

  • Enable lazy loading for below-the-fold images. WordPress adds loading="lazy" by default since version 5.5, but some themes override this.

  • Never lazy-load the hero image. The LCP element must load immediately. Add fetchpriority="high" to the hero image tag (see Fix 8 for the full LCP fix).

  • Use srcset for responsive images. WordPress generates srcsets automatically — confirm your theme is not overriding them.

Realistic impact: Image optimisation alone typically reduces page weight by 40–70% and improves Lighthouse Performance by 10–25 points on image-heavy pages. For sites built specifically around conversions — like landing pages — image speed is especially critical as every extra second directly reduces conversion rate.

2

Server caching

Without caching, WordPress runs PHP and MySQL on every single page request — even when nothing on the page has changed. A caching plugin generates static HTML files and serves those instead, bypassing most of the stack entirely.

Which caching plugin to use

WP Rocket

Paid (£49/yr)

Best all-in-one option. Works on any host. Handles caching, minification, lazy loading, and CDN integration in one plugin. Recommended for most sites.

LiteSpeed Cache

Free

Best free option — but requires a LiteSpeed server. Check with your host. Common on Hostinger, SiteGround, and Cloudways.

W3 Total Cache

Free

Works on any host. More configuration required. Good if you are comfortable with technical settings and do not want to pay for WP Rocket.

WP Super Cache

Free (by Automattic)

Simple, reliable, and easy to set up. Does caching only — you will need separate plugins for minification and CDN.

Realistic impact: Enabling page caching reduces Time to First Byte (TTFB) from 800ms+ to under 200ms on most WordPress installs. This alone can improve Lighthouse by 15–30 points.

3

CDN (Content Delivery Network)

A CDN stores copies of your site's static files (images, CSS, JS) on servers distributed globally. When a visitor loads your page, files are served from the nearest server — not from your hosting server in, say, Frankfurt — cutting latency significantly.

Cloudflare's free plan is the standard starting point for WordPress sites. It takes 15 minutes to set up (change your nameservers), adds basic DDoS protection, and its CDN covers 300+ cities worldwide. Most caching plugins (WP Rocket, LiteSpeed Cache) integrate directly with Cloudflare.

For sites with large image libraries or video content, Cloudflare's paid plans or a dedicated image CDN like BunnyCDN (from £8/month) offer better cache control and image transformation features.

Realistic impact: Adding a CDN typically reduces load time for non-UK visitors by 30–60% and improves Lighthouse (which simulates a US location) by 5–15 points.

4

Plugin audit

Every active WordPress plugin adds PHP execution time, database queries, and potentially additional CSS and JavaScript files. Plugins are not inherently bad — but unused and poorly coded ones are a major drag.

How to audit your plugins

  • Install the Query Monitor plugin temporarily. It shows you exactly which plugins are adding the most database queries and PHP execution time. Uninstall it after the audit.

  • Deactivate every plugin you have not used in 30 days. Test your site after each deactivation. You will be surprised how many are safe to remove.

  • Replace multiple single-purpose plugins with one comprehensive tool. Example: replace a separate slider plugin, a lightbox plugin, and an animation plugin with CSS-only equivalents.

  • Check if your page builder offers everything. Elementor includes forms, popups, and sliders — you may not need Contact Form 7, Ninja Popups, and a separate slider plugin alongside it.

  • Delete deactivated plugins. Deactivated plugins still load their files on the server — delete them completely if you are not going to use them.

5

Web fonts

Google Fonts loaded via a remote stylesheet are one of the most common causes of render-blocking requests on WordPress sites. Each font call requires a DNS lookup, a connection, and a file download — before the browser can render text.

The fix

  • Self-host your Google Fonts. Download the font files (use google-webfonts-helper.herokuapp.com) and serve them directly from your server or CDN. This eliminates the external DNS lookup.

  • Add font-display: swap to your @font-face declarations. This tells the browser to show fallback text immediately and swap in the web font when it loads — preventing invisible text during load (FOIT).

  • Preload your primary font file. Add <link rel="preload" as="font"> for the woff2 file of your body font in your theme's <head>.

  • Reduce font variants. Every font weight and style is a separate file. If your design uses Regular, Bold, and Italic — that is 3 files. If you have loaded 6 weights "just in case," remove the unused ones.

Code snippet — self-hosted font with preload

/* In your theme's functions.php — remove Google Fonts */
function remove_google_fonts() {
    wp_dequeue_style('wp-block-library-theme');
}
add_action('wp_enqueue_scripts', 'remove_google_fonts');

/* In your CSS — self-hosted font declaration */
@font-face {
    font-family: 'Inter';
    src: url('/fonts/inter-v13-regular.woff2') format('woff2');
    font-weight: 400;
    font-style: normal;
    font-display: swap;
}
6

JavaScript and CSS

Render-blocking JavaScript and CSS are a major cause of poor Lighthouse scores. If a script loads in the <head> without defer or async, the browser stops building the page until that script finishes loading and executing.

What to do

  • Defer non-critical JavaScript. WP Rocket and LiteSpeed Cache both have a "Defer JS" option. Enable it — but test thoroughly, as some plugins break when deferred.

  • Minify CSS and JS. Remove whitespace and comments from your stylesheets and scripts. Every caching plugin offers this. 5–15% file size reduction is typical.

  • Remove unused CSS. Tools like PurgeCSS or the Critical CSS feature in WP Rocket generate a minimal stylesheet for each page, stripping out classes from your theme that are never used.

  • Inline critical CSS. The CSS needed to render above-the-fold content can be inlined in the <head> so the browser does not need to wait for the external stylesheet. WP Rocket's "Load CSS Asynchronously" does this.

  • Load third-party scripts (chat widgets, analytics, social embeds) with a delay. WP Rocket's "Delay JavaScript" can postpone scripts like Intercom or Hotjar until after the page is interactive.

Warning

Aggressive JS deferral can break interactive features — forms, sliders, and checkout flows are common victims. Always test on a staging site before enabling on production. If a plugin breaks when deferred, most caching tools let you exclude it by script handle or URL.

7

Database and hosting

A bloated WordPress database increases query times. Over years of use, WordPress accumulates thousands of post revisions, transients, spam comments, and orphaned metadata. Cleaning the database takes minutes and can reduce query overhead noticeably on large sites.

Database cleanup

  • Install WP-Optimize or Advanced DB Cleaner. Run a cleanup to remove: post revisions (limit to 5 per post in wp-config.php), auto-draft posts, spam and trashed comments, expired transients, and orphaned meta.

  • Schedule regular cleanups. Once a month is sufficient for most sites. WP-Optimize can run on a schedule automatically.

When to upgrade hosting

If your TTFB (Time to First Byte — measured in Chrome DevTools Network tab, or PageSpeed Insights) is consistently above 600ms even with caching enabled, your hosting is the bottleneck. No amount of plugin optimisation will fix a slow server.

Budget (under £10/mo)

SiteGround, Hostinger

Fine for low-traffic sites. TTFB typically 300–600ms with caching.

Mid-range (£25–80/mo)

Cloudways, Kinsta Starter

Better TTFB (100–300ms), dedicated resources, auto-scaling. Recommended for growing sites.

Managed WP (£80–300/mo)

Kinsta, WP Engine

Sub-100ms TTFB, enterprise CDN, auto-scaling. Best for high-traffic or business-critical sites.

8

LCP hero image — the ranking fix

LCP (Largest Contentful Paint) is the Core Web Vital that Google weights most heavily in ranking decisions. On most WordPress sites, the LCP element is the hero image or the H1 heading. Getting LCP under 2.5 seconds — especially on mobile — is where you will see the most measurable ranking impact.

How to identify your LCP element

Open Chrome DevTools (F12), go to Performance → record a page load. Click the LCP marker in the timeline. Chrome will highlight the element. Alternatively, run your URL through PageSpeed Insights — it flags the LCP element in the diagnostics.

The LCP fix checklist

  • Serve the hero image in WebP format, sized correctly for the display dimensions (not the full camera resolution). For a full-width desktop hero, 1440px wide at 80% WebP quality is the ceiling.

  • Add fetchpriority="high" to the hero <img> tag. This tells the browser to download this image before anything else. Most page builders do not do this by default — it requires manual template editing.

  • Remove lazy loading from the hero image. Never add loading="lazy" to the LCP element. If your theme applies it globally, exclude the hero image specifically.

  • Preload the hero image in the <head>: <link rel="preload" as="image" href="/hero.webp" fetchpriority="high">. This gives the browser a head start before it even parses the HTML body.

  • Ensure the LCP image is in the HTML source, not injected by JavaScript. Images set as CSS backgrounds or rendered by JS frameworks are discovered late by the browser and almost always fail LCP.

Code snippet — preloaded, prioritised hero image

<!-- In your theme's header.php, inside <head> -->
<link
  rel="preload"
  as="image"
  href="/wp-content/uploads/hero.webp"
  fetchpriority="high"
>

<!-- In your theme template — the hero img tag -->
<img
  src="/wp-content/uploads/hero.webp"
  width="1440"
  height="810"
  alt="[Descriptive alt text]"
  fetchpriority="high"
>

Realistic before/after expectations

Speed optimisation results vary significantly based on your starting point, hosting, and theme. Here are realistic ranges — not best-case marketing numbers.

ScenarioBefore (typical)After optimisation
Shared hosting + no caching + JPEG imagesLighthouse 30–50, LCP 6–12sLighthouse 60–75, LCP 3–5s (with images + caching + CDN)
Mid-range hosting + caching + WebP imagesLighthouse 55–70, LCP 3–5sLighthouse 80–90, LCP 2–3s (with JS defer + font fix)
Good hosting + full optimisation + custom themeLighthouse 70–80, LCP 2–3sLighthouse 90–98, LCP 1–2s (with LCP preload + critical CSS)
Elementor site on any hostingLighthouse 20–45 (mobile)Lighthouse 50–70 (mobile) — Elementor imposes a performance ceiling

The Elementor ceiling — an honest note

Elementor (and similar visual builders like Divi and WPBakery) generate large amounts of inline CSS and JavaScript that are difficult to remove without breaking the builder. On mobile, Elementor sites rarely exceed Lighthouse 65–70 regardless of other optimisations. If your Google Search Console shows persistent "Poor" LCP on mobile and you are using Elementor, a website redesign with a lighter framework (Kadence, GeneratePress, or a custom block theme) is the only way to break through that ceiling.

When do Google rankings improve?

Google collects Core Web Vitals field data from real Chrome users over a rolling 28-day window. After making speed changes, it takes 28 days for the improvement to fully reflect in your Google Search Console CWV report — and a further 4–12 weeks to see measurable ranking movement in competitive searches. Speed is one ranking factor among many; it will not rescue a site with weak content or no backlinks, but for pages already near the top, it can break ties. If you want a full audit, book a free discovery call and we will review your Google Search Console and PageSpeed Insights data together.

AIEO note

Should I optimise for AI search engines too?

ChatGPT, Perplexity, Google AI Overviews, and Gemini increasingly answer "why is my WordPress site slow?" queries by citing structured content from the web. Fast pages get cited more — not because AI engines measure your Lighthouse score directly, but because fast pages reduce your bounce rate, increase dwell time, and earn more backlinks (all signals AI engines use to evaluate authority).

More directly: adding FAQPage schema to your service pages (as WebAnts does on the speed optimisation service page) makes your content machine-readable for AI crawlers. Structured, answer-formatted content — like numbered steps, defined terms, and concrete data — is what AI engines extract and cite. If you are about to rebuild your site and want to protect your existing rankings in the process, read our guide on website redesign without losing SEO.

Frequently asked questions

Sourced from what WordPress site owners actually search for.

Why is my WordPress website so slow?

The most common causes are unoptimised images, too many plugins, no server caching, cheap shared hosting, and a bloated page builder theme. Start with image compression and a caching plugin — these two changes alone fix the majority of slow WordPress sites.

What is a good Lighthouse score for WordPress?

Google rates 90–100 as Good, 50–89 as Needs Improvement, and 0–49 as Poor. A well-optimised WordPress site should score 85–95 on desktop and 70–85 on mobile. Mobile scores are always lower because Lighthouse throttles the connection to simulate a mid-range phone on 4G.

Does WordPress speed affect Google rankings?

Yes. Core Web Vitals (LCP, INP, CLS) have been a confirmed ranking signal since 2021. Pages with "Poor" LCP face a ranking disadvantage in competitive searches. Google's own data shows 53% of mobile users abandon sites that take longer than 3 seconds — higher bounce rate is an indirect ranking signal.

What is LCP and why does WordPress fail it?

LCP (Largest Contentful Paint) measures how long it takes for the largest visible element — usually your hero image — to appear. Target: under 2.5 seconds. WordPress fails it most often because the hero image is not preloaded, is too large, or loads from a slow server without CDN caching.

What is the difference between Lighthouse and Core Web Vitals?

Lighthouse is a lab simulation (controlled test conditions). Core Web Vitals are field data from real Chrome users visiting your site over 28 days. Google uses field data for rankings. A high Lighthouse score strongly suggests good Core Web Vitals, but check your Google Search Console CWV report to confirm what Google actually sees.

How long does WordPress speed optimisation take?

Quick wins (image compression, caching plugin, CDN) take a day and typically improve Lighthouse by 15–25 points. A thorough optimisation including JS deferral, critical CSS, and LCP fixes takes 2–5 days. If a page builder rebuild is needed, allow 2–4 weeks. Core Web Vitals field data updates in Google Search Console after 28 days.

Which caching plugin is best for WordPress?

WP Rocket is the best all-in-one paid option (£49/yr) and works on any host. LiteSpeed Cache is the top free option but requires a LiteSpeed server (common on Hostinger, SiteGround, Cloudways). For any host, W3 Total Cache is a reliable free alternative.

Does changing WordPress hosting improve speed?

Yes — significantly. If your TTFB is above 600ms with caching enabled, your hosting is the bottleneck. Moving to managed WordPress hosting (Kinsta, WP Engine) or a VPS on Cloudways typically reduces TTFB to under 200ms and improves Lighthouse by 10–20 points with no other changes.

Can I speed up WordPress without a developer?

Yes, for the basics: install a caching plugin, compress images with ShortPixel or Smush, enable Cloudflare CDN, and remove unused plugins. These steps often improve load time by 30–50%. For Core Web Vitals fixes that affect rankings — LCP preloading, critical CSS inlining, render-blocking JS elimination — you need a developer to edit theme templates.

Want us to fix your WordPress speed?

WebAnts runs a full speed audit — Lighthouse, Core Web Vitals, server TTFB, LCP element, render-blocking scripts — and fixes what actually moves rankings. From £499.

WebAnts is a London web design and development agency specialising in WordPress speed optimisation, Core Web Vitals improvement, and Lighthouse score optimisation. We serve clients across London and the UK. Contact: hello@webants.io · +44 20 3983 9795.