I found out my site was painfully slow completely by accident.
I was showing a friend one of my blog posts on his phone, standing in his kitchen, and just… waiting. And waiting. He finally said, “is it always this slow?” I laughed it off, but that night I ran it through GTmetrix out of curiosity.
Eleven seconds. On mobile. For a blog post that was mostly text and a few images.
I’d been so focused on writing content that I never actually checked how the site performed for a real visitor on a real phone with average internet. Turns out I’d built a beautiful, slow mess.
This is everything I did over about three weekends to fix it, including the parts I got wrong the first time.
First, How I Actually Measured the Problem
Before touching anything, I ran the site through two tools, since they each show slightly different things:
- Google PageSpeed Insights — gives you a score plus Core Web Vitals (the specific metrics Google cares about for ranking and user experience)
- GTmetrix — gives a more detailed waterfall breakdown of exactly what’s loading slowly
The Core Web Vitals that mattered most for me were:
- LCP (Largest Contentful Paint) — how long until the biggest visible element loads. Mine was awful, over 6 seconds.
- CLS (Cumulative Layout Shift) — whether stuff jumps around as the page loads. Mine had a font loading late, causing text to shift.
- INP (Interaction to Next Paint) — how responsive the page feels when you actually tap or click something.
Seeing the actual breakdown, instead of just a vague “your site is slow” feeling, made it obvious where to start.
Mistake #1: I Was Running Three Caching Plugins at Once
This one’s embarrassing, but I think it’s more common than people admit.
Over time, I’d installed WP Super Cache, then later tried W3 Total Cache without fully removing the first one, then added a “speed booster” plugin some tutorial recommended. All three were technically active.
They were fighting each other, generating conflicting cache files, and honestly probably making things worse than having no caching at all.
The Fix
I deactivated and completely deleted all three, then installed just one: WP Rocket (a paid option, but genuinely worth it for how much it simplifies things). If you want a free alternative, LiteSpeed Cache works well if your host supports LiteSpeed servers, or WP-Optimize for a lighter free option.
Pick one caching plugin. Just one. That alone cleared up a chunk of the mess.
Mistake #2: My Images Were Absolutely Massive
I checked my media library and found photos straight from my phone, some over 4MB each, uploaded without any compression, at full resolution, for images displayed at a fraction of that size on the page.
That’s like mailing someone a poster when they only needed a postcard.
How I Fixed the Image Problem
- Installed ShortPixel (Imagify and Smush are solid alternatives too)
- Bulk-compressed every existing image in the media library
- Enabled automatic WebP conversion, which is a more efficient image format most browsers support now
- Turned on lazy loading, so images below the fold don’t load until someone actually scrolls near them
My total page size on that same blog post dropped by more than half just from this one step.
Mistake #3: I Picked a Beautiful, Bloated Theme
My original theme was one of those “do everything” multipurpose themes with built-in sliders, animations, and about 40 customization panels I never touched.
Looked nice in the demo. Loaded a ton of unnecessary CSS and JavaScript on every single page, whether I used those features or not.
I switched to GeneratePress (Astra is a similarly lightweight, popular option). Same content, dramatically less code bloat behind the scenes.
This felt like the scariest step, honestly, since I worried about breaking my whole layout. It took an afternoon to rebuild things with the block editor and a page builder plugin, but it was worth doing once properly instead of patching a slow theme forever.
Mistake #4: I Turned On Every Minify Option at Once and Broke My Site
Once WP Rocket was installed, I got a little overexcited and enabled every single optimization checkbox at once — minify CSS, minify JS, combine files, delay JavaScript execution, all of it, all at the same time.
My homepage slider stopped working. A contact form on another page silently broke.
What I Should Have Done From the Start
- Enable one optimization setting at a time
- Reload the site and click through key pages (forms, sliders, any interactive element)
- Only move to the next setting once I confirmed nothing broke
- Keep a note of what I changed, so if something did break, I knew exactly what to undo
Minifying and combining files can meaningfully speed things up, but doing it all blindly, all at once, is how you end up debugging a broken contact form at midnight, which is a mistake I’d genuinely like to spare someone else from repeating.
Mistake #5: I Never Questioned My Hosting
I was on a cheap shared hosting plan, the kind advertised at $2.99 a month, sharing server resources with who knows how many other sites.
No caching plugin fully fixes bad hosting. It’s like putting a spoiler on a car with a weak engine.
I moved to a host that specializes in WordPress specifically (I went with SiteGround; Kinsta and WP Engine are solid, if pricier, alternatives). The migration took an evening using a plugin (Migrate Guru handled mine smoothly), and the baseline server response time improved immediately, before I’d even touched another setting.
If you’re on ultra-budget shared hosting and you’ve already tried everything else, this is genuinely worth considering before blaming plugins for everything.
Setting Up a CDN (This Part Is Easier Than It Sounds)
CDN stands for Content Delivery Network. In plain terms: instead of every visitor’s request traveling all the way to your one server, copies of your site’s files get stored on servers around the world, so visitors load from whichever one is physically closest to them.
I set up Cloudflare (the free plan is genuinely enough for most small to medium blogs):
- Created a free Cloudflare account
- Added my domain
- Updated my domain’s nameservers to point to Cloudflare (my registrar had a simple field for this)
- Waited a few hours for it to activate
- Enabled the basic caching and “Auto Minify” settings inside Cloudflare’s dashboard
Visitors from other countries in particular noticed a real difference, based on comments I got afterward from a few international readers.
Cleaning Up the Database
WordPress quietly accumulates junk over time: post revisions, spam comments sitting in the trash, expired transients, old plugin data left behind from tools you uninstalled ages ago.
I used the free WP-Optimize plugin to:
- Clean up excess post revisions (I kept the last 5 per post instead of unlimited)
- Empty spam and trashed comments
- Remove expired transients
- Optimize database tables
My database size dropped noticeably, and while this step alone didn’t create a dramatic speed jump, it’s basic housekeeping that adds up alongside everything else.
Auditing My Plugins
I had 34 active plugins. Thirty-four. I genuinely couldn’t tell you what half of them did anymore.
I went through one by one:
- Deactivated anything I hadn’t used or needed in the last six months
- Looked for plugins that did overlapping jobs (I had two separate SEO plugins running simultaneously, for no good reason)
- Checked each remaining plugin’s last update date — anything untouched for years by its developer is a security and compatibility risk, not just a speed one
Trimmed it down to 14 plugins that were actually doing something for the site.
Dealing With Embedded YouTube Videos
I had a few posts with embedded YouTube videos, and each one was loading a chunk of YouTube’s own scripts immediately, even before anyone pressed play.
I switched to lazy-loading video embeds, which WP Rocket handles automatically, showing a static thumbnail until someone actually clicks to play. Small detail, but it noticeably helped pages that had multiple videos on them.
What the Results Actually Looked Like
After all of this, that same blog post that originally took 11 seconds on mobile loaded in a little under 2.5 seconds.
A few honest notes on this:
- It wasn’t one single fix. It was the combination of hosting, images, caching, and theme choice together.
- Some changes (hosting, theme) made a bigger difference than others (database cleanup alone barely moved the needle by itself).
- I didn’t see instant ranking jumps overnight, but bounce rate on mobile visitors did noticeably improve within a few weeks, based on my Google Analytics data.
A Simple Order to Tackle This In
If I were starting fresh on a slow WordPress site today, here’s the order I’d actually follow:
- Run PageSpeed Insights and GTmetrix first, so you know what’s actually wrong instead of guessing
- Check your hosting — if it’s ultra-budget shared hosting, consider this before anything else
- Switch to a lightweight theme if you’re on a heavy multipurpose one
- Compress existing images and enable lazy loading
- Install one caching plugin, never more than one
- Turn on minification and file combining gradually, testing after each change
- Set up a free CDN like Cloudflare
- Clean up your database
- Audit and deactivate unused plugins
- Re-test with the same tools you started with, so you can actually see the difference
Where Things Stand Now
I still check GTmetrix every couple of months, mostly out of habit at this point. Every so often a new plugin update or theme change nudges things slightly, and it’s easier to catch a slowdown early than to end up back at eleven seconds without noticing.
My friend, the one standing in his kitchen waiting for that page to load, tried the site again a few weeks after I’d finished all this. His response was just, “oh, that’s actually fast now.” Not exactly a glowing review, but honestly, for a WordPress site, that’s exactly the reaction you’re hoping for.

