Blog
11 May 202610 min read

My WordPress Website Is Slow: How to Fix It Step by Step (and When It Can't Be Fixed)

My WordPress Website Is Slow: How to Fix It Step by Step (and When It Can't Be Fixed)

If your WordPress site takes more than 3 seconds to load, you're losing half your visitors before they read a single line. This isn't an exaggeration: 53% of mobile users abandon a page that takes longer than 3 seconds. And Google has penalised slow loading speeds directly in rankings since 2021.

The problem is that most articles on slow WordPress sites give you a list of 20 things to tweak without telling you where to start. This one won't do that. First we diagnose, then we act, in order of impact.

Before touching anything: diagnose where the problem is

Not all slow WordPress sites are fixed the same way. There are two types of slowness and the solutions are different.

Use Google PageSpeed Insights

Go to pagespeed.web.dev, enter your URL and look at the mobile results. The number itself isn't what matters — what matters is understanding what it's telling you. The two key diagnostics are TTFB (Time to First Byte) and total page weight.

High TTFB vs heavy page: these are different problems

If your TTFB is above 800ms, the problem is the server: slow hosting, outdated PHP, or a saturated database. If the TTFB is fine but the page takes a long time to display, the problem is the content: uncompressed images, too many scripts, blocking plugins.

This diagnosis saves you hours. If you have a high TTFB, installing a caching plugin won't solve anything. If your page weighs 8MB, changing hosting won't either.

The 6 most common culprits, in order of impact

1. Slow or overloaded hosting

This is the number one cause that nobody wants to hear. A shared hosting plan at a few euros a month cannot serve a site running Elementor, WooCommerce, and 15 plugins simultaneously. The server responds slowly because hundreds of websites are competing for the same resources. Result: TTFB of 1.5 to 3 seconds before the browser has received a single byte of your page.

2. Unoptimised Elementor

Elementor is the most popular visual builder for WordPress, but by default it loads resources you don't need: full icon families, duplicated Google Fonts, CSS from widgets you never use. An unoptimised Elementor page can generate 150 or more HTTP requests on each load.

3. Plugins blocking each other

It's not the number of plugins that kills performance — it's which ones you have. A badly coded plugin that runs 20 database queries on every visit can be more damaging than 10 well-built ones. Another common problem: multiple plugins loading their own versions of jQuery or animation libraries.

4. Uncompressed images

A 4MB image in your homepage banner can weigh more than everything else on the page combined. Most slow websites are slow primarily because of images: photos taken straight from a phone or downloaded from stock sites, never resized or compressed. An image displayed at 800px should never be uploaded at 4000px.

5. Outdated PHP

If your server is running PHP 7.4 or lower, your site could be running 30 to 40% slower than it could with PHP 8.2 or 8.3. PHP 8.x has enormous performance improvements over older versions, and the update usually takes less than 5 minutes from your hosting control panel.

6. Bloated database

WordPress saves a revision every time you save a post. If you've had an active site for years, you could have thousands of revisions, expired transients and cached entries that slow down every database query.

The solutions, step by step

Cache: the mandatory first step

A caching plugin dramatically reduces server load by serving pages as static HTML instead of generating them from scratch on every visit. WP Rocket is the most effective paid option (around 50 euros a year). If you want something free, LiteSpeed Cache works very well if your hosting uses LiteSpeed. Otherwise, W3 Total Cache properly configured will do the job.

Images: ShortPixel or WebP conversion

ShortPixel has a free plan for 100 images a month and automatically compresses everything you upload. If you have Cloudflare on your domain (also free), enable automatic WebP conversion from the Cloudflare panel. These two actions together can reduce your page weight by 40 to 60%.

Elementor: the 3 settings that have the most impact

In your WordPress dashboard, go to Elementor > Settings > Performance. Enable these three options:

  • Disable Google Fonts loading from Elementor (if you load them another way or use system fonts)
  • Disable FontAwesome icon loading on pages that don't use them
  • Enable the improved editor loading mode (reduces DOM on complex pages)

With just these three adjustments, Elementor pages can improve by 0.5 to 1.5 seconds in total load time.

PHP: update in 5 minutes

In your hosting control panel, look for the PHP version option for your domain. Switch to PHP 8.3 if your theme and plugins are compatible. If you're unsure, test on staging first. If something breaks, rolling back is just as quick.

Database: free WP-Optimize

WP-Optimize cleans up revisions, transients and database cache with a single click. Do it once a month. Set the revision limit to 3 or 5 so they don't accumulate again (this can be done in wp-config.php with one line of code).

Real results: what you can expect

These are not marketing percentages. They are real cases from projects we have worked on.

Texas Cold Storage, a construction services site in Texas, went from a WordPress site with Elementor loading in 4.2 seconds to a Next.js site scoring 95 on mobile and 98 on desktop in Google PageSpeed Insights. Load time: under 1 second.

Impulse Fitness, a client in Barcelona with WordPress, had 47 technical issues identified in an audit: PHP 7.4, unoptimised Elementor, 23 active plugins (6 deactivated but not deleted), and homepage images up to 6MB. With basic adjustments, 2 to 3 seconds of load time can be recovered.

Practical rule: if you apply caching, compress images and update PHP, most WordPress sites go from 4-5 seconds to 2-3 seconds. That's enough to get out of the danger zone.

When WordPress simply can't be fixed

This is what nobody writes because nobody wants to tell you the problem has no easy solution. But it's real.

There are sites where the problem isn't the configuration — it's the architecture. These are the symptoms:

  • You have more than 40 active plugins and every one you deactivate breaks something
  • Your theme is Divi, Avada or Elementor with 200 elements per page and thousands of lines of inline CSS
  • Traffic is growing and the server can't handle the peaks: the site goes down or crawls during busy periods
  • Every WordPress or plugin update breaks the design or a key feature
  • You've changed hosting twice in the last year and the problem persists

In these cases, optimising is just patching. The site loads a second slower than it could because WordPress generates every page dynamically — querying the database, executing PHP, and assembling HTML in real time for every single visit.

What changes with Next.js

Next.js generates pages once at deploy time and serves them as static files from a global CDN. No database on every visit, no PHP running, no plugins competing for resources. The result is a site that responds in milliseconds from anywhere in the world.

A typical WordPress page with Elementor weighs between 2 and 5MB and generates between 80 and 150 HTTP requests. The same page in well-built Next.js can weigh 80 to 200KB and generate 10 to 20 requests. The difference isn't in the configuration — it's structural.

It's not for everyone

If you have a 5-page blog with a contact form, optimised WordPress is enough. If your website is the main lead generation engine for your business, has growing traffic and slow speed is costing you customers and rankings, then migrating to Next.js is not an expense — it's an investment with measurable ROI.

Not sure whether your site can be fixed or needs a migration? At Webandup we analyse your website for free. Within 24 hours we'll tell you exactly what's failing and the shortest path to fix it.

© Eduardo Herrera — Webandup