You can fix slow server response times on Bluehost by: configuring a cache plugin, avoiding high CPU plugins, using a CDN, cleaning your database, optimizing images, deleting unused plugins, using the Blackhole For Bad Bots plugin to stop spam bots, Heartbeat Control plugin, and making sure your hosting plan has enough server resources to handle your traffic/plugins.
Is Bluehost the problem? Probably… they’re owned by EIG who is known for cutting costs by packing too many people on the same server. At the end of the day, they’re known for being cheap (not fast). They are also rated poorly in Facebook polls. Try joining the WordPress Hosting Facebook Group and see what real, unbiased people are recommending for hosting. There are much better options than Bluehost. I use SiteGround and have 200ms response times, 100% GTmetrix scores, and .4s Pingdom load times. The reports speak for themselves.
1. Check Server Response Times
Check your own server response times using Bitcatcha. That’s mine… hehe.
Or use Google PageSpeed Insights:
As long as you’re with Bluehost, you are not alone:
2. Upgrade To PHP 7+
3. Avoid High CPU Plugins
Too many plugins (or just 1 single high CPU plugin) can make or break your server response time (and load time). P3 used to be great at finding slow plugins, but now Query Monitor is best. Install the plugin and go to “Queries By Component” to view slowest loading plugins.
You can also use the GTmetrix Waterfall tab:
4. Avoid External Resources
External resources can come from Google Maps, Analytics, Gravatars, social sharing plugins, comment plugins, and other sources. These pull requests from external resources and will increase server response times and destroy your GTmetrix + Pingdom reports. Obviously it’s best to avoid external resources all together, but I also left some common solutions below.
- Gravatars – use WP User Avatar, Harrys Gravatar Cache, FV Gravatar Cache, Optimum Gravatar Cache. You can also disable Gravatars completely, or break comments and enable nested comment in your WordPress Discussion settings.
- Comment plugins – use the Disqus Conditional Load plugin.
- Social Sharing plugins – it’s really best to use a lightweight plugin for this.
- Google Maps – only use this on pages you absolutely need a Google Maps.
- Google AdSense – use Cloudflare Rocket Loader which helps with dynamic content.
Prefetch DNS Requests – if you absolutely HAVE to use external resources, prefetching them helps browser anticipate them so they can load faster. Luke created an amazing list of common domains to prefetch. Copy all these (or just the ones you need) and add them to your site (most cache plugins have an option for this). Also include your CDN URL if you’re using StackPath, KeyCDN, BunnyCDN, or another CDN (except for Cloudflare which doesn’t use CDN URLs).
5. Configure A Cache Plugin
If you’re going the free route, I recommend either Swift Performance or WP Fastest Cache, and I have tutorials for both Swift and WPFC. But if you can drop the $49, WP Rocket is much better, is what I use, and was rated the #1 cache plugin in multiple Facebook polls. But why?
WP Rocket comes with many features most cache plugins don’t. That means if you were to use most other cache plugins, you would need to install about 6 extra plugins. If you’re like me, you only want to use 1 plugin. This is why WP Rocket yields better scores + load times in GTmetrix/Pingdom (it has more features, while reducing the number of plugins on your site).
- Database cleanup (built-in to WP Rocket, or use WP-Optimize)
- Heartbeat control (built-in to WP Rocket, or use Heartbeat Control)
- Lazy load images/videos (built-in to WP Rocket, or use WP YouTube Lyte)
- Host Google Analytics locally (built-in to WP Rocket, or use CAOS For Analytics)
- Host Google Fonts locally (built-in to WP Rocket, or use CAOS For Fonts, or SHGF)
- Integration with Cloudflare + other CDNs (built-in to WP Rocket, or use CDN Enabler)
Most people do not configure their cache plugin correctly or take full advantage of it’s features. I highly recommend looking through my tutorials to make sure your setup is ideal.
- WP Rocket tutorial
- Swift Performance tutorial
- WP Fastest Cache tutorial
- W3 Total Cache tutorial
- WP Super Cache tutorial
6. Clean Database
Your database can accumulate junk files like deleted comments, spam comments, post revisions, expired transients, and other things that are causing your database to be bloated.
It’s best to clean your database about once every 1-2 weeks. You can use the WP-Optimize plugin to clean it, as well as schedule ongoing database cleanups. Just make sure you take a backup of your database before doing this, especially if this is your very first time cleaning it.
If using WP Rocket, you don’t need WP-Optimize as this is built-in:
7. Heartbeat Control
The WordPress heartbeat API shows real-time plugin notifications and that other users are editing a post. While this sounds nice, it also consumes server resources by creating a request every 15-30 seconds. Use the Heartbeat Control plugin and limit it, or disable it completely.
If using WP Rocket, you don’t need this plugin, as this is built-in:
A CDN (content delivery network) offloads resources to multiple data centers around the world. This put less stress on your server, but it also reduces the geographical distance between your server and visitor, and is a recommendation in the WordPress optimization guide. I recommend using Cloudflare which is a free CDN with 165+ data centers and there’s no reason you shouldn’t be using it. Cloudflare is only available on Bluehost’s share plan, while customers with VPS or a dedicated server will need to contact Bluehost and request it.
In your Bluehost cPanel, go to Domains > Cloudflare > Activate.
If you want to go the extra step, you can configure a few settings in your Cloudflare dashboard.
And if you really want to go the extra mile, you can use multiple CDNs. Each CDN has their own set of data centers, and more data centers = faster delivery of your content and will offload even more resources. I personally use both Cloudflare (free) and StackPath ($10/month with free 30-day trial).
Step 1: Sign up for StackPath.
Step 2: In the dashboard, click the CDN tab, then create a StackPath CDN site. You will walk through a series of pages where StackPath will request your domain, find your server’s IP address, then create a CDN URL which you will copy/paste into your cache plugin. Easy peasy.
Step 3: Paste your StackPath CDN URL into your cache plugin (below is for WP Rocket). If your cache plugin does not have a field for a CDN URL, use the CDN Enabler plugin instead.
Step 4: In StackPath go to CDN → Cache Settings, then click Purge Everything…
Step 5: Run your site in GTmetrix and “content delivery network” should be green in YSlow.
9. Block Bad Bots
You will never know if spam bots are hitting your site and consuming resources, unless you check. I found 2 spammy bots (compute.amazonaws.com and linode.com) were constantly hitting my site about every 3 seconds – I was spending server resources on literally nothing. Obviously Googlebot is OK, but you want to prevent spam bots from consuming resources.
Step 1: Install Wordfence.
Step 2: View your live traffic report (under Wordfence’s Tools settings). Look carefully for a solid minute to see which bots are hitting your site. If they look spammy, Google their hostname and see if other people are reporting them as spam. Make a list of all the spam bots.
Step 3: Go to Wordfence’s Blocking settings and add the spam bots here. Use asterisks to make sure you’re blocking all variations of that bot, otherwise this may not be effective.
Step 4: Go to your Blocking log and enjoy watching those spam bots get blocked.
If you don’t want to use Wordfence, the Blackhole For Bad Bots plugin does this automatically:
10. Optimize Images
There are 3 primary ways to optimize images in GTmetrix. It will only show unoptimized images for the single page you test, so be sure to run your most important pages through it.
Serve scaled images – resize large images to be smaller. GTmetrix shows you all images that are too large, and the correct dimensions they should be resized to. Locate the image on your site, resize it to the correct dimensions, upload it, and replace the old image with the new one.
Specify images dimensions – means you need to add a width/height in the image’s HTML or CSS. The main WordPress editor will do this automatically, so these errors are usually caused by images located in page builders, widgets, and other areas of your website. Simply locate the image, view the image’s HTML, then add a width/height which GTmetrix provides you with.
Optimize images – losslessly compress images using a plugin like ShortPixel. You get 100 free credits each month (this is the my favorite image compression plugin and I have tried many including Imagify, Smush, EWW, and others). Install it, grab your API key from the ShortPixel website, then configure the settings. Set the image compression level to lossless. Go to your Media tab and optimize a couple images to make sure you’re happy with the quality. If you are, bulk compress all images on your site. I recommend taking a backup beforehand, just in case.
11. Use Lightweight Plugins
If you’re running high CPU plugins that cause slow server response times, you either need to delete them, or find alternative plugins that don’t consume as many resources. Here are some lightweight plugins I suggest, though in many cases, you need to do your own research/testing. View your Query Monitor report after installing EACH plugin to see how it impacts load times.
Backup – UpdraftPlus.
Comments – Disqus Conditional Load.
Analytics – Google Analytics and Search Console should be plenty. Just make sure you’re hosting Google Analytics locally (using WP Rocket, CAOS, or WP Disable).
Page Builders – WordPress Page Builder by MotoPress, but no page builder runs faster than the native WordPress Editor. Combine this with the Duplicator plugin and you shouldn’t need a page builder (including page builders built-in to WordPress themes). Unless your team absolutely refuses to learn a little HTML (the easiest coding language), avoid page builders.
StudioPress Plugins – lightweight plugins for the Genesis Framework.
12. Host Google Fonts Locally
If you see Google Font errors in your GTmetrix report, it means you need to host fonts locally.
Use can use the CAOS for Webfonts plugin:
Or Self-Hosted Google Fonts plugin is a good alternative, which automatically downloads all Google Fonts you’re using and adds them to your CSS, with having to configure any settings.
13. Host Google Analytics Locally
If you see Google Analytics errors in your GTmetrix report, it means you need to host your Google Analytics tracking code locally. The CAOS Analytics plugin does this automatically.
WP Rocket also has this feature.
14. Retest Website
15. Switch To Faster Hosting
If your server response time is still slow, it’s most definitely caused by Bluehost.
Before upgrading to their VPS or dedicated plan, do your research and look into what experienced people are recommending in the WordPress Hosting Facebook Group. Your co-worker might have their own suggestion, but these people know what they’re talking about.
I use SiteGround and have 200ms response times with 100% GTmetrix scores and .4s Pingdom load times. Do a hosting check, run your own tests, or click through my fast loading pages. They were rated the #1 host in 26 Facebook polls and are worlds better than EIG (Bluehost, HostGator), Godaddy, and other hosts who pack too many people on the same server. There have been plenty of people who migrated and posted results on Facebook and Twitter. Tweet after tweet, post after post, poll after poll after poll, faster hosting will fix slow response times. They’re recommended by WordPress, do free migrations, and I use their semi-dedicated plan.
SiteGround has 3 plans:
Higher plans include more server resources (#1 factor in the WordPress optimization guide). Here’s the full comparison chart, but GrowBig gives you about 2x more server resources than StartUp, and GoGeek is semi-dedicated hosting which gives you even more. GrowBig and up comes with a free migration, staging, advanced caching, and ability to host multiple websites. GoGeek comes with priority support. Their cloud hosting is quite the price jump at $80/month.
You can see this on the features page…
I hope this was helpful. If you have questions, drop me a comment.