Have a slow WordPress site on Bluehost?
Bluehost is notorious for overcrowding their servers and using bare bones technology (shared hosting on Apache servers is never a good start). Other than the built-in server caching, there’s little to be desired in terms of speed. People in Facebook Groups usually tell you to avoid them.
A good starting point is to test your TTFB in KeyCDN’s performance test or PageSpeed Insights. Google flags it if it’s over 600ms but recommends <200ms. Hosting (and CDNs) are the 2 main TTFB factors which impact core web vitals since it’s also 40% of LCP. So it’s obviously important.
If your server/TTFB is slow, Rocket.net is lightyears ahead of Bluehost with Cloudflare Enterprise (but costs more). Or if you’re sticking with budget shared hosting, use LiteSpeed.
Besides moving away, you can speed up your site by upgrading PHP versions, setting up Cloudflare and configuring settings, and using a cache plugin that addresses core web vitals. Removing junk will also help (slow plugins, database junk, admin bloat, CSS, and JavaScript).
Drop me a comment if you need help.
- Check for a slow TTFB
- Enable Bluehost’s server caching
- Use latest PHP versions
- Take advantage of Cloudflare
- Invest in a premium cache plugin
- Keep email + web hosting separate
- Remove slow loading plugins
- Remove database junk
- Don’t use slow page builders on shared hosting
- Remove unused CSS + JavaScript
- Preload, prefetch, preconnect
- Optimize images
- Optimize Google Fonts
- Remove bloat
- Leave Bluehost
1. Check For A Slow TTFB
KeyCDN measures TTFB in 10 global locations. The further away your server is from the testing location, the slower your TTFB will be. Bluehost claims “server issues are the rarest cause for a site to experience slow load times” but this is the #1 factor in the WordPress optimization guide.
In other words, what Bluehost says isn’t true.
You may also want to read Bluehost’s resource usage section. Even though Bluehost claims things are “unlimited” or “unmetered,” they put limits on inodes, database usage, and file transfers. In other words, there’s no such thing as unlimited and they will throttle bandwidth if your site consumes too many resources. Many people complain about this in Bluehost forums.
2. Enable Bluehost’s Server Caching
You can find Bluehost’s server caching under My Sites → Performance.
Alternatively, you can use Bluehost’s plugin if you have it installed. Caching at a server level is almost always faster than the file-based caching done by cache plugins. It has different options for blogs, eCommerce, and portfolio sites (read the descriptions). Remember to clear the cache.
3. Use Latest PHP Versions
Bluehost currently supports up to PHP 8.1, but 8.0 is more stable. Most WordPress users are running outdated PHP versions. As Bluehost releases newer versions, make sure you upgrade.
How To Update PHP Versions On Bluehost
- Login to your Bluehost cPanel.
- Select the MultiPHP Manager.
- Select your PHP version and save changes.
- Check your website for visible errors (you can always change it backfehost activates Cloudflare on all domains by).
4. Take Advantage Of Cloudflare
Pick 1 of the 3:
- Activate Cloudflare in Bluehost – not recommended since you get limited settings.
- Setup Cloudflare manually – gives you more Cloudflare settings (instructions below).
- Cloudflare Enterprise – if you’re willing to pay for FlyingProxy ($10/mo) or move to Rocket.net ($25/mo), this gives you the best results since you get Cloudflare Enterprise features like full page caching, prioritized routing, and WAF. With FlyingProxy, it kind of masks the problem since you’re still on Bluehost, but you’ll still see a big improvement. With Rocket.net, you’re getting better hosting and more Cloudflare Enterprise features compared to FlyingProxy like Argo and image optimization. You hit 2 birds with 1 stone.
If you’re using a third-party service like FlyingProxy or Rocket.net, you’ll set everything up there. If you’re adding Cloudflare manually, follow these steps:
Bluehost activates Cloudflare on all domains by default, but this only gives you access to the basic settings, so you’ll want to disable Cloudflare in Bluehost then set Cloudflare up manually.
Start by disabling Cloudflare in Bluehost. Next, add Cloudflare manually by signing up on their website, adding your website, and changing nameservers. Cloudflare gives you 2 nameservers. Login to your domain registrar and change nameservers to Cloudflare’s (see screenshot below).
Just by changing nameservers, you’re using Cloudflare’s DNS which is one of the fastest DNS providers on dnsperf.com (Bluehost isn’t listed, but it’s safe to assume they’re not faster than Cloudflare). A fast DNS reduces latency which also happens to be part of LCP in core web vitals.
Configuring Cloudflare – see my recommended Cloudflare settings since there are tons of tweaks to make your site faster. Two things you definitely want to do are change your domain from DNS only to “Proxied” in your DNS settings and consider APO for $5/mo which gives you full page caching (one of the main ways to improve global TTFB in KeyCDN). Note: you don’t have to configure Cloudflare’s dashboard if using Cloudflare Enterprise in a third-party service.
- CDN (change your domain from DNS only to “proxied” in your DNS settings)
- TLS (set minimum version to 1.2 and enable 1.3)
- Firewall rules (see common rules)
- Bot protection
- Early hints
- Browser cache TTL (1 year is good for static sites, 1 month for dynamic sites)
- Crawler hints
- Cache reserve
- Cache everything page rule (but I recommend APO or this plugin instead)
- HTTP/3
- 0-RTT connection resumption
- Hotlink protection
- Monitor bandwidth/analytics (more bandwidth offloaded to Cloudflare is better)
5. Invest In A Premium Cache Plugin
I would use FlyingPress.
It does a better job of addressing core web vitals and optimizing for real browsing speed compared to WP Rocket. Free cache plugins don’t do a great job addressing core web vitals. Which cache plugin you use and how you configure the settings has a huge impact on your speed/scores, so make sure to see my cache plugin guides (here are the FlyingPress settings).
WP Rocket | FlyingPress | |
---|---|---|
Remove unused CSS | Inline | Separate file |
Preload critical images | x | By number |
Exclude above the fold images | By URL | By number |
Lazy load background images | Inline | Helper class |
Fetchpriority resource hint | x | ✓ |
Lazy render HTML elements | x | ✓ |
Self-host YouTube placeholder | x | ✓ |
Host fonts locally | x | ✓ |
CDN | StackPath | BunnyCDN |
CDN PoPs | 60 | 114 |
CDN Tbps | 65 | 80 |
CDN geo-replication | x | ✓ |
CDN image optimization | x | ✓ |
CDN image resizing for mobile | x | ✓ |
Documented APO compatibility | x | ✓ |
6. Keep Email + Web Hosting Separate
Email takes up storage files (inodes) which Bluehost has low limits on.
By keeping email/web hosting separate, you’re dedicating more resources to your website. While it means an extra cost since you’ll need a third-party service like Google Workspace, it’s also good because if you eventually decide to switch hosts, you don’t have to move your email.
That’s why most “premium hosts” don’t even offer email hosting.
7. Remove Slow Loading Plugins
Some plugins add extra CSS + JavaScript and load slowly the frontend. Other plugins load slowly in the backend from resource-intensive tasks like scans, collecting stats, or backups.
Find Your Slowest Plugins:
- Query Monitor.
- See my list of common slow plugins.
- Chrome Dev Tools coverage report (I’ll be referencing this a few times).
- Check for plugins adding database bloat in WP-Optimize.
- WP Hive Chrome Extension (when browsing the WP plugin repository).
- Use dependencies in Perfmatters to see which of your plugins use jQuery.
How To Remove Slow Plugins
- Use Gutenberg blocks for tables, galleries, etc.
- Use native comments instead of third-party plugins.
- Use an image CDN for image optimization (i.e Cloudflare).
- Use a firewall and security checklist instead of a security plugin.
- Code your header/footer in CSS (no need to use a plugin for this).
- If you must use a plugin, always test it and avoid jQuery plugins if possible.
8. Remove Database Junk
Don’t use your cache plugin to clean your database.
They usually can’t remove tables left behind by old plugins, take database backups, or keep a certain amount of post revisions (instead of deleting them all).
Instead, install WP-Optimize which lets you do all these (while also removing the same junk cache plugins do). Go through your database tables and look for tables marked as “not installed” or similar. These are left behind by old plugins, but if you don’t plan on using that plugin again, remove the table. Take note of plugins/plugin features adding the most overhead. For example, SEO/security plugins collect lots of data, so try disabling modules you don’t need.
9. Don’t Use Slow Page Builders On Shared Hosting
I have guides on optimizing Elementor or Divi. However, you’re best off avoiding them in the first place since they add CSS/JS to your site (especially if you use extra page builder plugins).
You don’t want your Chrome Dev Tools coverage report to look like this:
If you insist on using a slow page builder, make sure you activate Elementor’s Experiments or Divi’s performance settings, code your header/footer in CSS (so it doesn’t use bloated page builder code) and be responsible with columns, widgets, plugins, and font icons. Also check your page builder and cache plugin’s documentation on lazy loading background images since they’re treated differently. Elementor also has an option to host fonts locally and preload them.
I moved from Elementor to GeneratePress and I’ll never go back (Blocksy, Kadence, and Oxygen are good too).
10. Remove Unused CSS + JavaScript
CSS/JS is a large part of core web vitals, but this is a massive topic. Here are a few quick tips:
- Avoid bloated themes/plugins – use Gutenberg and check your coverage report.
- Remove unused CSS in FlyingPress or Perfmatters – these load used CSS in a separate file which is faster for real world visitors than loading used CSS inline like WP Rocket does.
- Remove CSS/JS on specific pages – use an asset unloading plugin like Perfmatters or Asset CleanUp to disable plugins, CSS, and JS where it doesn’t need to load. For example, only load your social sharing plugin on posts and your contact form on your contact page.
- Host files locally – Google Fonts and Analytics can be hosted locally using plugins like FlyingPress, Perfmatters, Elementor, or Flying Analytics. Both Perfmatters and Flying Analytics also have the option to use a smaller GA tracking code (i.e. analytics-minimal.js).
- Delay JavaScript – for third-party code that can’t be hosted locally, it should be delayed using your cache plugin (if it supports it) or Flying Scripts. You can see my list of common JS files to delay. You can also delay certain plugins loading below the fold (i.e. comments).
- Defer JavaScript – loads JS non render-blocking (via cache plugins or Async JavaScript).
- Use critical CSS – most premium cache plugins support critical CSS. Just make sure you regenerate critical CSS if you make design changes (like your stylesheets or custom CSS).
- Minify CSS/JS – you should usually minify CSS and JavaScript files but not combine them.
11. Preload, Prefetch, Preconnect
Some caching + speed plugins automatically preload critical images (when you enable the setting) and preconnect Google Fonts + CDN URLs. Check your cache plugin’s documentation. You can usually do these in cache plugins, Perfmatters, manually with code, or use Pre* Party.
Preload – instructs browsers to download something immediately. Often used for above the fold images/fonts but can also be done with scripts, styles, and other files. Always test results in a Waterfall chart because preloading too many resources can have a negative impact on speed.
<link rel="preload" href="/image.webp" as="image">
<link rel="preload" href="/font.woff2" as="font" crossorigin>
DNS Prefetch – helps browsers anticipate third-party domains. But since third-party code is often hosted locally or delayed, there’s usually no need to prefetch unless it’s above the fold. For example, a social sharing plugin loading on top of your blog making requests to Facebook.
<link rel="dns-prefetch" href="https://connect.facebook.net">
<link rel="dns-prefetch" href="https://www.googletagservices.com">
Preconnect – usually only needed for CDN URLs and third-party domains. However, there’s no need to do this for Cloudflare (which doesn’t use a CDN URL) or if your fonts are hosted locally.
<link rel="preconnect" href="/assets/vendor/gstatic" crossorigin>
<link rel="preconnect" href="https://cdn.yourdomain.com" crossorigin>
12. Optimize Images
Go through the list of image optimizations (be sure to check the last one which isn’t listed in PageSpeed Insights).
- Properly Size Images – use correct dimensions and avoid uploading huge images. I recommend creating an “image dimension cheat sheet” so you know the dimensions of your blog images, featured images, sidebar images, etc (so you can upload the right sizes).
- Defer Offscreen Images – even if lazy load is on, background images in page builders aren’t lazy loaded by default. You can enable CSS background images in Perfmatters or some cache plugins have a helper class you can add to them (like lazy-bg in FlyingPress). Be sure to disable above fold images from lazy load and preload them as explained earlier.
- Efficiently Encode Images – I suggest compressing images at 85% (used in Lighthouse).
- Serve Images In Next-Gen Formats – usually done with an image CDN (Cloudflare or BunnyCDN), an image optimization plugin like ShortPixel, or WebP Converter For Media.
- Preload Largest Contentful Paint Image – explained earlier, but try preloading other above the fold images too or just use the “preload critical images” setting in FlyingPress.
- Use Explicit Width And Height – most cache plugins have an “add missing image dimensions” setting that adds a width/height to the image’s HTML. Or do this manually.
- Resize Images For Mobile – this can improve your mobile LCP score and is usually done through image CDN (i.e. Cloudflare image resizing) or by using an adaptive images plugin.
13. Optimize Google Fonts
Fonts are usually some of the largest files and can cause layout shifts.
- Use WOFF2.
- Reduce font families, weights, font icons.
- Host fonts locally (using FlyingPress, OMGF, etc).
- Preload fonts mentioned above the fold or in CSS files (test each one).
- Fix any font-related 4xx and 5xx errors in your GTmetrix Waterfall chart.
- Add font-display: swap to your font’s CSS to fix “ensure text remains visible during webfont load” (can be done in Elementor or cache plugins and prevents layout shifts).
- Elementor can host fonts locally, preload them, custom font icons, and load fonts inline.
14. Remove Bloat
By default, WordPress consumes resources with autosaves, post revisions, pingbacks, trackbacks, heartbeat API, jQuery migrate, and many other things you probably don’t need.
Plugins To Remove Bloat:
15. Leave Bluehost
Most hosting recommendations are garbage, but it’s the #1 speed factor and you can use KeyCDN to test your global TTFB (which is also 40% of LCP). I suggest joining the WP Speed Matters Facebook Group to get unbiased hosting feedback. The 3 hosts below are solid and either use LiteSpeed servers, Cloudflare Enterprise, cloud hosting, and all 3 use NVMe/Redis. These are much faster than “mainstream hosts” (Bluehost, SiteGround, Hostinger) who use slower SSDs, Apache/Nginx, and no Cloudflare Enterprise or Redis (and if they do, it costs $$$).
The aff links below are how I make a living and I appreciate you using them. Thanks :)
- NameHero – all plans use LiteSpeed which is not only faster than Apache/Nginx, but it can handle 2x the capacity of Apache. This also means you’ll use LiteSpeed Cache + QUIC.cloud CDN (arguably fastest setup on a budget). NameHero has more CPU/RAM than similar LiteSpeed hosts with cPanel + email hosting. I usually recommend the Turbo Cloud plan with 3 cores + 3GB RAM + NVMe for $7.58/mo. The main con is their data centers are only in the US + NL. If these aren’t close to your visitors, make sure to use QUIC.cloud (which has HTML caching) or look into ChemiCloud / Scala. All 3 use LiteSpeed and have at least a 4.7/5 TrustPilot rating.
- Cloudways Vultr High Frequency – while NameHero is shared, Vultr HF is cloud hosting with NVMe and 44 data centers. I moved from SiteGround and load times + hosting costs both cut in half while eliminating CPU issues. People are scared it’s “techie” but launching a server and connecting your domain can literally take 5 minutes (plus they offer a free migration). Redis Object Cache Pro is free and the Cloudflare Enterprise add-on is $5/mo which adds prioritized routing, more PoPs, image optimization, WAF, Argo, and load balancing. Cons are extra costs for email hosting (use Google Workspace), cache plugin (use FlyingPress), and Cloudflare Enterprise doesn’t have full page caching (coming soon). It’s monthly pricing with 3-day trials. Normally starts at $13/mo but here’s a coupon for 30% off 3 months.
- Rocket.net – a step up from Cloudways in terms of speed, support, and easy of use. Unlike Cloudways, their Cloudflare Enterprise is free with full page caching and no configuration needed (the CEO Ben Gabler was previously Chief Product Officer at StackPath, so won’t get a better Cloudflare Enterprise). You get 32 cores + 128GB RAM, NVMe, Redis, and Brotli. There are no PHP worker limits since only about 10% of traffic hits the origin server and they allow 10x more monthly visits than Kinsta. However, a con is the low bandwidth compared to Cloudways. Since hosting/CDNs are a big part of TTFB/LCP, you’re hitting 2 birds with 1 stone. While still small, they’re getting popular and start at $25/mo (yearly) or try them for $1. If you have a larger/WooCommerce site, I suggest having a conversation with Ben.
Frequently Asked Questions
Is Bluehost slow?
Bluehost uses Apache servers with slower SSDs and is infamous for overcrowding servers which can results in a slower website and TTFB. Yes, Bluehost is slow compared to many other hosts especially if you're on their cheap shared hosting which lacks server resources.
Why is my website slow on Bluehost?
You may be running outdated PHP versions, slow plugins, or have unoptimized images, fonts, and third-party code. While it's obviously best to optimize these, your website could very well be slow because of Bluehost's servers.
Why is my server response time slow on Bluehost?
Servers are controlled by your hosting, so this would be a problem directly related Bluehost. You may need to upgrade plans to include more server resources or move away.
Is Bluehost's DNS slow?
Bluehost doesn't have the fastest DNS and you're better off switching it to Cloudflare's free DNS which has reliable performance and uptimes which you can see on dnsperf.com.
Why is my Bluehost email slow?
When you combine web/email hosting together, the server is responsible for both which can slow these down. This is why using a third-party email hosting service is a good idea.
As always, drop me a line if you need help.
Cheers,
Tom