Your WordPress site is slow. You know it. Your visitors know it. And Google knows it too.
A one-second delay in page load time cuts conversions by 7 percent, according to a study by Portent. For a site making even a modest 100 sales a month, that delay quietly costs you money every single day. For larger stores, the number gets painful fast.
Speed is no longer just a nice thing to have. Since Google launched Core Web Vitals as a ranking signal in 2021 and replaced FID with INP in March 2024, your page experience scores now directly affect where you show up in search results. A slow site loses rankings. A fast site keeps them.
The good news is that most WordPress sites are slow for the same few fixable reasons. Bad hosting, no caching, unoptimized images, and bloated themes. Once you know which one is hurting you most, fixing it is usually straightforward.
This guide walks you through everything: how to test your current speed, what the numbers mean, and how to fix each problem in plain steps. No unnecessary jargon. No advice that requires a developer degree.
Quick answer: If you only do three things, do these. Install a caching plugin, convert your images to WebP, and make sure your hosting TTFB is under 300ms. These three changes fix 80 percent of speed problems on most WordPress sites.
Test Your WordPress Speed Before Changing Anything
The worst mistake you can make is start changing settings before you know what is actually wrong. You might spend two hours fiddling with JavaScript minification when the real problem is your server taking 800ms to respond. Testing first saves you from fixing the wrong thing.
Use at least two tools, because each tool measures slightly different things and tests from different server locations. A single test from one location can give you a misleading result.
Google PageSpeed Insights
Go to pagespeed.web.dev and enter your URL. This is the most important tool because it uses real data from Chrome users visiting your site, not just a simulated test. It shows your Core Web Vitals scores for both mobile and desktop.
The scores you want to aim for in 2026 are LCP under 2.5 seconds, INP under 200 milliseconds, and CLS under 0.1. If you are failing any of these, the tool shows you exactly what to fix and in what order.
One thing most people miss: always test your mobile score, not just desktop. Google uses mobile-first indexing, so your mobile score is the one that affects your rankings.
GTmetrix
Go to gtmetrix.com and run a test. GTmetrix gives you a waterfall chart showing every file your page loads and how long each one takes. This is where you discover things like a 3MB header image loading before anything else, or a third-party script from an old plugin that adds 1.2 seconds to your load time.
Look at the ‘Largest Contentful Paint’ entry in the waterfall. Whatever element triggers LCP is your first priority. Usually it is a large image or a font file loading slowly.
Pingdom
Pingdom lets you test from multiple locations around the world. This matters because a site hosted in New York loads fine for someone in New York but might be slow for someone in London or Mumbai. If your audience is worldwide, your TTFB from distant locations tells you whether you need a CDN.
Here is a comparison of the main tools and what each one is best for:
| Tool | Best For | Free? | Test Locations | CWV Data? | Best Feature |
| Google PageSpeed Insights | SEO & CWV scores | Yes | Global | Yes | Shows LCP, INP, CLS scores |
| GTmetrix | Detailed waterfall | Free + Paid | 7 locations | Yes | Waterfall + video replay |
| Pingdom | Global TTFB testing | Paid | 14 locations | No | Simple pass/fail report |
| WebPageTest | Advanced diagnosis | Yes | 100+ locations | Yes | Filmstrip + repeat view |
| Chrome DevTools | Real browser testing | Yes | Your location | Yes | Live page analysis |
Run your PageSpeed Insights test twice: once on the homepage and once on a product or blog post page. These often have very different scores because post pages load more content, images, and dynamic elements.
Core Web Vitals: What Google Actually Measures
Core Web Vitals are three specific measurements Google uses to score your page experience. They became a ranking factor in 2021, and in March 2024 Google swapped one of them. FID (First Input Delay) was replaced with INP (Interaction to Next Paint). Many sites optimized for FID and have not updated their strategy to cover INP, which is an opportunity you can take advantage of.
Here is what each metric measures and the targets you need to hit:
| Metric | What It Measures | Good Score | Needs Work | Biggest Fix |
| LCP (Largest Contentful Paint) | How fast the main content loads | Under 2.5s | Over 4s | Optimize hero image, improve hosting TTFB |
| INP (Interaction to Next Paint) | How fast page responds to clicks | Under 200ms | Over 500ms | Defer unused JS, reduce main thread work |
| CLS (Cumulative Layout Shift) | How much the page jumps during load | Under 0.1 | Over 0.25 | Set image dimensions, avoid late-loading ads |
LCP: Fix Your Largest Element First
LCP measures how long it takes for the biggest visible element on the page to fully load. For most WordPress sites this is the hero image at the top of the page, or sometimes a large heading with a background image.
The fastest LCP fix is to add the fetchpriority attribute to your hero image. This tells the browser to load it before everything else. Most good caching plugins handle this automatically. If yours does not, add this to your hero image tag:
Add fetchpriority=”high” to your hero image tag so the browser loads it first, before other images on the page.
The second LCP fix is to reduce the file size of that image. Convert it to WebP format, compress it to 80 percent quality, and make sure it is not wider than it needs to be on screen.
INP: The New Metric Most Sites Are Failing
INP replaced FID in March 2024 and measures how quickly your page responds when a visitor clicks or taps something. A page with a bad INP score feels sluggish even if it loads fast. Click a button and nothing happens for half a second. That delay is what INP measures.
The main cause of bad INP is too much JavaScript running on the main thread. Every time a visitor clicks something, the browser has to pause its JavaScript work to respond. If you have too many scripts running, that pause gets long.
To fix INP, identify which scripts are blocking the main thread using Chrome DevTools. Open DevTools, go to the Performance tab, and click a button on your page. The flame chart shows you exactly which scripts are running and how long they take. Long tasks over 50 milliseconds are the ones hurting your INP score.
CLS: Stop the Page from Jumping
CLS measures how much your page moves around while it is loading. If you have ever been reading a page and an image suddenly loaded and pushed all the text down, that is a CLS problem.
The fix is simple: always set width and height attributes on every image in your HTML or CSS. When the browser knows the dimensions before the image loads, it reserves the right amount of space and the page does not shift.
You can check your site’s Core Web Vitals scores in Google Search Console under the ‘Core Web Vitals’ report. It shows your real-world scores based on actual Chrome users visiting your site.
Hosting: The Foundation That Everything Else Depends On
Every other optimization you make sits on top of your hosting. A good caching plugin on slow hosting is like putting new tires on a car with a broken engine. You will see some improvement, but the core problem is still there.
TTFB, or Time to First Byte, is the clearest measure of your hosting quality. It is the time between a visitor requesting your page and your server starting to respond. A TTFB above 600ms means your hosting is the main bottleneck, and no amount of frontend optimization will fully compensate for it.
Here is how different hosting types compare on speed:
| Hosting Type | Typical TTFB | Best For | Price Range | Speed Rating |
| Shared Hosting | 400ms – 900ms | New blogs, test sites | $1 – $10/mo | Average |
| VPS Hosting | 200ms – 400ms | Growing sites | $10 – $40/mo | Good |
| Managed WP Hosting | 100ms – 250ms | Business sites, WooCommerce | $25 – $100/mo | Excellent |
| Cloud Hosting (e.g. Cloudways) | 150ms – 300ms | Flexible scaling needs | $14 – $80/mo | Very Good |
PHP Version: The Fastest Free Upgrade You Can Make
If your site is running PHP 7.4, switching to PHP 8.3 can cut your server processing time by up to 60 percent. PHP 8.3 is significantly faster at executing WordPress code than older versions. This is the one server change that costs nothing and delivers the biggest immediate improvement.
To check your PHP version, go to Tools > Site Health in your WordPress dashboard. It shows your current version. To upgrade, go to your hosting control panel (cPanel or equivalent) and look for the PHP Version selector. Choose PHP 8.3.
Before upgrading, check your plugins and theme are compatible. Most major plugins support PHP 8.3. If anything breaks after switching, you can roll back to your previous version in the same control panel.
The Noisy Neighbor Problem on Shared Hosting
On shared hosting, your site shares a server with hundreds of other websites. When one of those sites gets a traffic spike or runs a heavy process, it can slow down every other site on the same server. You have no control over this. It is one of the main reasons why shared hosting TTFB is inconsistent.
If your speed test results vary wildly between runs, this is usually the cause. The solution is to upgrade to managed hosting or a VPS where you have dedicated resources.
Related: Best WordPress Hosting in 2026: 7 Hosts Tested and Compared
Caching: The Fastest Win You Can Get Today
When someone visits your WordPress site, the server runs PHP code, queries the database, builds the HTML, and sends it to the visitor. For a simple blog post this takes maybe 400 milliseconds. Do that for every visitor, every page load, and your server gets very busy very fast.
Caching stops most of this from happening. The first time a visitor loads a page, the server builds it and saves a static copy. Every visitor after that gets served the saved copy in milliseconds, without the server doing any work.
There are three types of caching, and they work together:
- Page caching: stores the full HTML output of each page so the server does not rebuild it for every visitor.
- Object caching (Redis or Memcached): stores the results of database queries so repeated queries are answered from memory instead of hitting the database again.
- Browser caching: tells visitors’ browsers to save static files like images, CSS, and fonts so they do not re-download them on every page visit.
Redis Object Cache: The Most Impactful Cache for WooCommerce
For most simple sites, page caching is enough. But for WooCommerce stores, membership sites, and sites with lots of logged-in users, object caching with Redis makes the biggest difference.
WooCommerce runs dozens of database queries per page load to check inventory, prices, user sessions, and cart data. Redis stores the results of these queries in memory. The second time the same query runs, Redis answers it instantly from RAM instead of hitting the database. The difference on busy WooCommerce sites can be dramatic.
Related: How to Install and Configure Redis Cache for WordPress
PHP OPcache: Speed Up PHP Execution Itself
OPcache is a built-in PHP extension that compiles your PHP files and stores the compiled versions in memory. Without OPcache, PHP recompiles the same files on every request. With OPcache, PHP reads the compiled version from memory. For a typical WordPress site this reduces PHP execution time by 30 to 50 percent.
Most managed hosts enable OPcache by default. If you are on shared hosting, check your host’s PHP settings panel. If it is available, turn it on.
Related: How to Enable PHP OPcache on Your WordPress Server
Related: Persistent Object Cache in WordPress: Complete Setup Guide
Which Caching Plugin Should You Use?
The table below compares the main caching plugins based on real-world Core Web Vitals pass rates from the Chrome User Experience Report across 2 million sites.
| Plugin | Free? | CWV Pass Rate | Ease of Use | Best For | Standout Feature | Price (Paid) |
| WP Rocket | No | 49% | Very Easy | Most sites | Works out of the box | $59/yr |
| LiteSpeed Cache | Yes | 51% | Medium | LiteSpeed servers | Free + ESI caching | Free |
| W3 Total Cache | Free + Paid | 32% | Complex | Developers | Most config options | $99/yr |
| WP Super Cache | Yes | 28% | Easy | Beginners | Simple setup | Free |
| NitroPack | No | 54% | Easy | Non-technical users | Highest CWV pass rate | $21/mo |
If you are on a LiteSpeed server (common with Hostinger, Namecheap, A2 Hosting), use LiteSpeed Cache. It is free, deeply integrated with the server, and has the second-highest CWV pass rate. On any other server, WP Rocket is the easiest option that works well out of the box.
Image Optimization: The Biggest Performance Problem on Most WordPress Sites
Images are responsible for more than 60 percent of the total page weight on an average WordPress site. A single unoptimized photo from a DSLR camera can be 6MB. Your visitor’s browser has to download every byte of that before it appears on screen.
The good news is that image optimization is also the easiest win. You can cut your image weight by 70 to 80 percent with no visible quality loss to your visitors. Here is how.
Convert Images to WebP Format
WebP is an image format developed by Google. It produces files 25 to 35 percent smaller than JPEG at the same visual quality, and up to 80 percent smaller than PNG for images with transparency.
WebP is now supported by every major browser including Chrome, Firefox, Safari (since 2020), and Edge. There is no reason not to use it for every image on your site.
You do not need to re-upload all your images manually. Plugins like Imagify and ShortPixel can convert your entire existing media library to WebP in one click, and automatically convert new uploads going forward.
Pre-Size Images Before Uploading
This is the step most guides miss. If your blog post column is 800 pixels wide, upload an 800-pixel-wide image. Not the original 4000-pixel-wide photo from your camera.
When you upload a 4000px image, WordPress creates several resized versions for different uses, but it also keeps the full original. That full-size file sits on your server, and WordPress sometimes loads it even when only a small version is needed.
Before uploading, resize your images in any photo editor to the maximum display width you actually use on your site. For most WordPress blog posts this is between 800 and 1200 pixels.
Lazy Loading
Lazy loading delays the loading of images that are below the fold (below what the visitor can see when the page first loads). Instead of loading all 20 images on a page at once, the browser only loads what is visible. As the visitor scrolls down, more images load.
WordPress added native lazy loading in version 5.5. It is enabled automatically with the loading=’lazy’ attribute on images. If your theme or page builder overrides this, check your caching plugin settings to make sure lazy loading is turned back on.
One important exception: do not lazy load your hero image or the first image visitors see when the page loads. If the LCP image is lazy loaded, the browser delays it and your LCP score suffers. WP Rocket and LiteSpeed Cache handle this automatically, but it is worth checking.
Here is a comparison of the main image optimization plugins:
| Plugin | Free? | WebP? | Bulk Convert? | Lazy Load? | Best For |
| Imagify | Free + Paid | Yes | Yes | Yes | Best compression quality balance |
| ShortPixel | Free + Paid | Yes | Yes | Yes | AVIF support + bulk processing |
| Smush | Free + Paid | Yes | Yes | Yes | Beginners who want simple setup |
| Optimole | Free + Paid | Yes | Yes | Yes | Cloud-based, real-time optimization |
CSS, JavaScript, and Font Optimization
After hosting, caching, and images, the next biggest impact comes from how your CSS and JavaScript files load. There are four main techniques, and the order in which you apply them matters.
Minification: Remove Unnecessary Code
Minification removes spaces, line breaks, and comments from CSS and JavaScript files. It does not change how the code works. A CSS file that is 200KB can often be reduced to 150KB through minification alone.
Every good caching plugin includes minification. Turn it on and test your site after. In most cases it works without any issues. If something breaks visually, check which CSS file caused it and exclude it from minification.
Deferring JavaScript: Stop Scripts Blocking Your Page
When a browser encounters a script tag in your HTML, it stops everything and waits for that script to download and run before continuing to build the page. This is called render blocking. It is one of the most common reasons for poor PageSpeed scores.
Deferring a script tells the browser: download this file in the background, but do not run it until the rest of the page has finished loading. For most non-critical scripts like analytics, chat widgets, and social sharing buttons, deferring is safe and causes no visual issues.
Do not defer everything. Scripts that control critical page layout or core WordPress functions should load normally. Start by deferring third-party scripts and test after each change.
Google Fonts: A Hidden Speed Problem
Google Fonts are loaded from Google’s servers, which requires an extra DNS lookup and connection. On a fast connection this adds maybe 100ms. On a mobile connection it can add 400ms or more.
The solution is to self-host your fonts, meaning you download the font files and serve them from your own server. The OMGF plugin (Optimize My Google Fonts) does this automatically for WordPress sites.
Alternatively, if you only use one or two font weights on your site, consider switching to a system font stack. System fonts are already on the visitor’s device and load in zero milliseconds.
Render-blocking fonts are a very common cause of a poor LCP score. If your PageSpeed Insights report shows a ‘Eliminate render-blocking resources’ warning pointing to a Google Fonts URL, this is your fix.
WordPress Database Optimization and Site Cleanup
Every time someone visits your site, WordPress runs multiple database queries. The more cluttered your database, the slower those queries run. A clean database improves server response time across every page.
WordPress databases tend to fill up over time with things you do not need. Post revisions are the biggest culprit. Every time you save a draft or publish a post, WordPress saves a complete copy. After a year of blogging, a single post might have 50 revisions saved. Each one is a row in your database.
Limit Post Revisions
Add this line to your wp-config.php file to limit revisions to a maximum of 5 per post:
define(‘WP_POST_REVISIONS’, 5); // Add this to wp-config.php to limit revisions
This stops the database from growing with unlimited revisions going forward. To clean up existing revisions, use the WP-Optimize plugin.
What to Clean and How Often
Here is a practical reference for keeping your database clean:
| What to Clean | Why It Slows Your Site | How Often | Tool |
| Post revisions | Fills database, slows queries | Limit to 3-5 (set in config) | WP-Optimize |
| Spam & trash comments | Unnecessary DB rows | Weekly | WP-Optimize |
| Expired transients | Old cached data cluttering DB | Monthly | Advanced DB Cleaner |
| Orphaned meta data | Left behind by deleted plugins | Monthly | WP-Optimize |
| Unused media files | Server storage waste | Quarterly | Media Cleaner plugin |
Run a full database backup before any cleanup. WP-Optimize and Advanced DB Cleaner both let you preview what will be deleted before you confirm. Always preview before deleting.
Setting Up a CDN for WordPress
A CDN, or Content Delivery Network, is a network of servers spread around the world. When you use a CDN, your static files like images, CSS, and JavaScript are copied to all of those servers. When a visitor loads your site, they get those files from the server closest to them instead of your origin server.
If your WordPress site is hosted in New York, a visitor in London downloading your 500KB hero image is pulling that file across the Atlantic. With a CDN that has a London server, that same file comes from 20 miles away instead of 3,500 miles. The difference in load time is real and measurable.
Cloudflare Free: The Best Starting Point
Cloudflare’s free plan is the most widely used CDN for WordPress sites, and for good reason. It is genuinely free with no data limits, covers over 310 global locations, and comes with DDoS protection and a free SSL certificate.
Setting it up requires changing your domain’s nameservers to Cloudflare. The process takes about 30 minutes and Cloudflare walks you through it step by step. After that, install the Cloudflare plugin for WordPress so your cache clears automatically when you publish.
One important setting: in Cloudflare’s caching settings, set your browser cache TTL to at least 4 hours. The default is very short and means visitors re-download your static files more often than necessary.
| CDN | Free Plan? | PoP Locations | WP Plugin? | Best For | Verdict |
| Cloudflare | Yes | 310+ | Yes | Most sites | Best free option worldwide |
| BunnyCDN | No | 130+ | Yes | Budget-conscious sites | Cheapest paid CDN |
| KeyCDN | No | 50+ | Yes | Developers | Pay-per-GB model |
| Cloudflare Pro | No (from $20/mo) | 310+ | Yes | Business sites | Best performance + security combo |
Note: If you are on Kinsta or WP Engine, these hosts include a built-in CDN through Cloudflare. Check your hosting dashboard before setting up a separate CDN. You do not want to double-stack CDN layers.
WordPress Speed Optimization for WooCommerce Stores
WooCommerce creates a specific speed challenge that does not exist on simple blogs or business sites. Cart status, user sessions, inventory levels, and pricing rules all change constantly. This means large parts of a WooCommerce site cannot be served from page cache, because cached pages would show wrong prices or outdated stock levels to logged-in customers.
Here is what you need to think about differently for WooCommerce:
Exclude Cart and Checkout from Page Cache
Your caching plugin needs to know never to serve cached versions of the cart page, checkout page, or My Account page. Serving a cached checkout to a customer with items in their cart will break the checkout process entirely.
WP Rocket, LiteSpeed Cache, and most other caching plugins include a list of pages to exclude from caching. By default they exclude these WooCommerce pages automatically. Verify this in your plugin settings.
Redis for WooCommerce
On WooCommerce stores, Redis makes the biggest performance difference of any optimization. WooCommerce queries the database for product data, pricing, inventory, and customer data on almost every page load. Redis stores the results of these queries in memory so they run in under a millisecond instead of 50 to 200 milliseconds each.
The performance difference on a busy store is significant. A product page that generates 80 database queries can be brought down to 15 when Redis handles the repeated queries from cache.
Related: How to Install and Configure Redis Cache for WordPress
Related: How to Fix Failed WooCommerce Subscription Payments
Use Query Monitor to Find Slow Database Queries
The Query Monitor plugin (free from WordPress.org) shows you every database query running on each page load, how long each one takes, and which plugin or theme triggered it. This is the fastest way to find the single query that is responsible for making your product pages slow.
Install it temporarily, visit your slowest page, and look for queries taking over 50ms. A single slow query from a poorly coded plugin can add 2 seconds to every page load.
WordPress Theme and Plugin Choices That Affect Speed
Your theme and the number of plugins you run have a direct impact on how much PHP processing and how many HTTP requests every page requires.
Choose a Lightweight Theme
A theme like Divi or Avada is beautiful and feature-rich. It is also loading hundreds of kilobytes of CSS and JavaScript on every single page, whether those features are being used on that page or not.
Lightweight themes like Astra, GeneratePress, and Kadence are built to load only what each page needs. A default Astra page loads in around 50KB total. A default Divi page loads in 250KB to 500KB. That difference adds up to hundreds of milliseconds of render time.
If you are already using a heavy theme and switching is not practical, use a plugin like Asset CleanUp to disable the CSS and JavaScript files that are loaded on pages where they are not needed.
Every Plugin Adds Load Time
Each active plugin adds PHP execution time and HTTP requests to every page load. This does not mean you should delete all your plugins. It means you should audit them regularly.
Every 6 months, go to your plugins list and ask about each one: is this plugin actively doing something useful on my site right now? If a plugin was installed for a one-time task and is still sitting there active, deactivate it. If you are not sure, deactivate it and see if anything breaks.
The number that matters is not total plugin count but total HTTP requests and total PHP execution time. A site with 30 well-coded plugins can be faster than a site with 10 poorly-coded ones. You can see exactly how much each plugin contributes to your load time using Query Monitor.
The Complete WordPress Speed Optimization Checklist
Use this as a reference guide. Work through the Critical items first, then High priority, then Medium. Do not try to do everything at once. Make one change, test your speed, confirm it improved things, then move to the next item.
| Task | Priority | Tool / Plugin | Done? |
| Choose fast managed hosting or upgrade your current plan | Critical | Kinsta / SiteGround / Cloudways | [ ] |
| Upgrade to PHP 8.3 in hosting control panel | Critical | Your hosting panel | [ ] |
| Install and configure a caching plugin | Critical | WP Rocket / LiteSpeed Cache | [ ] |
| Set up Redis object cache | High | Redis Object Cache plugin | [ ] |
| Enable PHP OPcache | High | Server / php.ini setting | [ ] |
| Test speed with PageSpeed Insights and GTmetrix | High | Google PSI / GTmetrix.com | [ ] |
| Convert all images to WebP format | High | Imagify / ShortPixel | [ ] |
| Enable lazy loading for images | High | Built into WP 5.5+ or plugin | [ ] |
| Set up Cloudflare CDN (free) | High | Cloudflare.com | [ ] |
| Switch to a lightweight theme (under 300kb) | Medium | Astra / GeneratePress / Kadence | [ ] |
| Minify CSS and JavaScript files | Medium | WP Rocket / Autoptimize | [ ] |
| Defer non-critical JavaScript | Medium | WP Rocket / Flying Scripts | [ ] |
| Self-host Google Fonts or remove unused fonts | Medium | OMGF plugin | [ ] |
| Clean up WordPress database | Medium | WP-Optimize | [ ] |
| Limit post revisions to 3-5 in wp-config.php | Medium | Code snippet in wp-config.php | [ ] |
| Remove unused plugins and themes | Medium | WordPress dashboard | [ ] |
| Check and fix render-blocking resources | Medium | PageSpeed Insights report | [ ] |
| Set correct image dimensions (width and height in HTML) | Low | Manually or plugin | [ ] |
| Enable GZIP or Brotli compression on server | Low | Hosting panel / .htaccess | [ ] |
| Re-test after each major change | Ongoing | GTmetrix / PageSpeed Insights | [ ] |
Bookmark this page. Come back after each round of changes and check off what you have done. Speed optimization is not a one-time task. Sites slow down over time as you add content, plugins, and traffic. A monthly review keeps you fast.
Frequently Asked Questions About WordPress Speed
Why is my WordPress site slow?
The four most common causes are slow hosting (high TTFB), no caching plugin installed, large unoptimized images, and too many plugins or a bloated theme loading unnecessary scripts. Test with Google PageSpeed Insights first to find out which problem is hitting your site hardest.
How do I speed up WordPress without plugins?
Without plugins, your best options are at the server level: upgrade to PHP 8.3 in your hosting control panel, enable OPcache through your PHP settings, set up a CDN through Cloudflare’s nameservers, and optimize images before uploading by resizing them to display dimensions and saving as WebP. These server-side improvements do not require any WordPress plugins.
How many plugins slow down WordPress?
There is no magic number. A site with 10 poorly-coded plugins can load slower than a site with 30 well-coded ones. What matters is how many HTTP requests and how much PHP execution time each plugin adds. Use Query Monitor to see each plugin’s real performance impact, not just count them.
Does my WordPress theme affect speed?
Yes, significantly. Heavy page builder themes like Divi or Avada load 200 to 500KB of CSS and JavaScript on every page, even when most of that code is not used on that specific page. A lightweight theme like Astra or GeneratePress loads as little as 30 to 50KB. If speed is a priority, your theme choice matters as much as any plugin.
How do I fix a bad Google PageSpeed score?
Start with the opportunities listed in your PageSpeed report, ordered by their estimated time savings. The report tells you exactly which files to compress, which resources to defer, and which images to resize. Work through the top three opportunities and re-test. Most sites see a significant improvement from fixing just the top two or three items.
Is WP Rocket worth paying for?
For most sites, yes. WP Rocket costs $59 per year for one site and it handles page caching, minification, lazy loading, deferring JavaScript, and preloading in one well-built plugin. The alternative is using three or four separate free plugins to cover the same ground, each adding its own overhead. For sites generating any revenue, the time saved managing fewer plugins is worth the cost.
How do I speed up WordPress on shared hosting?
On shared hosting your options are more limited but still meaningful. Install a caching plugin (LiteSpeed Cache if your host uses LiteSpeed servers, WP Rocket or W3 Total Cache otherwise), optimize all your images to WebP, enable Cloudflare’s free CDN, and upgrade to PHP 8.3 if your host supports it. If after all that your TTFB is still above 600ms, the limiting factor is the shared server and upgrading your hosting plan is the only fix.
How long does it take to see results after optimizing WordPress speed?
Speed test tools show you results immediately after each change. For Google Search Console to reflect improved Core Web Vitals scores based on real user data, it usually takes 28 days because Google collects data over a rolling 28-day window. Ranking improvements from better Core Web Vitals can take 1 to 3 months to fully show in search results.
Summary: Where to Start
If your site is slow and you do not know where to begin, here is the order to work through things:
- Test your current speed in Google PageSpeed Insights and note your LCP, INP, and CLS scores.
- Check your TTFB. If it is above 500ms, hosting is your first priority. Upgrade to managed hosting
- or a VPS.
- Install a caching plugin and configure it. WP Rocket for most servers, LiteSpeed Cache if you are on a LiteSpeed host.
- Set up Redis object caching, especially if you run WooCommerce.
- Optimize your images: convert to WebP, resize before uploading, and enable lazy loading.
- Set up Cloudflare free CDN by changing your nameservers.
- Deal with fonts, JavaScript deferring, and database cleanup once the bigger issues are handled.
Each step in this list has a bigger impact than the one after it. Fix them in this order and you will see the best results with the least amount of time spent.
Speed optimization works best as a regular habit, not a one-time sprint. Once a month, run a PageSpeed test and check if your scores have dropped. Catching slowdowns early takes 30 minutes. Digging yourself out of a slow site after months of neglect takes days.
External resources for further reading:
Google Core Web Vitals Documentation
Chrome User Experience Report (CrUX)
Related posts on Hammani Tech:
How to Install and Configure Redis Cache for WordPress
How to Enable PHP OPcache on Your WordPress Server
Persistent Object Cache in WordPress: Complete Setup Guide
Best WordPress Hosting in 2026: 7 Hosts Tested and Compared
How to Fix Failed WooCommerce Subscription Payments
API in Web Development: How It Powers Modern WordPress Sites




