How to speed up WordPress (optimizations used on all our sites)

WordPress is a very powerful and popular Content Management System (CMS). It currently powers over 38% of all the sites on the internet. That means every one in three sites that you visit is most likely running WordPress. Sites like EA, CBN, ESPN, and even The White House, all use WordPress to power their sites.

I personally think WordPress is the best solution for business owners and even enterprise sites when it comes to simplifying the online marketing of their website.

A slow website

Even though WordPress is super popular, using it can also come with a price. And that price is performance. WordPress was initially created as a blogging platform. But it has evolved into much more than that. With that evolution comes the need for more functionality. And with so many different configurations out there, WordPress can run quite slow if not set up correctly. 🐌

A slow website will always be very detrimental to a visitor’s experience. It can play a significant factor in your bounce and conversion rates. The days of dial-up are long gone, and people don’t have the patience they used to. If they’re stuck on a page waiting for 5 seconds, they’re most likely going to hit the back button and pick the next search engine result to find what they’re looking for.

In my experience, a recommended website load time is 1.5 seconds or less. If your website takes longer than this, then you’ve probably got some optimization that can be done. In fact, Google has stated that mobile page speed is a ranking factor. This means it can have an impact on your site’s SEO.

The first thing you should do right now is testing your WordPress site’s speed. This will give you a benchmark for starting out. I recommend the free Pingdom speed test tool. Due to caching and CDNs, make sure to run the test at least three times to get a proper result.

Pingdom website speed test
Pingdom website speed test

Speed up WordPress

In this post, I want to cover, step by step, exactly how I configure all my WordPress sites and how you can easily achieve speeds of under one second load times.

First, a little bit about me: I have spent over 11 years using WordPress. I previously worked for Kinsta; a high-performance managed WordPress hosting company. And before that, I worked for KeyCDN, a global content delivery network. So performance is in my blood.

I have spent thousands of hours optimizing WordPress sites to ensure that they are running at optimal performance. As an internet marketer, WordPress has helped me achieve amazing things, and it can also help you! Just follow the steps below to speed up WordPress instantly.

I promise you, no matter what your background or level of expertise, you will find something in my post that is useful.

  1. Invest in fast WordPress hosting
  2. Content Delivery Network (CDN)
  3. Utilize the Perfmatters plugin
  4. Optimize WordPress database and disk space
  5. Lightweight WordPress theme
  6. Get rid of plugins
  7. Image compression
  8. Clean up custom CSS
  9. Change web fonts
  10. Only use the icons you need
  11. WordPress caching
  12. Tweak Google Analytics
  13. Speed test results
  14. Stop obsessing over PageSpeed scores
  15. Get a web performance audit
  16. Additional optimization tips and resources

1. Invest in fast WordPress hosting

One of the easiest and most important ways to speed up WordPress is to start with a solid foundation. And that means picking a reliable and fast WordPress host. 👍 Unfortunately, this first step is where a lot of people mess up. Many underestimate just how much of an impact a hosting provider has on your performance.

If you’re on a small website, you’re most likely on a cheap shared web hosting plan. The name of the plan itself really defines what it is. The term “shared” means that your website is hosted on a server along with a lot of other people’s websites. This means they are all fighting over the same resources.

I’m sure you see guys all the time advertising BlueHost hosting. Unfortunately, a lot of those sites are run by affiliate marketers simply trying to make a quick buck. And most of the time, the affiliate marketer doesn’t actually use them, they simply refer people to them.

Picking a host like BlueHost is one of the worst decisions you could ever make when it comes to hosting your website. Did you know that BlueHost is owned by EIG? EIG is a corporation that has been buying up all the crappy hosts. Here is a full list of hosts owned by EIG. You can pretty much expect the same horrible service from all of them.

While it is true that I am an affiliate marketer, my passion for web performance has always trumped that. That is why I will only be referring you to web hosting providers that I currently use for my websites. Having a superior web hosting provider means that you don’t have to worry about downtime or speed. Below are two WordPress hosting providers that I stand behind 100%.

Option 1 – SiteGround

If you are looking for more affordable WordPress hosting, I highly recommend SiteGround. They offer shared hosting with HTTP/2, PHP 7, SSD and tons of other features starting at only $3.95 a month! This is about as good as it gets for shared hosting folks. Make sure to check out our in-depth SiteGround review.

siteground shared wordpress hosting

SiteGround is great if you need a cheap host that still has some of the latest features that the bigger guys do. Once you start getting a lot of traffic though I recommend investing in a bigger host like Kinsta.

Visit SiteGround

Option 2 – Kinsta

If you are looking for high performance managed WordPress hosting, I have nothing but praise for Kinsta. Kinsta’s vast feature set is really what sets them apart from the other managed WordPress hosting companies out there. 

Kinsta is the kind of host you want if you go on Shark Tank. Some of Kinsta’s current clients include, Ubisoft, TripAdvisor, and Intuit! Make sure to check out our in-depth Kinsta review.

Some of Kinsta’s features include Nginx, Ubuntu, PHP 7.4, HTTP/2, CDN, Free SSL, MariaDB, 23+ data center locations, free premium DNS via Amazon Route 53, and uptime monitoring via New Relic. They use software containers which means no resources are shared between sites.

Kinsta also has the best support in the business! Their expert WordPress team is there to help 24/7. All of my sites are hosted with Kinsta.

Visit Kinsta

2. Content Delivery Network (CDN)

No matter how fast your web hosting provider is, you can never beat the latency issue. When you host your website, it is always stored on a single server somewhere in a data center. For visitors across the country, things are much slower because it has to download everything across the globe.

A CDN fixes that by storing copies of your assets, like images, CSS, and JavasScript on servers, also known as POPs, around the globe. It also caches them. This way, when a visitor from across the globe is looking up your website, the content is delivered from the cache of the local POP instead of your web server. Make sure to check out my article on a CDN for dummies if you want to learn more about how CDNs work.

I’ve seen a CDN increase speeds of a WordPress site up to 68%! Here’s the proof.

I use KeyCDN, of course, for all of my websites. At $0.04/GB (lowest price globally) with more POPs than StackPath (currently 33), there really is no comparison, and it’s a no-brainer. KeyCDN also offers origin shield and secure token free of charge, which most other providers charge hundreds of dollars for. 

KeyCDN also has a free Let’s Encrypt integration so you can deploy SSL for free. And they fully support HTTP/2, WebP caching, and the latest protocols so that your content is delivered as fast as possible. Make sure to also check out my full review of KeyCDN.


If you aren’t using a CDN yet, then you are hurting yourself. A blog with a decent amount of traffic usually is in the 20-25 GB bandwidth range, and to implement a CDN, it costs less than $5 per month. And suddenly, your site is supercharged from multiple POPs all over the world. I use our Perfmatters plugin to deploy the CDN.

Kinsta is actually partnered up with KeyCDN. So if you use Kinsta as a WordPress host, KeyCDN is included for free! 👏

Can’t afford KeyCDN? Then my next best recommendation would be the free version of Cloudflare.

3. Utilize the Perfmatters plugin

Perfmatters is a lightweight WordPress performance plugin developed by myself and my brother, which basically includes all the optimizations we use on our sites to gain the extra edge over the competition. Get all the secret sauce from our sites with a few clicks.

Perfmatters web performance WordPress plugin
Perfmatters web performance WordPress plugin

Some of its features include:

  • Disable emojis
  • Disable self-pingbacks
  • Disable XML-RPC
  • Hosting analytics locally
  • Lazy load images
  • Database optimization
  • Disable and or limit WordPress revisions
  • Remove query strings from static resources
  • Disable embeds
  • Disable WooCommerce cart fragments (AJAX)
  • Change frequency and or disable Heartbeat API
  • Change autosave interval
  • DNS prefetch
  • Preconnect
  • CDN rewrite (one-click way to deploy a CDN like KeyCDN)
  • Support straight from the developers of the plugin

With the Script Manager feature, you can disable scripts on your WordPress site on a per-page/post and even sitewide basis. This is very powerful and can drastically increase the speed on your WordPress sites (especially your homepage).

A few examples of what this can be used for:

  • The popular Contact Form 7 plugin loads itself on every page and post. You can easily disable it everywhere with one click and enable only on your contact page.
  • Social media sharing plugins should only be loaded on your posts. You can easily disable it everywhere and load only on post types, or even custom post types.

Even Google says, “A plugin should only enqueue a script if it is actually used on the page.” (source:

Perfmatters Script Manager
Perfmatters Script Manager

The Script Manager even supports Regex. This allows you to disable scripts on dynamically generated archive pages, search results, etc. Basically, any script combination you can think of can be disabled or enabled.

Get Perfmatters

4. Optimize WordPress database and disk space

The next thing to do is to ensure that your WordPress database is optimized.

You should treat WordPress just like a car, that means oil checkups, tuning, etc. 🚗Click to Tweet

Before proceeding, it’s always good practice to take a backup of your WordPress site. If you’re using a host like Kinsta, you can take a one-click snapshot, and you’re good to go. Otherwise, you can use a free WordPress backup plugin.

WordPress backup snapshot at Kinsta
WordPress backup snapshot at Kinsta

Database tables

If you’ve never done any database optimization before, the first thing you will want to check is that you don’t have any mixed MyISAM and InnoDB tables. Basically, there are two different types of MySQL tables. InnoDB has proven itself to be much faster. 

You can follow this tutorial here on how to convert MyISAM to InnoDB. When it comes to ways to speed up WordPress, this is often an overlooked optimization.

WordPress revisions

By default, WordPress stores revisions of posts and pages when you make changes. This is definitely handy in case you need to revert back to an older version. The bad news is that there is no limit on how many revisions are stored. Especially on large sites, this can quickly bog your database down. How many revisions do you really need?

The first you will want to do is clean up the old revisions and then put a limit in place going forward.

Our Perfmatters plugin provides an easy way to clean up and delete revisions for posts, pages, and custom post types. Or if you are looking for a free solution, the WP-Optimize plugin also works.

As you can see below, in my case, there were 630 revisions sitting in the database. None of these will probably ever be used, so it’s good to clean these up and start with a fresh slate.

WordPress database optimization with Perfmatters
WordPress database optimization with Perfmatters

Now that the old post revisions are cleaned up, it’s time to limit the number of revisions. This will ensure they don’t start filling up the database again down the line. There are a couple of ways you can do this. I recommend using our Perfmatters plugin. You can limit or disable them with a single click, as seen below.

disable and or limit wordpress revisions
Disable and or limit WordPress revisions

Or you can do it manually by adding the following code to your wp-config.php file. In this example, I am limiting them to 3.

define('AUTOSAVE_INTERVAL', 300); // seconds
define('WP_POST_REVISIONS', 3);

It is important to add the code above the ‘ABSPATH,’ otherwise, it won’t work.

Limit WordPress revisions

You can also disable revisions altogether.

Old or unused images

Over time you probably have a lot of unused images that take up disk space. This can cause performance issues in various places, even when taking backups of your site.

I recommend using the Media Cleaner plugin. This helps clean up your Media Library from the media entries (and files) which aren’t used on your WordPress site. Make sure to take a backup before running this.

Another thing to watch out for is if you’ve migrated from one image optimization plugin to another in the past. The reason is that some use different file extensions. For example, if you migrated over from Imagify to ShortPixel, you might have leftover images with a .jpg.webp and .png.webp extensions sitting in your site’s uploads folder. This can easily account for hundreds if not thousands of extra images.

You can use a script or connect to your site via SFTP and do a quick search for these extensions and then delete them. Make sure to check with your current image optimization solution to confirm which extensions they are using.

Clean up old images via SFTP

Clean up auto-drafts, spam comments, transients, etc.

It’s also important to clean up all the other old data you might have lying around. This includes things like auto-drafts, spam comments, comments in trash, posts and pages in trash, expired transients, etc. All of these things just contribute to a larger WordPress database size.

Again the database optimization features in our Perfmatters plugin provide is an easy and fast solution for this. Just a few clicks and you’re good to go.

5. Lightweight WordPress theme

WordPress themes can make or break your site. There are a ton of bloated themes out there that can bring your site to crawl. When you’re looking for a WordPress theme, you want to make sure you are buying from a reputable company with good developers and support.

I use GeneratePress on all of my WordPress sites; including my blogs (this one) and ecommerce sites. I couldn’t be happier.

I saw a 450ms decrease simply by changing themes, without anything else! Kudos to Tom, the developer of GeneratePress. He keeps things lightweight, and still includes loads of functionality so you can literally build whatever type of site you want.

GeneratePress WordPress theme
GeneratePress WordPress theme

I also want to mention that you should be careful about buying themes and products on ThemeForest. I’m not saying that all developers at ThemeForest are bad, but unfortunately, a lot of them simply add bloat to increase their sales. Check out my in-depth GeneratePress review along with GenerateBlocks.

Get GeneratePress

6. Get rid of plugins you can live without

The next step was to get rid of all the unnecessary plugins you can technically live without. This is one reason I love using WordPress. There are so many different ways to accomplish things. If you go with another platform such as Shopify or Wix, you’re stuck doing it one way or worse; you don’t have a way to fix it at all.

live without you
Src: imgflip

Here are plugins I got rid of on my own site:

  • Scroll to Top Button: Scroll to top buttons are already included in the GeneratePress theme.
  • Simple Custom CSS: This is already built into the WordPress Customizer which GeneratePress uses. It’s actually gotten quite good over the years and now does basis syntax color and error correction.
  • Standout Color Boxes: I simply do this with CSS and GeneratePress hook now.
  • Bloom: This plugin has too many requests, so I switched back to the MTS WP Subscribe Pro plugin.
  • TablePress: The block editor in WordPress now has tables, and so does GenerateBlocks.
  • Hero Favicon Generator: WordPress 4.3 and above allows you to upload a site icon. You can also easily load your favicon off of a CDN with a GeneratePress hook.
  • TweetDis: I switched to Novashare, a social sharing plugin for WordPress, which also includes a tweet shortcode and tweet block.
  • Crayon Syntax Highlighter: I switched to the native WordPress code syntax without any plugin.
  • Mango Buttons: I simply switched to a CSS button I made, no need for a plugin. The GeneratePress theme also has buttons now.
  • Table of Contents Plus: I’m simply hardcoding these now. The block editor now has an easy way to add anchors.

As you can see, there were a lot of plugins I didn’t need. By getting rid of all of these, I significantly reduced the requests on my site and the total page size. I advise you do a plugin inventory and assessment on your site right away!

7. Image compression

Image compression (making image files smaller by removing data) is no longer optional. It’s one of the easiest things you can do! Uploading full-resolution images onto websites, especially those on small shared web hosting plans, can really slow down the load time on your website. You would be surprised how much some images can be compressed without any quality degradation.

I compress all my images using lossy compression with the ShortPixel WordPress plugin. This ensures small page weight sizes and fast loading images that still look beautiful. Every image I add to a page or post is automatically compressed behind the scenes. My recommendation is to always keep your images under at least 100 KB.

ShortPixel Image Optimizer plugin
ShortPixel Image Optimizer plugin

I also take advantage of the .webp image format. This is an image format developed by Google that is much smaller than PNGs or JPGs. I use WebP images on all my sites. The ShortPixel plugin can also do this for you automatically.

How much smaller is the WebP file format? Well, take one of the images on this blog post, for example. The PNG image is 60.6 KB, while the WebP version of the same image is 16.3 KB. That’s a decrease in the size of 73.1%!

It’s also important in the ShortPixel plugin settings to exclude the thumbnail sizes you don’t use your site. This will save you credits and also make for faster image compression. As you can see below, on this site I exclude everything except for: medium, medium_large, and large.

Exclude thumbnail sizes in ShortPixel
Exclude thumbnail sizes in ShortPixel

You can also check out the other image compression plugins I recommend.

8. Clean up custom CSS

If you are like me, you might have added custom code in the WordPress customizer to make your WordPress theme work the way you want. or sometimes you are in a hurry and just need a quick fix. Over time, this can add up.

I actually went through my custom CSS the other day and it had 247 lines of code in it. Yikes! After moving to the GeneratePress theme, I went through each line and was able to drop this down to 88 lines of code. 😁 And I could probably clean this up even more.

This just goes to show you how much better the GeneratePress theme is coded. It also means the theme has added more features without sacrificing performance.

Custom CSS
Custom CSS

9. Change web fonts

I have been doing a lot of research recently on web font performance. I ditched the Adobe Fonts service (previously Typekit). I saw an additional 300ms reduction by doing this. Adobe Fonts adds two external HTTP requests, and it also base64 encodes all the font formats. If you aren’t familiar with fonts, you no longer need to serve all the font formats, you only need WOFF and WOFF2 (if you are going for extra compression).

You have a couple options when it comes to better-performing fonts.

Option 1: System font stack (what I do)

I’ll start with my favorite and the fastest option you have for fonts. It’s moving to what they call a system font stack.

Custom web fonts, such as Google Fonts, make up on average 3.2% of a web page’s overall weight. While this is not a lot, it still contributes to your overall load time. And it could be a lot more than that. Some websites use a lot more fonts than they actually need.

Big-name brands such as GitHub, Bootstrap, Medium, Ghost, and even your WordPress admin dashboard all use what they call a system font stack. This utilizes the fonts on your computer. A few years ago this wouldn’t have looked very good. But with today’s newer operating systems, they all have nicer looking fonts pre-installed.

By using a system font stack there is no need to load any fonts at all on the page! This is pretty huge. It can also help you get rid of any FOUT (flash of unstyled text) or FOIT (flash of invisible text) ugliness. Did you know this site uses a system font stack? You probably didn’t notice, did you? That’s right, this site doesn’t load a single font.

But you still might want to weigh the pros and cons. Do you want something that looks fancy or do you want blazing fast?

If you’re using a theme like GeneratePress, it now has a one-click option to use System Stack fonts. You can also check out my more in-depth tutorial on how to move to a system font stack.

System fonts in GeneratePress
System fonts in GeneratePress

Option 2: Use Google Fonts

Google Fonts are free, very popular, and used by millions of websites around the globe. And this actually helps their performance due to one very specific reason. They are probably already cached on the visitor’s computer. Therefore, if a person hits your site with a common Google Font, it might not have to load again.

The external call to Google is also much faster than using a third party like Typekit. When Typekit goes down, which it does once in a while, it seems like half the internet breaks.

Mark Healey

When is down the web stops working #customfontssuck #3rdpartyjs. @markhealey (source)

If you’re wanting to use Google Fonts, many themes like GeneratePress already have this option available. Or you can use a WordPress plugin like Fonts Plugin.

Google Fonts in GeneratePress
Google Fonts in GeneratePress

Option 3: Host Google Fonts/custom font on your CDN

If you really want to use Google Fonts or have a custom font you prefer, the best method of delivery is hosting them locally on your server or CDN.

The benefit of doing it this way is due to the fact that there is no DNS lookup to a third-party and you have more control over what is actually loading. Check out my tutorial on how to host a custom font on your WordPress site. Or you can use a premium WordPress plugin like Fonts Plugin.


It’s also recommended to prefetch your font files. You can do so by adding the location to your WordPress header.php file (example below). Or if you’re using our Perfmatters plugin there is an easy option to do this in the settings.

<link rel="dns-prefetch" href="//">

10. Only use the icons you need

Font Awesome is great, and millions of sites use it on the web to display the icons you see on a daily basis. However, by default, it loads its entire library of icons for your site.

The best way performance-wise to approach Font Awesome is to package up only the icons you are actually using on your site. Here is a great tutorial on how to host font icons locally (only the ones you need).

Or if you are using a theme like GeneratePress with GenerateBlocks, you can actually paste in the SVG code of any icon you want. This is amazing! As it means there is no need to package up icons. You can easily add only what you need.

11. WordPress caching

Obviously everyone knows by now the importance of caching for your WordPress site. There are free caching plugins out there such W3 Total Cache and WP Super Cache, but I have never been that impressed by them as far as speed goes. They are also a lot more complicated to set up.

I recommend going with WP Rocket (premium) or Cache Enabler (free). Or better yet, if you host your WordPress site with a host like Kinsta, caching is done at the server-level automatically for you! So no need to hassle with a caching plugin. That’s right, I don’t have any caching plugins running on this website. 😎

But if you’re using shared hosting or a VPS like Digital Ocean, you’ll need a caching plugin.

WordPress Cache Enabler

The free WordPress cache enabler plugin is created by the team over at KeyCDN, a global content delivery network that focuses on speeding up content delivery. The plugin was developed with HTTP/2 and simplicity in mind. Setting up a caching plugin shouldn’t have to be crazy complicated or involve 25+ steps.

How does it work? Basically, it creates static HTML files which are then stored on your web server’s disks. When a visitor hits your website, the static HTML file is served. Due to it being static, this can be delivered super fast! Why? Because it pretty much bypasses the plugins, database, etc.

WordPress Cache Enabler plugin
WordPress Cache Enabler plugin

As of writing this, the plugin currently has a rating of 4.6 out of 5 stars. People seem to love it. Here are just a few of the reviews below.

Simplicity and effectiveness. Love it! atomiccherry

Loving this lightweight plugin! It even supports WebP! Saw a speed increase after installing! tandkb

Nice and simple caching plugin, works great, and even supports WebP images generated by EWWW Image Optimizer. Awesome! nosilver4u

Cache Enabler features

The cache enabler plugin features the following:

  • Caching HTML to disk
  • Feature to automatically purge cache when publishing new pages/posts
  • Manual purge feature
  • WP CLI cache clearing
  • Displays the total size of cache in your WordPress dashboard
  • Minify your HTML and JavaScript
  • Supports WP multisite and custom post types
  • Ability to set the expiry directive
  • WebP Support (when combined with Optimus, ShortPixel, or EWWW)
  • Supports responsive images via srcset since WP 4.4
  • Works with Autoptimize
  • HTTP/2 Focused

Example of cache size in dashboard

In your WordPress dashboard, you can clearly see on the “At a Glance” widget the size that is currently in the cache.

cache size dashboard
Cache size in the dashboard

Example of Cache Size in Dashboard

You can individually purge pages/posts or clear the entire cache right from the WordPress admin bar.

clear cache wordpress dashboard
Clear cache in WordPress dashboard

How to install Cache Enabler

Follow the steps below on how to install the free WordPress Cache Enabler plugin.

Step 1

In your WordPress dashboard under “Plugins” click on “Add New” and search for cache enabler. Ensure that it says By KeyCDN for the author. Click on the “Install Now” button. You can also download it directly from the WordPress repository.

Install the WordPress Cache Enabler plugin
Install Cache Enabler

Step 2

After you activate the plugin you will want to enable a few settings. In your WordPress dashboard under “Settings” click into “Cache Enabler.” I recommend enabling the pre-compression option and also the WebP support. You can take advantage of this with the Optimus Image Optimizer plugin, ShortPixel, or EWWW.

I also recommend enabling cache minification for both HTML and JavaScript. Note: if you have any issues, you might have to disable the JavaScript minification and only use HTML. The Disqus plugin is one for example that doesn’t play well with JavaScript minification.

cache enabler settings
Cache Enabler settings

Step 3 (Optional)

There is an advanced snippet of code you can use to bypass PHP in WordPress. This is an optional step, but you will see even faster speed increases! I am using this for the speed tests you see further below. Follow the tutorial here on how to enable the advanced snippet for Nginx and Apache.

Cache Enabler speed results

So now let’s see what the speed tests say. I am using this on a fresh install of WordPress with the twenty sixteen theme running. If you have a larger site you can expect to see even faster increases!

Without Cache Enabler

I first ran 5 tests via Pingdom and took an average without a caching plugin running.

wordpress speed without cache
WordPress speed test without caching

With Cache Enabler

I then ran another 5 tests via Pingdom and took the average with the free Cache Enabler plugin enabled.

wordpress speed with cache
WordPress speed test with caching

You can see that the Cache Enabler plugin decreased load times from 537 ms down to 390 ms. That is a 27.37% speed increase for only 2 minutes of setup work using a free plugin! Not too shabby.

For a free plugin, the WordPress Cache Enabler plugin can do wonders for your website or blog. It’s super simple to set up and you will see drastic speed increases.

Download Cache Enabler

12. Tweak Google Analytics

Having worked in the corporate agency setting in the past I have always enabled advertising features and remarketing in my Google Analytics accounts by default. However, on my blog I don’t use any of the data, so better to remove it. Why? Because if you are running these features you will actually have a 2nd HTTP request for this file: and then your main Google Analytics script will have a 302 redirect in the response header.

google analytics collect
Google Analytics collect?

You can fix this by turning both remarketing and advertising reporting features off in your Google Analytics account.

Google Analytics data collection
Google Analytics data collection

You can also disable the features by adding the following code to your Google Analytics script.

  ga('set', 'displayFeaturesTask', null);

After disabling this you should no longer have that 2nd HTTP request and your main script will no longer have a 302 redirect.

google analytics no redirect
Google Analytics no redirect

Hosting Google Analytics locally can also help speed up your site by reducing extra DNS lookups and resolve the “leverage browser caching” issue from their script. It also allows you to load the analytics script from your own CDN which can help you take advantage of a single HTTP/2 connection.

Note: This is not officially supported by Google, but we have been doing this for years without any issues. This can easily be done with our Perfmatters plugin (as seen below).

Enable local analytics in Perfmatters
Enable local analytics in Perfmatters

13. Speed up WordPress test results

And here are my speed test results after I did everything above. The tests were run 5 times and the average taken. The final load time for woorkup is under 500 ms.

Pingdom speed test after optimizations
Speed test after optimizations (Source: Pingdom)

Not too shabby. I managed to reduce my HTTP requests from 90 down to 36. I decreased my page size from 939.9 KB down to 291.5 KB. And I decreased my load time from 1.52s down to 495ms! 😮

Feel free to click around this site and see how fast it loads. The proof is in the pudding.

14. Stop obsessing over PageSpeed scores

This is one of my biggest pet peeves when it comes to speeding up WordPress sites. I’ve optimized and observed thousands of sites over the years, from small blogs to custom-built WordPress sites that get millions of visitors per month. And guess what? I rarely ever use Google’s PageSpeed tool. And I can tell you the developers of most of these big sites don’t either.

Image source: Make a Meme

I realize this might be contrary to what other people have told you, or that you’ve read around the web. But before you have a panic attack, let me explain a bit. And this goes for all scores and letter grades that various other tools like GTmetrix uses.

Total load time is what you want to focus on, not scores. The scores are meant to be used as a guide and will not always correlate with total load times. So chasing a perfect or higher score in a lot of cases can be a waste of time. And in some scenarios, it can actually have the opposite effect and degrade your site’s performance.

Now there is definitely going to be some correlation between the two. As you get a higher score, you will hopefully achieve faster total load times. This is why Google built its tool in the first place, as a guide to get you there. And it definitely can help. However, this is not always the case if you are simply piecing together tricks and plugins designed solely to fix these scores.

Take Google’s own development site for example. It scores a 55 on mobile in their PageSpeed Insights tool. If you are basing everything off of only the score, this is not great. What it actually means is even they aren’t trying to chase down that perfect score.

Bad mobile score on PageSpeed Insights
Bad mobile score on PageSpeed Insights

In fact, if you are only looking at scores, this can sometimes destroy your site’s perceived performance. Perceived performance is how fast your site feels to a person visiting it. If your site’s perceived performance is bad, this can have a direct impact on your bounce rate and time on site. And these are factors Google does use.

One good example of this is when lazy loading images. You’ve probably seen this happen before. The viewport isn’t set correctly, and as you scroll down the page, the images don’t load until you are already reading the content where the image is supposed to show up. This is downright annoying to users and will make them not want to return to your site. Does it shave off a couple of KBs from the first time load? Sure, but you need to be careful.

The correct way to lazy load images is loading them immediately once they enter the browser’s viewport. This will also ensure you don’t see what I call a “lazy load flash.” And this is how we do it in our Perfmatters plugin. Things like this are so important, and we pay attention to all of these little details when we are developing our plugin.

To recap, all Google wants from your site is for it to be fast and load in an optimal way. This is all you should be focusing on. And yes, total load times are important on mobile, as that is what Google is now using for its indexing in SERPs. In other words, Google is looking at the total load time of your site on mobile devices, not just desktops.

With all that being said, I understand this can be difficult sometimes, as you might be building a site for a client, and all they want is a faster score. They don’t understand or care about what should actually be optimized or how on the site. Trust me; I feel your pain and I’ve been there. 😉

If you are dealing with a frustrating client, my best recommendation is to forward them the info above. You might be surprised by their response. And if they stick to their guns, well you might be optimizing for a while.

If you are curious about what I use when performance troubleshooting, I tend to use a mix of Chrome DevTools, Pingdom, and GTmetrix for different data points. WebPageTest can be a good free tool to use if you are wanting to measure mobile load times.

If you are needing to measure the performance of queries and database load, Query Monitor and New Relic APM are great solutions.

New Relic APM
New Relic APM

Regardless of what speed testing tool you use, it’s important to pick one and stick with it. Even Google recommends this. Each tool measures speed in a different way and you need an accurate baseline to monitor performance improvements.

15. Get a web performance audit

Still need an extra boost? If you still aren’t satisfied with your speed, I always recommend hiring an expert and getting an audit done on your site.

One day I’ll probably offer web performance audits, but right now I simply don’t have time. For now, I highly recommend Mike Andreasen, a Codeable expert, for web performance audits and HTTPS conversions. Here is an example of a client’s site before and after Mike’s web performance optimizations.

Website performance audit from Mike
Website performance audit from Mike

I personally chat with Mike on a regular basis. He is one of the only web performance guys out there which I agree with on just about everything when it comes to optimization, which services and tools work the best, etc. 😉 And trust me, that is rare.

He has completed over 1,300 projects for clients. I personally vouch for his work as I have the graphs, speed tests, and data from actual clients to back it up!

16. Additional optimization tips and resources

Here are a few additional things I recommend:

Below are also a few newsletters I highly recommend taking the time to subscribe to as they provide incredible insights into the web performance and development industries.

Web Development Reading List (WDRL) A handcrafted, carefully selected list of web development related resources. Curated and published usually every week. Run by @helloanselm.

StatusCode Weekly A weekly newsletter on web operations, infrastructure, performance, and tooling, from the browser down to the metal. Run by @peterc.

Kinsta newsletter A weekly newsletters with WordPress tips and strategies to drive more traffic and revenue to your business! Being that Kinsta is a high-performance hosting company, many of the articles are focused around performance.

KeyCDN newsletter Webperf, webdev, WordPress, content delivery, once a week.

Smashing Magazine newsletter Smashing Magazine is an online magazine for professional web designers and developers. Useful tips and valuable resources, sent out every second Tuesday.


Call me crazy but I am actually still not happy with the results. I’m pretty OCD when it comes to performance so I will always be optimizing. It’s a job that never ends. Make sure to bookmark this post as I am constantly updating it. Hopefully, my experience above on how to speed up WordPress will be eye-opening for you.

I would love to hear any feedback below!

Brian Jackson

I craft actionable content and develop performance-driven WordPress plugins. Connect on Twitter or subscribe to my newsletter (twice a month, no spam).

114 thoughts on “How to speed up WordPress (optimizations used on all our sites)”

  1. Great article Brian.
    What type of hosting are you using?

    In the past I was able to load 87studios in around 250ms (98score on pingdom) without cacheing plugin, just doing VPS optimization, sever side cacheing and stuff.

    • That’s awesome Kris! I am on Kinsta managed WP hosting right now. Simply because I don’t have time if things break. I pay the extra $ so I can spend any free time I have writing. Ya there is a lot of optimization that can be done. Have you ever used Varnish caching server-side? One of the things I am playing with next is storing web fonts in localStorage instead of browser cache. Should be an interesting experiment.

  2. Nice article Brian, I am always looking at this also. I managed to get 1.5s off a bloat site by getting rid of google fonts all together. Plugin “Remove Google Fonts References” first, then generated webfontkit versions of my desired font with the utility on FontSquirrel, uploaded font files to my local webserver. In CSS, loaded the local fonts with @font-face in .eot, .woff, .ttf formats. The font loads then benefit fully from local cache.

    It’s a bit of messing around but has the added benefit that Chinese sites can load you up fast with your desired fonts – as google is blocked for them. And of course speed.
    Regarding caching, I use plugin FFPC -it’s a different thing entirely, why not shift your caching from disk to memory…..

    • Hi, thanks for your comment. I have done testing with local fonts and have found it slower sometimes vs Google fonts depending on the user’s location. But this is because of Google’s use of a CDN to power their font distribution. You could however load the fonts locally and then off of your own CDN. Actually what I am experimenting next with is using a tool like this: and storing fonts in localStorage vs browser cache (maybe that is what you are referring to).

      I will have to test with FFPC as I have not done much ever with caching to memory vs disk. Will give it a try :)

      • I tend to lean away from anything that needs multiple calls to a remote server, just personal preference. And again – China. That localfont sounds good, if it takes out a step for the local approach.
        FFPC I have had great results with, you do need access to the shell to enable e.g. memcached, but as it caches the actual DB calls it might actually work nicely together with every disk caching solution.
        Great tip on Mythemeshop, looking at it, love that performance – I might have to have a look into replacing themes on some news sites we have. Thanks!

  3. Good tips Brian, thanks for putting it all together.

    I did have one comment though – it seems to me a tad bit unfair to compare Themeforest and Mythemeshop.

    Themeforest is a marketplace where developers can sell their products, whereas Mythemeshop actually produces and sells their own themes? In my experience there are both great and terrible themes for sale on Themeforest, but at the end of the day Themeforest is not responsible for the code quality of the end product. This responsibility lies with the individual developer/agency, so it would be interesting to hear who was behind your original theme?

    • Hi Simon. Thanks for calling me out on that. I have edited my wording a little bit above. I do agree that not all the developers are bad on Themeforest. And they do have to make a living which means sometimes adding features to compete even if they don’t want to. My TF account has over 80+ downloads in it, so I have been through quite a few themes for myself and clients. Everything from Theme X, Avada down to minimal themes like Orca and Readme.

      • I think this problem can largely be attributed to the popularity of multi-purpose themes. As buyers/freelancer we are inclined to gravitate towards extra options and features, thinking more options will better equip us to meet the client’s needs. You never know what a client will dream up, and it’s nice to be covered.

        Unfortunately this includes a lot of bloat and as you say, the developers may feel forced to add functionality even knowing that it will compromise performance.

        Clients will rarely complain about poor performance, but will be quick to request new features, so it’s a fine line!

      • I think you had it right in the first place. ThemeForest is a lowest common denominator market place without much brand to protect. Bloated themes to newbies seems to be their main business model.

        Buy direct from a respectable developer (we are buyers of themes not sellers ourselves, no conflict of interest): do yourself, your client and the world a favour.

  4. Nice post Brian. I’m not going to pimp my service here, but I proxied your site through my server and had a total load time of 263ms, so breaking 300ms with your current host shouldn’t be too hard. After looking at your waterfall, I have a few tips. 1st, ob_start your header to chunk critical resources so only html and CSS are at the top. Once you have CSS on top, content ONLY in body, then load server-side scripts in the footer. The last part is key, 3rd party requests kill you, so unless it is needed for page paint, use a script loader to inject “extras” after the OnLoad event has fired. That alone will get you under the 300ms mark, if you want to get a little more extreme Skype me @CDSalmons and I’ll help you with the rest of it. As far as the Pingdom comparisons though, your main culprit wasn’t mentioned in the post which is the main thing most people forget about… DNS ;) So using DNSMadeEasy or Dyn(.)com will take care of that part. Anyhoo, always glad to see a fellow performance nut speaking out. If you need help let me know, take care

    • RE: DNS
      How much of an improvement can DNS hosting create? I looked into DNSMadeEasy and Dny and ended up using AWS Route 53 on one of my sites. The site is small and using a shared hosting solution, but it includes a CDN via cloudfront + s3. The new nameservers have propagated, but I’m not really seeing much of a change. I’m wondering if my understanding of the situation is unclear —or is the shared hosting holding it back? Appreciate enlightenment via links or comments!


  5. Pingback: L'hebdo de l'écosystème WordPress n°30
  6. Hi Brian, as usual fantastic article. I am about to implement Optimus & Gonzales based off this. Keep up the amazingly informative articles. Most blogs write more overviews and very rarely get down to the real reasons behind implementing a certain practice and you have to take their word for it. Your articles provide background and enough in depth analysis which lets the reader feel confident about giving something you recommend a try!

  7. Really great article Brian. I learned a few things by reading. Although my site is pretty quick loading (always under a second when I test) I know there’s plenty of room for improvement.

  8. Sub-300 has me thinking “wow cool, I should try this stuff soon.” Sub-200 will turn me into “OMG MUST DO THIS NOW.” You’re a wizard, sir. Keep up the awesome work.

    • Haha, thanks TJ :) Ya I haven’t had any time to try and hit sub-200 yet. But it is coming :) One hint is that I am playing with web fonts and localStorage vs simply using Google’s font CDN.

    • They have a checkbox for including “name” yes. You can’t do first and last separate though. But you can add “name” field.

        • Ya, anything that MyThemeShop makes is golden and super fast. Every single website I am running right now is all on MTS themes, using their subscribe plugin + notification bar plugin. They know how to keep things lightweight.

          • I’ll browse through those as well. I don’t see any buddpress/bbpress ready themes, so will have to stay on my current theme for one of my sites (it runs Kleo premium theme).

            Do you know of any themes that are ajax ready? E.g. to show a persistant chat mole ala Facebook?

          • Indeed – I just updated one of my sites – with a theme from MyThemeShop. I’m blown away by the performance. And sad that some of my higher traffic sites depend on bbpress/buddypress and good themes that support bbpress/buddypress load dozens of js and css files :(

          • Awesome, ya moneyflow is a great theme.They really are the best! I have 4 sites running on MTS themes right now and couldn’t be more impressed. I’ve been using them for years.

  9. And one more (sorry for all the questions…) Which plugin do you use for redirects? I notice redirects for affiliate links, I’ve always struggled to find one that didn’t slow down tremendously as the number of redirects grew

    • I use prettylink, the free version. One of those bad habits that I just keep doing. There are definitely better plugins out there for affiliate links. But it works :)

      • hehe :) I’ve got a few bad habits too. I’m trying to kick Sumome, because it really just destroys page load time (yeah yeah, async js load and all, still a ton of stuff that browser needs to load and process)

        I’ve heard good things about Simple 301 Redirects –

        But haven’t yet tried it.

        I would love to use nginx redirects directly, but my host doesn’t support that.

  10. Just want to share a warning on WP Rocket – don’t depend on their 30 day money back guarantee. It’s got a bunch of conditions which basically require you to prove that it’s slower (never mind conflicts, etc.).

    Also see more recent posts from Brian recommending Cache Enabler. My experience so far is:
    Cache Enabler is super fast (when paired w/ CDN in particular). ZenCache is fast, WP Rocket has conflicts with themes (e.g. Kleo) and money back guarantee is just a farce. W3 Total Cache is buggy, and seems to slow things down more.

    http2 is a savior for performance, and negates the need to combine resources.

  11. Still can’t stop thinking how you changed the whole look of the schema theme. This edited theme looks way better than the original demo of the theme. Schema is surely one of the fastest theme out there, but editing styles is a bit of pain… Really appreciated!

  12. Pingback: Weekly WordPress News: WPLift Has Been Sold.
  13. Great article Brian. I’m wondering – why you choose to add all of those plugins in the first place? Just kidding :)

    One questions though: moving over to https – any gain/loss details you could share?

    • Haha don’t ask. I got lazy :( But no more.
      Moving to HTTPs, because of HTTP/2 and now HPACK compression, I didn’t see any performance losses. It made up for the slight overhead of TLS, but even that is minimal now. HTTPs doesn’t hurt you like it used to.

      Another big reason to move is SEO benefits and better referral data in analytics. Its hard to gauge just how much the ranking factor is weighted, but man, every little bit helps!

    • For me it was hard to test that because I actually migrated from PHP5.6 to HHVM, and then from HHVM to PHP7. So my scenario was a little bit different than most and from HHVM to PHP7 I didn’t notice huge differences. Although PHP7 is now more stable than HHVM in my opinion.

  14. Pingback: Boletín #002: Apple cae, facebook es móvil y… la historia de De Tomaso
  15. Absolutely FANTASTIC post… thanks so much for sharing your experience with us, Brian. I can’t wait to try these tips on my client sites! :-)

  16. Hey Brian,

    just wondering if caching still works with Kinsta? I recently moved to Kinsta and they already provide server level caching (which they claim is better than any caching plugins). Caching plugins are also part of their disallowed plugins list.

    • Hey Jeremy, yes, all my sites are hosted with Kinsta where they provide fast server-level caching. So you won’t need to worry about a caching plugin if you are at Kinsta.

    • They do have a great affiliate program. But that is not why I use them. I use them because their themes are fast, they know how to code clean, and their support is beyond phenomenal.

      • Has been totally opposite in my experience. They’re absolutely trash with perhaps $5 / hour coders working on their themes. But to each his own, I guess.

        • Strange ya I have used them for years. Never had any issue with their code and I have ripped them pretty much apart :) ThemeForest themes in my experience have been totally the opposite. But everyone has their own preferences.

  17. Hi Brian.

    Just found your site.

    You have a new fan.

    Where did you learn all of this? You seem to have a very deep knowledge.

    Are there any comprehensive books or resources (apart from this blog) that you learned from?

    Sharing now on my social media.


    • Thanks Simon! I have been using WordPress for over 10 years. I can’t even remember a time when I wasn’t blogging :) I am definitely self-taught, which is one of the best ways to learn in my opinion. I always recommend “learn by doing.” Thanks for the share.

      • I run 40+ sites on 8mb memory VPS system at OVH. All sites perform under 400ms with zero tweaking. Just regular 17 plugins plus per site on a theme. If you made the effort, you might hit 250ms (Some sites do). Server in Germany, test in Australia. I doubt you’d get under 250ms unless you spent a lot of time on it. TBH – we’re here to make $ from the sites and anything under 2s makes Google happy. Our easyengine system is tweaked for 5000 threads and other things like max security, not a standard install. My partner used to work for Google as a SysAdmin and I’m obsessed with security as WP security is so bad.

        We’ll be offering bulk hosting shortly. Currently doing testing with the 40+ managed sites for last 3 months. We tried eNginx but EE is 10x faster, literally. We’ll go to a dedicated 32mb memory machine once we hit 50 sites.

        Thanks for the rantspace!

  18. Hi,
    Do you perform similar speed up services for hire? Or can you recommend someone? Need to speed up my own site dramatically.

  19. Nice tutorial Brian!

    Do you know if Cache Enabler is the only way to serve the image webP compressed from Optimus? Acttually, I am using WP Rocket and I would like not change it.

  20. Google analytics run asynchronus, so it suppossed not slowing down your site… better option ? Use google tag manager

    • That is true, but I actually host Google Analytics on my CDN now using our Perfmatters plugin. Tag manager has some of the same issues.

      – By hosting locally you can ensure that their large script loads from your web server, or CDN, instead of having to reach out to Google.
      – Instead of 2 HTTP requests to Google, you now only have 1.
      – When you host locally, you now have full control over caching, expires headers, cache-control, etc.
      – Take advantage of your single HTTP/2 connection

  21. Hey Brian, great post. I’d love to hire you to work on speeding up my site but I noticed you’re not taking on client work. Can you recommend someone who knows WP as good as you?

  22. Hey Brian,

    Awesome guide. I’ve gone through the whole thing back to front, and signed up using your links for a few of the services you recommend. I noticed that WPhostingspot has possibly sold? Went through their site, and they don’t really come out and describe their deployment stacks… Do you still recommend them? I’d love to be on Kinsta, but kind of hard to justify the price at the moment.

    I’m on a $200/mo liquidweb dedicated server (shared cost between other projects though), and I can’t seem to get my page load speed anywhere close to what you’ve been able to achieve. (despite following all of your/and kinsta blog tutorials)

    I’m guessing it’s all the cpanel/whm bloat on the server for other projects, and the fact that they don’t have a supported Nginx config I can deploy to get away from Apache.

    Any experience with a Cloudways deployment on Vultr or similar? Also noticed Flywheel is on Nginx, but kinda seems like the little sister of Kinsta… Ever tried them?

    Great site, I’m going to link to your guides in my hosting/speed case study once I get everything figured out!

  23. Hi,
    I loved the post! Read something different here, different plugins, etc. and it’s really good. Thank you

  24. Hey, Brian,
    Excellent post and well guided for speed up the website speed. It’s true that, fast hosting is must need for increasing website speed. I run my blog on blue host, but still, i face some slow loading. I checked and noticed that some plugins, images and browser cache causes this slow down issue. Thanks for showing CDN tutorial. Also, thanks for sharing unethical plugins list. Really a great post.

  25. Hello Sir, You are using generatepress right now but you recommended mythemeshop. please specify what is your most preferable theme? I really excited to know your recommendation. Thanks

  26. Hi Brian,

    Your plugin perfmatters is awesome. I am using on two of my websites and it did reduced a lot of loadtime and increased my site speed. Love your tips and tricks.

    Thank you!

  27. Hello Jackson,

    Can we leverage of “Load Balancing” or multiple databases like clusters at various regions if traffic is around ~50k? Is this good to go with these? Actually, the theme is really heavy and lots of bloat plugins I’m using, which is nearly impossible to remove.

    • Hey Asharam,
      So load balancing or multiple databases is really not even worth it unless you are doing it for very specific reasons. I’ve worked with many sites that get millions of visitors per day (yes per day) that are fine with single databases and no load balancer. This really comes down to the quality of your hosting provider. Go with a premium host and you’ll discover a lot of these issues go away.

      I would also recommend utilizing a tool like New Relic which can help narrow down exactly which plugins are causing the highest load on your site.

  28. Hi,

    Great article. I’m looking for some consultants to help me do this process with our Website to speed it up. Any folks you’d suggest?


  29. Great article Brian.. I have a pretty short attention span, but I actually read this post right the way through. I probably will apply some of the fixes/tweaks you mentioned

  30. Hi Brian,

    I host on Kinsta, and I’ve got both Autoptimize and Perfmatters plugins to take care of different aspects of site optimization.

    For Kinsta users, do you still recommend we use the CDN enabler plugin and/or use the CDN portion of the Perfmatters plugin? Kinsta CDN is active on the site.

    • Hey Q,
      Great question. So if you are using the included Kinsta CDN, then they actually deploy it automatically for you. There is no need to hook it up with a plugin. And actually you shouldn’t, as this would cause problems.

  31. I loved this post and there is something different from other sites likes different plugins etc. thanks for sharing with us.

  32. Hey Brian, awesome stuff! I was hoping you could clear a couple of things up for me.

    Are you using CDN Enabler and Perfmatters? I’m a recent buyer and thought I read somewhere in another one of your articles about using Perfmatters to enable KeyCDN on your site and would rather do that if it’s an option.

    Second one (Apologies for the long-winded comment) – you mentioned you use Imagify (for compression and WebP), and KeyCDN. With these two things in place, is there any need for an Image CDN/compression plugin like Cloudinary? (possibly in place of Imagify) or would worrying about that be redundant with the use of KeyCDN and a straight compression plugin like Imagify.


    • Hey Steven,
      I no longer use CDN Enabler because we have built this feature into our Perfmatters plugin. You can use Perfmatters to deploy CDNs like KeyCDN, CDN77, StackPath (if you are only using CDN, not WAF), etc.

      It would probably be overkill to use KeyCDN, Imagify, and Cloudinary. I would go with one or the other. I prefer a traditional CDN + ShortPixel (moved over from Imagify) due to the fact that I have full control over everything. Cloudinary is more focused on automatic image and video optimization. I like a traditional CDN as it handles everything: images, JS, CSS, video, etc. And ShortPixel’s WebP compression is the best I’ve found after extensive testing.

      KeyCDN and ShortPixel are also cheaper if you need things like custom domain support. The free Cloudinary plan doesn’t support this. I generally don’t like mix and matching CDN providers due to the fact that you’re just introducing more latency, DNS lookups, etc.

    • Hey David,
      Thanks for the comment. I’ve worked on a lot of websites for clients at WPX hosting, so I’m familiar with their platform. They are a great company and work well for some, but there is really no comparison in terms of performance. Granted, I’m a little biased, but Kinsta is using Google Cloud’s Compute-Optimized VMs (C2). These are the most powerful machines that GCP has to offer. Kinsta also includes routing over Google Cloud’s premium tier network along with scalable software containers. Not to mention, you can choose from 22+ data centers.

  33. Hey Brian, great post!

    Just wondering, I saw that you recommend KeyCDN, but upon digging you switched to CloudFlare, any reasons?

    Also have you tried BunnyCDN I keep seeing it’s a quality and affordable CDN with the minimum monthly being $1 and a top up of $10, which is way lower than KeyCDN!

    All the best,

    Jesus H

    • Hey Jesus,
      I recently switched to full page cache on Cloudflare Edge. So the entire site serves from CDN. I will have a blog post coming out about this soon. :) BunnyCDN is great, but KeyCDN is slightly faster from my tests and has more advanced features. KeyCDN also has impeccable uptime and definitely what I recommend if you have a business. But you can’t go wrong with any of those options. The most important thing, of course, is to have one.


Leave a Comment