You searched “how to speed up WordPress site” and got ten different guides telling you ten different things. One says that you need to switch hosts. Another recommends installing a caching plugin. A third opens with image compression.
None of them are wrong, exactly. But none of them are right for your site, because they all skip the most important step. They jump straight to fixes before figuring out what’s actually broken.
A WordPress site can load slowly for several common reasons:
- Slow hosting and high server response times.
- Unoptimized images that eat up page weight.
- Render-blocking CSS and JavaScript.
- Plugin bloat from poorly coded extensions.
- Database overhead from years of accumulated clutter.
Each problem has a different fix, and the highest-impact fix varies from site to site. This guide takes a different approach: diagnose your specific bottleneck first, then fix in priority order based on what the data tells you.
Note: Plugin and platform recommendations in this article are quality-based and independent of any Codeable affiliations.
Run a speed test and read the right numbers
Before you change a single setting, you need to know what’s actually slow on your site. The tool to start with is Google PageSpeed Insights. Unlike most speed-testing tools, PSI pulls real visitor data from the Chrome User Experience Report (CrUX) and shows you actual page loads from real people on real devices, not in simulated lab conditions.
One important thing: ignore the overall score. A number like 62 or 78 tells you very little on its own. The individual metrics underneath are what matter.
Here are the thresholds to check your results against:
- Time to First Byte (TTFB). TTFB measures how quickly the server responds to a request. Under 200ms is the target. Anything above 600ms is rated poor per web.dev.
- Largest Contentful Paint (LCP). LCP measures how fast the main visible content loads. The target is under 2.5 seconds for at least 75% of visitors, according to Google Search Central.
- Cumulative Layout Shift (CLS). CLS measures unexpected layout movement as the page loads. 0.1 or lower is the optimum value, per Google Search Central.
Once you have these numbers, match them against the table below to identify your most likely bottleneck.
| Symptom | Likely cause |
| TTFB above 500–600ms | Server or hosting problem. |
| Slow LCP with acceptable TTFB | Unoptimized hero image or render-blocking CSS/JS. |
| Fast desktop score, slow mobile | JavaScript overhead or image weight on slower mobile CPUs. |
| Performance degrades during traffic spikes | Insufficient server resources. |
This symptom-to-cause mapping gives you a starting point, but unfortunately, it’s the step most WordPress speed guides skip entirely.
You might also notice that GTmetrix gives you a different score than PageSpeed Insights for the same page. That’s normal. According to DebugBear, the two tools use different throttling methods and data sources. Neither is wrong, but PSI is the better starting point because its field data reflects how real visitors experience your site.
For deeper diagnosis at the plugin level, install Query Monitor. It shows every database query, HTTP request, and loaded script on each page. We’ll walk through how to use it in the plugin auditing section below.
Fix your hosting if nothing else is working
Your hosting sets a hard ceiling on how fast your WordPress site can ever load. No plugin can break through it.
On shared hosting, your site shares server resources, including PHP workers, with dozens or even hundreds of other sites. That means you can have perfect caching, compressed images, and clean code, and the server can still take 900ms to respond.
Case in point: this WordPress user tried everything to reduce site load time. They installed and configured a caching plugin, optimized and reduced the size of images on the website, and removed unnecessary plugins, yet the median server response time was 918ms.
In fact, Codeable’s backend performance guide has a diagnostic rule: Google considers TTFB under 200ms good and anything above 600ms poor. If your TTFB stays above 600ms after enabling a caching plugin, your hosting is very likely the bottleneck, and no amount of front-end optimization will fix that.
When hosting is the problem, here are your options in order of increasing commitment:
- Enable server-level caching. Some hosts offer built-in caching you may not have activated yet. Check your hosting control panel first.
- Add Cloudflare APO. This caches your entire WordPress site at the network edge. Cloudflare reports a 72% improvement in TTFB with APO enabled.
- Upgrade your hosting plan. Moving from a basic shared plan to a higher tier with more dedicated resources can make a noticeable difference.
- Migrate to managed WordPress hosting. Providers like Kinsta and WP Engine run environments specifically optimized for WordPress. Most offer free migration that takes 1–2 hours.
While you’re looking at infrastructure, check your PHP version. PHP 8.5 delivers a 12–14% speed improvement on real WordPress sites, according to 365i. It’s a two-minute change in your hosting control panel. Test on a staging site first, though, because the only risk is plugin or theme incompatibility. WordPress 6.9 or higher is required.
Compress and serve images the right way
Images account for roughly 60% of total page weight on most WordPress sites. Once hosting is sorted, this is the highest-impact front-end fix you can make.
There are three parts to getting images right.
1. Convert to modern formats
WebP creates files 25–35% smaller than equivalent JPEGs at the same visual quality. AVIF compresses even further, but browser support is still narrower, so treat it as a progressive enhancement rather than a default. Plugins like ShortPixel or Imagify handle both conversion and compression automatically on upload, so you don’t need to process files manually.
2. Serve the right size to each device
A visitor on a phone shouldn’t be downloading a 2400px-wide desktop image. WordPress handles this through srcset, which tells the browser to pick the appropriately sized version for the screen. Most modern themes generate srcset automatically. If your images look fine but load slowly on mobile, check whether your active theme has disabled this feature.
3. Fix the LCP lazy-loading mistake
Lazy loading delays images from loading until the visitor scrolls near them, which is good for images further down the page. But if you lazy-load your hero image (the large image at the top of the page), you’re telling the browser to deprioritize the single most important visual element. That directly tanks your LCP score.
The fix? Always exclude above-the-fold images from lazy loading.
Set loading="eager" and fetchpriority="high" on your hero image, and loading="lazy" on everything below the fold.
Cut render-blocking code and find slow plugins
Every CSS stylesheet and JavaScript file in your page’s code forces the browser to pause rendering until that file is fully downloaded and processed. These are called render-blocking resources, and they’re one of the most common reasons a WordPress site feels slow even when the server responds quickly.
The techniques address this include:
- Minification. Strips whitespace, comments, and unnecessary characters from CSS and JavaScript files, reducing their size without changing what they do.
- Deferral. Adds
deferorasyncattributes to script tags so the browser can keep rendering the page while JavaScript downloads in the background. - Critical CSS. Inlines the small amount of CSS needed for above-the-fold content directly into the HTML, so the page starts displaying immediately instead of waiting for the full stylesheet.
🚨However, remember that deferring scripts that other scripts depend on can break forms, menus, sliders, and checkout flows. Always test these changes on a staging site before pushing them live.
Finding the real plugin problem
You’ve probably heard that fewer plugins means a faster site. That’s only partially true. A single poorly coded plugin running uncached database queries on every page load is worse than ten well-coded utility plugins combined. That is why front-end impact, and not plugin count, should be your driving metric.
Query Monitor helps you see exactly what each plugin is doing. It displays every database query, HTTP request, and script loaded on each page. Any query taking longer than 50ms is an investigation target. Pay special attention to plugins injecting scripts site-wide on pages that don’t need them.
When Query Monitor points to plugin-related slowdowns but doesn’t isolate the exact culprit, use the binary isolation method on your staging site: deactivate all plugins, test speed, confirm the improvement, then reactivate half and test again. Keep halving until you identify the problem. On a 20-plugin site, this narrows it down to 4–5 cycles. For the full deactivation walkthrough, see Codeable’s plugin conflict guide.
One more thing worth checking is whether the WordPress Heartbeat API pings the server every 15–60 seconds for autosave and post locking. Extending or disabling this interval on non-essential pages reduces unnecessary server load.
Set up caching without breaking your site
Caching is one of the biggest speed wins available to any WordPress site. But it works in distinct layers, and understanding which layer does what keeps you from misconfiguring things.
- Page caching. Saves a complete HTML copy of each page. When an anonymous visitor requests that page, the server delivers the saved copy instead of rebuilding it from PHP and MySQL every time.
- Object caching. Stores individual database query results in memory using tools like Redis or Memcached. This speeds up dynamic content and logged-in user experiences that page caching doesn’t help with.
- Browser caching. Instructs visitors’ browsers to store static assets, like images, CSS, and JavaScript, locally so they don’t need to be re-downloaded on repeat visits.
A common misconception worth clearing up: installing a “Redis object cache” plugin does not install Redis on your server. The plugin only connects to Redis if your host already has it running. If your host doesn’t offer Redis, the plugin does nothing. Check with your hosting provider first.
Here are some of our plugin recommendations by hosting environment:
- LiteSpeed Cache on LiteSpeed servers (free, with server-level integration)
- FlyingPress on Nginx/Apache servers.
- WP Rocket as a beginner-friendly option.
WooCommerce caching warning
If you run a WooCommerce store, this part is critical. Cart, checkout, and “my account” pages must be excluded from full-page caching. These pages are unique to each customer. Caching them risks serving one shopper’s personal data, including payment and address details, to another visitor. This is a security and functional problem, not just a speed concern.
For stores where caching misconfiguration carries real revenue and security consequences, Codeable’s WooCommerce Technical Performance Audit covers caching strategy alongside Core Web Vitals, server performance, and plugin impact.
Clean up your database, theme, and delivery
With the major fixes in place, these three areas round out your optimization pass.
Database cleanup
WordPress databases accumulate clutter over time, such as post revisions, expired transients, orphaned plugin data, and spam comments. These all pile up. A free plugin like WP-Optimize can handle most of this cleanup with a few clicks.
Note that if autoloaded data in the wp_options table exceeds ~800KB, you’re loading plugin residue on every single page request. That’s a hidden drag on performance that won’t show up in a standard speed test. To keep revisions from ballooning again, add define('WP_POST_REVISIONS', 10); to your wp-config.php file. For the full cleanup procedure, see Codeable’s database optimization guide.
Theme and page builder impact
Your theme choice has a measurable effect on speed. For example, Elementor adds roughly 0.34 seconds of server processing time per page, which is comparable to WooCommerce itself, as suggested by StudioWombat’s research on page builder benchmarks. If you’re already running a page builder and rebuilding isn’t realistic, use your caching plugin’s unused CSS removal feature and defer page-builder scripts where possible. For new builds, block themes are the lowest-overhead option available.
Content delivery network (CDN)
A CDN serves static assets from edge servers geographically closer to each visitor, reducing load times regardless of where your main server sits. Cloudflare’s free tier covers the needs of most WordPress sites. For even faster results, Cloudflare APO caches full WordPress pages, as we’ve mentioned before.
What to do when DIY optimization hits a wall
Some performance problems sit beyond what plugins and settings changes can reach. Custom code conflicts, server-level misconfiguration, WooCommerce stores with complex caching requirements, or years of accumulated technical debt – these need a specialist.
Codeable offers three paths depending on where you are:
- Want expert direction first. Start with a focused one-hour consultation at $69 with a Codeable WooCommerce expert to understand your challenges and define next steps.
- Need a professional diagnosis. Opt for WordPress site audit packages starting from $599 to get a prioritized action plan for your specific site.
- Want to stay fast long-term. Choose from maintenance packages (from $140/month) that include a dedicated expert handling updates, regression testing, and ongoing optimization.
Codeable accepts just 2.2% of developer applicants and backs every project with a 28-day bug-fix warranty. To give you a sense of what that looks like in practice, a Dutch WooCommerce store approached Codeable with high maintenance costs and an unwieldy core infrastructure. After working with a Codeable expert, their organic site traffic went up 1.5%, and conversions increased 2x in just one year.
The bottom line is: If you’ve worked through this guide and still aren’t seeing the results you need, that’s a signal that the problem runs deeper than surface-level fixes. We’re here to help. Explore our maintenance packages or schedule a consultation call with our WordPress experts today to get in-depth, custom support that speeds up your website.
Dream It