How to Speed Up WordPress and Score 90–100 on PageSpeed

Quick answer
To speed up WordPress and score 90–100 on PageSpeed, start with fast hosting and full-page caching, then optimise the largest image (serve it in WebP or AVIF and give it high priority), self-host and preload your fonts, remove unused CSS and defer or delay non-critical JavaScript. Your real goal is to pass Core Web Vitals for real visitors: LCP under 2.5 seconds, INP under 200 milliseconds and CLS under 0.1. My own site, eslamabdullah.com, scores 100 on desktop and 97–100 on mobile using exactly these principles.
Most WordPress sites I audit are not slow because WordPress is slow. They are slow because of cheap hosting, no caching, huge images, five font families, and a page builder loading every script on every page. The good news is that every one of these problems has a known fix, and when you apply them in the right order, a WordPress site can score 90–100 on Google PageSpeed Insights, even on mobile.
In this guide I walk you through the exact process I use, from the server to the last line of JavaScript, with the metrics that actually matter in 2026.
Why WordPress speed matters in 2026
Speed affects three things you care about: rankings, conversions and how much you pay for ads. Core Web Vitals are part of Google's page experience signals, and a slow mobile site loses visitors before they even see your offer.
WordPress has a lot of room to improve here. The HTTP Archive Web Almanac 2025 reports that WordPress powers roughly 64% of CMS-driven sites, but only about 45% of WordPress sites pass Core Web Vitals on mobile, compared with around 74% for Wix. The same report shows WordPress passing LCP on about 53% of sites and CLS on about 84%. In other words, LCP and JavaScript-heavy interactions are where most WordPress sites fail, and that is where a well-optimised site pulls ahead of its competitors.
Core Web Vitals explained: LCP, INP and CLS
Google evaluates each metric at the 75th percentile of real page views: if at least 75% of visits meet the "good" threshold, the page passes that metric. Since 12 March 2024, Interaction to Next Paint (INP) has replaced First Input Delay (FID) as the responsiveness metric.
| Metric | What it measures | Good | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | How fast the main content, usually the hero image or heading, appears | ≤ 2.5 s | > 4 s |
| INP (Interaction to Next Paint) | How quickly the page responds to taps, clicks and typing | ≤ 200 ms | > 500 ms |
| CLS (Cumulative Layout Shift) | How much the layout jumps while loading | ≤ 0.1 | > 0.25 |
The PageSpeed score itself comes from a Lighthouse lab test, which weights five metrics: Total Blocking Time 30%, LCP 25%, CLS 25%, First Contentful Paint 10% and Speed Index 10%. A score of 90–100 is shown in green. Because Total Blocking Time is the biggest single weight, JavaScript is usually the difference between a mobile score of 70 and 95.
How to measure WordPress speed correctly
- Check field data first. In PageSpeed Insights, the top section ("Discover what your real users are experiencing") is real Chrome user data. This is what Google uses for Core Web Vitals.
- Use the lab score to debug. The Lighthouse score below it is a simulated test on a throttled mobile device. It is perfect for finding problems, but it varies a few points between runs.
- Watch Search Console. The Core Web Vitals report groups similar URLs, so you can see whether product pages, posts or the homepage are the problem.
- Test key templates, not just the homepage. Test a post, a category page, a product page and the checkout. Each template has its own bottlenecks.
- Record a baseline. Save scores and LCP, INP and CLS values before changing anything, then change one thing at a time.
Step 1: Fix the server side (hosting, PHP and caching)
No front-end trick can hide a server that takes two seconds to respond. Time to First Byte (TTFB) is the foundation of LCP, so I always start here.
- Quality hosting: for stores, e-learning and busy news sites, use a well-configured VPS, cloud or managed WordPress host instead of crowded shared hosting.
- Modern PHP: run a currently supported PHP 8.x version with OPcache enabled.
- Full-page caching: serve cached HTML to visitors with a server cache (LiteSpeed Cache, Nginx FastCGI cache) or a plugin such as WP Rocket or FlyingPress.
- Object caching: Redis or Memcached reduces repeated database queries, which is essential for WooCommerce and logged-in users.
- Clean database: remove old revisions, expired transients and leftover tables from deleted plugins.
- HTTP/2 or HTTP/3 and Brotli or Gzip compression enabled on the server or CDN.
If you do not want to manage this yourself, my server and hosting management service sets up and maintains exactly this stack.
Step 2: Optimise images (WebP, AVIF and the LCP image)
Images are the largest part of most pages and the most common LCP element. This is where the biggest wins usually are.
- Use modern formats. WordPress 6.5 added native AVIF support, and the WordPress core team notes AVIF images can be up to 50% smaller than JPEGs at the same quality. WebP is a safe, widely supported alternative. Check
Tools → Site Health → Info → Media Handlingto confirm your server supports AVIF. - Resize before upload. A 4000-pixel photo displayed at 800 pixels wastes bandwidth. Let WordPress generate responsive sizes with
srcset. - Never lazy-load the LCP image. The hero image above the fold should load immediately with
fetchpriority="high", and ideally be preloaded. - Lazy-load everything below the fold, including images, iframes and YouTube embeds (use a lightweight facade for videos).
- Always set width and height (or CSS aspect-ratio) so the browser reserves space and CLS stays near zero.
Step 3: Add a CDN and smarter loading
A content delivery network (CDN) serves your files from a location close to each visitor. For a site hosted in Europe with visitors in Egypt and the Gulf, or the reverse, this can cut hundreds of milliseconds per request. Cloudflare is the most common choice, and caching HTML at the edge, not only static files, brings the biggest TTFB gains when configured carefully around carts and logged-in users.
WordPress 6.8 also added speculative loading to core. By default it prefetches a page with conservative eagerness when the visitor starts to click a link, and it is disabled for logged-in users. Combined with page caching, this makes navigation between pages feel almost instant.
Step 4: Fonts, CSS, JavaScript and plugins
Fonts
Arabic sites often load heavy font files. Self-host your fonts in WOFF2 instead of loading them from a third-party server, use one variable font family if possible, subset to the scripts you need (Arabic and Latin), preload the main file and use font-display: swap so text appears immediately.
CSS
Page builders and themes often ship hundreds of kilobytes of CSS you never use. Generate critical CSS for above-the-fold content, remove unused CSS per page, and load the rest without blocking rendering.
JavaScript and INP
JavaScript is the main enemy of both Total Blocking Time and INP. Defer non-critical scripts, delay chat widgets, pixels and analytics until user interaction where appropriate, and disable plugin scripts on pages that do not need them (a contact form plugin does not belong on every product page). Audit third-party tags in Google Tag Manager regularly, because each one competes with your visitors' taps and clicks.
Warning: aggressive "delay all JavaScript" settings can break menus, sliders, checkout and consent banners. Always test forms, cart and checkout on a real phone after every change, and keep a staging copy for experiments.
Theme and plugins
Your theme and builder set the ceiling for how fast the site can be. A lightweight block theme or a well-coded classic theme is much easier to optimise than a multipurpose theme with dozens of built-in sliders and effects. The number of plugins matters less than what they load on the front end: one badly coded plugin can add more JavaScript than ten good ones. Review every plugin, remove what you do not use, and replace heavy ones with lighter alternatives or a few lines of custom code. Fewer plugins also means a smaller attack surface, which is why speed and WordPress security go hand in hand.
Live example: how eslamabdullah.com scores 97–100
My own site, eslamabdullah.com, scores 100 on desktop and 97–100 on mobile across performance, accessibility, best practices and SEO in Lighthouse and PageSpeed. You can test it yourself right now. The techniques behind it are the same ones in this guide:
- The hero image is served as responsive WebP in several sizes, preloaded with
fetchpriority="high". - Fonts are self-hosted variable WOFF2 files (Arabic and Latin subsets) and the main file is preloaded.
- CSS is generated from only the classes the pages actually use, so there is no unused stylesheet weight.
- JavaScript is loaded with
deferso it never blocks the first render. - Every image has fixed dimensions, which keeps layout shift close to zero.
The same principles apply to any WordPress site; the tools differ, but the priorities do not.
WordPress speed optimisation checklist
| Area | Action | Main metric improved |
|---|---|---|
| Hosting | Fast VPS or managed host, PHP 8.x, OPcache, Redis | TTFB, LCP |
| Caching | Full-page cache plus browser cache headers | TTFB, LCP, FCP |
| CDN | Cloudflare or similar, edge caching where safe | TTFB, LCP |
| Images | AVIF or WebP, correct sizes, preload the LCP image, lazy-load the rest | LCP, CLS |
| Fonts | Self-host WOFF2, subset, preload, font-display: swap | LCP, CLS |
| CSS | Critical CSS, remove unused CSS | FCP, LCP |
| JavaScript | Defer or delay, unload unused plugin scripts, audit third-party tags | TBT, INP |
| Theme and plugins | Lightweight theme, remove heavy or unused plugins | All metrics |
If you want this done for you, my website speed optimisation service covers a full audit, the fixes, and before-and-after reports for your key pages. I can also keep it fast over time through ongoing maintenance, because every new plugin, pixel or banner can slowly undo the work. For a new project, I build WordPress sites that are fast from day one. Get in touch and send me your URL for a first look.
Key takeaways
- Core Web Vitals targets: LCP ≤ 2.5 s, INP ≤ 200 ms and CLS ≤ 0.1, measured at the 75th percentile of real page views.
- According to the HTTP Archive 2025 Web Almanac, only about 45% of WordPress sites pass Core Web Vitals on mobile, so a fast WordPress site is a real competitive advantage.
- Hosting and page caching fix the server side; images, fonts, CSS and JavaScript fix the browser side. You need both to reach 90–100.
- Since WordPress 6.5 you can use AVIF images, which can be up to 50% smaller than JPEG at the same quality.
- Total Blocking Time carries 30% of the Lighthouse performance score, so heavy JavaScript from plugins, page builders and third-party scripts is usually what keeps mobile scores low.
Frequently asked questions
Can a WordPress site really score 100 on PageSpeed?
Yes. With good hosting, page caching, optimised images, self-hosted fonts and controlled JavaScript, many WordPress sites can reach 90–100 on desktop and 90+ on mobile. Sites with many third-party scripts, ads or heavy page builders find it harder, and the goal should be passing Core Web Vitals rather than chasing a perfect lab score.
What are good Core Web Vitals scores for WordPress?
The good thresholds are the same for every site: Largest Contentful Paint of 2.5 seconds or less, Interaction to Next Paint of 200 milliseconds or less, and Cumulative Layout Shift of 0.1 or less, measured at the 75th percentile of real page views.
Which caching plugin is best for WordPress?
It depends on your server. On LiteSpeed servers, LiteSpeed Cache is usually the best fit because it works with the server-level cache. On Nginx or Apache hosting, plugins such as WP Rocket or FlyingPress are popular choices. Use only one page caching plugin at a time.
Should I use WebP or AVIF images in WordPress?
Both are much smaller than JPEG and PNG. AVIF usually compresses better and WordPress supports it natively since version 6.5, but your server's image library must support it. WebP is a safe choice with very wide support. Many optimisation plugins can serve AVIF with a WebP fallback.
Why is my WordPress mobile score much lower than desktop?
PageSpeed tests mobile on a simulated mid-range phone with a slower network and CPU, so heavy JavaScript and large images hurt much more. Reducing JavaScript, optimising the LCP image and removing unused CSS usually closes most of the gap.
Need a hand with this?
I can do it for you – fast, secure and done right the first time. Free consultation on WhatsApp.
Sources
- web.dev – How the Core Web Vitals metrics thresholds were defined
- web.dev – Interaction to Next Paint is officially a Core Web Vital
- HTTP Archive – Web Almanac 2025: CMS chapter
- Make WordPress Core – WordPress 6.5 adds AVIF support
- Make WordPress Core – Speculative Loading in 6.8
- PageSpeed.ONE – Lighthouse Performance Score (metric weights)





