Slow load times or poor core web vitals on SiteGround?
My point is, don’t only stick to SiteGround’s products just because you use them for hosting. Just by using Perfmatters with SiteGround Optimizer, you can see major performance gains.
Of course, there are other ways to speed up your SiteGround website: upgrading PHP versions, replacing wp-cron with a real cron job, and using SiteGround’s security plugin can reduce CPU usage and improve speed. If your site isn’t fast by the end of this tutorial, leave me a comment.
- Activate SiteGround’s caching layers
- Configure SiteGround Optimizer
- Use Perfmatters to address lacking features
- Remove unused CSS
- Host fonts locally and preload them
- Optimize above the fold images for LCP
- Remove unused database tables
- Upgrade to PHP 8
- Rethink SiteGround’s CDN
- Configure SiteGround Security
- Replace wp-cron with a real cron job
- Reduce CPU usage
- Avoid SiteGround’s cloud hosting
- Leave SiteGround
1. Activate SiteGround’s Caching Layers
SiteGround does do a good job with caching. In SiteGround Optimizer, enable dynamic caching (called NGINX direct delivery in Site Tools), file-based caching, and memcached. You’ll need to login to your Site Tools account → Speed → Caching and activate these caching layers here too.
Under file-based caching, I would preheat cache for 1 week on most sites. It’s similar to WP Rocket’s preloading, so only using 1 plugin for this. Most sites shouldn’t cache logged-in users.
You can use SiteGround Optimizer for Cloudflare’s full page caching if you setup Cloudflare through Site Tools, but your site has to use WWW in order to see this in SiteGround Optimizer.
2. Configure SiteGround Optimizer
You basically have 4 options:
- Only use SiteGround Optimizer (but lacks features needed for core web vitals).
- Use SiteGround Optimizer with several free optimization plugins (can get messy).
- Use SiteGround Optimizer with Perfmatters (make sure to avoid duplicate functionality).
- Use SiteGround Optimizer only for caching, then FlyingPress or WP Rocket for web vitals.
If it were my site (although I wouldn’t be on SiteGround at all), I would use SiteGround Optimizer for caching only and FlyingPress for everything else. It’s totally your call. Depending on your setup, you can see my configuration guides for FlyingPress, WP Rocket, or Perfmatters. If you’re using another cache plugin, make sure to disable caching in FlyingPress or WP Rocket.
I also have a detailed guide on SiteGround Optimizer, but I’ll walk you through some of the most important settings here.
|SG Optimizer||WP Rocket||FlyingPress|
|Remove unused CSS||x||Inline||Separate file|
|Preload critical images||x||x||By number|
|Exclude above the fold images||By class||By URL||By number|
|Lazy load background images||x||Inline||Helper class|
|Fetchpriority resource hint||x||x||✓|
|Lazy render HTML elements||x||x||✓|
|Add missing image dimensions||x||✓||✓|
|YouTube iframe preview image||x||✓||✓|
|Self-host YouTube placeholder||x||x||✓|
|Host fonts locally||x||x||✓|
|CDN (beyond Cloudflare)||SiteGround CDN||StackPath||BunnyCDN|
|CDN image optimization||✓||x||✓|
|CDN image resizing for mobile||x||x||✓|
|Documented APO compatibility||x||x||✓|
Caching – other than activating caching layers, you’ll want to enable automatic purge and purge the WordPress API cache. That should be the only thing to do unless you need to exclude certain pages from the cache or clear it manually, but you can always check the documentation.
CSS – minify CSS, JS, and HTML should all be enabled. If one of these breaks your site, find problematic file(s) and exclude it from minification. Combining is generally not recommended especially on large sites. But feel free to test results with combining + preload combined CSS on.
Media – compress images (Lighthouse tests them at 85% so that’s a good number), and serve images in WebP format. Be sure to check your “exclude media types from lazy load” settings since iframes and other media types are excluded by default when they usually should be lazy loaded. SiteGround Optimizer lacks many features here: it can’t preload above the fold images for better LCP, add missing image dimensions for better CLS, or exclude images from lazy load based on the number of images usually shows above the fold (like Perfmatters and FlyingPress do). There’s also no option to serve small images to mobile devices which can also improve LCP. Try using their skip-lazy helper class to exclude background images, resize images for mobile with an adaptive images plugin (or image CDN), and use WP YouTube Lyte if you embed videos.
3. Use Perfmatters To Address Lacking Features
Perfmatters has many optimizations SiteGround Optimizer doesn’t:
|Remove unused CSS||x||✓|
|Preload critical images||x||By number|
|Exclude images from lazy load||By class||By number|
|Lazy load background images||x||CSS backgrounds|
|Add missing image dimensions||x||✓|
|YouTube iframe preview image||x||✓|
|Host fonts locally||x||✓|
|Host Google Analytics locally||x||✓|
|Smaller Google Analytics code||x||✓|
|Prevent DoubleClick request||x||✓|
|Preload any resource||x||✓|
|Limit post revisions||x||✓|
|Increase autosave interval||x||✓|
|Move wp-login page||x||✓|
Make sure you configure the settings for your own site (you can use these as baseline).
Steps 4-7 can all be done in Perfmatters (or FlyingPress), but I’ll list free alternative if you’re not using either of these.
View your third-party code report in PSI or use the list of common JS files to delay below (Perfmatters also has documentation on this). You can usually delay Google Analytics, Tag Manager, AdSense, FB Pixel, and even plugins if they load below the fold (i.e. comment plugins).
Common JS files to delay:
ga( ' ga(' google-analytics.com/analytics.js analytics.js gtagv4.js analytics-minimal.js /gtm.js /gtag/js gtag( /gtm- adsbygoogle.js fbevents.js fbq( /busting/facebook-tracking/ wp-content/themes/script-name wp-content/plugins/plugin-name
Add the files to Flying Scripts or Perfmatters while setting a timeout period. 5s is a starting point, but you can increase this (i.e. 7s) if you’re not seeing good results in speed testing tools.
5. Remove Unused CSS
The 1-click option to remove unused CSS in Perfmatters is the easiest way to do this and you’ll want to choose the file method. This loads used CSS in a separate file so it can be cached and doesn’t increase HTML size which is faster for real visitors compared to loading used CSS inline.
Not using Perfmatters? You can use Debloat, but it’s for advanced users. FlyingPress removes unused CSS using the separate file method while WP Rocket only uses the slower inline method.
Another way to remove unused CSS (or JS) is by disabling plugins in certain areas of your website. Contact forms, social sharing, and WooCommerce plugins are known for loading files across your entire website. In the example below, I disabled a social sharing plugin everywhere but posts. You can use the script manager in Perfmatters or Asset CleanUp. They both have a “test mode” in the settings which lets test this since disabling certain files may break your site.
You can enable dependencies in the Perfmatters script manager settings to see plugins using jQuery (known for slowing down websites). Try avoiding jQuery-dependent plugins if possible.
6. Host Fonts Locally And Preload Them
SiteGround Optimizer’s web font optimization setting preconnects third-party fonts.
The problem is locally hosted fonts are faster since they can be preloaded and don’t create third-party requests from fonts.gstatic.com. There are many ways to do it: Elementor (shown below), OMGF, Perfmatters, and FlyingPress. If you need to add preload font files manually, be sure to test each one and only preload fonts shown above the fold or mentioned in CSS files.
7. Optimize Above The Fold Images For LCP
A big part of LCP is optimizing above the fold images.
You want to exclude these images from lazy load and preload them. A big problem is that your largest LCP image is usually unique to the page, like the image at the top of this post (image #3).
Instead of manually excluding/preloading every single above the fold image or doing it by CSS classes like you have to in SiteGround Optimizer, both Perfmatters and FlyingPress let you set the number of images usually shown above the fold (in my case, it’s 3). This excludes the 3 top images from lazy load while also preloading them. Much easier than SiteGround Optimizer and WP Rocket. There’s no free plugin that does this that I’m aware of, but you can use the Preload Featured Image plugin for featured images then exclude/preload your logo and sidebar image.
These are treated differently and aren’t lazy loaded since they’re found in CSS. Perfmatters can lazy load CSS background images, otherwise you’ll likely need to use a helper class like “lazy-bg” in FlyingPress, the solution from Optimole, or move them to inline HTML if using WP Rocket.
8. Remove Unused Database Tables
What’s wrong with SiteGround Optimizer’s database cleanups? 3 things:
- It doesn’t remove tables left behind by old plugins.
- It doesn’t take database backups if something goes wrong.
- It doesn’t let you keep any post revisions (only deletes them all).
That’s why I’d use WP-Optimize for database cleanups which does everything in SiteGround Optimizer (plus the items listed above). You can connect it to UpDraftPlus so it takes a backup before every cleanup, remove the same junk listed in SiteGround Optimizer, and keep a certain amount of post revisions instead of deleting them all (I keep about 10 so I have some backups).
It also lets you go through your database tables and remove tables left behind by old plugins which are marked as “not installed” or “inactive.” They’re probably plugins that stored data for future use, but if you don’t plan on using it again, remove it. Also take note of any plugins (or plugin modules) adding lots of overhead and consider disabling their plugin features if they do. For example, some Rank Math modules and Wordfence add a lot of overhead to your database.
9. Upgrade To PHP 8
Login to Site Tools → Devs → PHP Manager, then upgrade to at least PHP 8.
Even though SiteGround says their Ultrafast PHP can improve TTFB by up to 50%, it’s a bold claim and you probably won’t get anywhere near that type of result. Regardless, it’s always a good idea to keep your PHP version updated as long as your theme and plugins are compatible.
10. Rethink SiteGround’s CDN
The main drawback is it only uses 14 PoPs, 10GB bandwidth, and lacks image optimizations found in other CDNs. And like I mentioned earlier, SiteGround’s DNS has shown to be unreliable.
There’s also BunnyCDN, Cloudflare, and FlyingProxy. For best performance, I would go with FlyingProxy for $10/mo since it includes several Cloudflare Enterprise features which should give you the fastest results and TTFB. If you’re on a budget, you can stick with Cloudflare free. Setting up Cloudflare in SiteGround requires you to use WWW in your domain which gives you access to Cloudflare’s full page caching in SiteGround Optimizer. If you don’t use WWW, you’ll need to setup Cloudflare (by changing nameservers). This gives you access to Cloudflare’s full dashboard where you should take advantage of the different features and Cloudflare settings.
|Feature||SiteGround CDN (Free)||RocketCDN||FlyingCDN|
|Smaller mobile images||x||x||✓|
Full page caching – this caches static content (i.e. HTML) and can improve TTFB in multiple global locations when testing your website in KeyCDN. There are many services that offer this: SiteGround Optimizer (if you setup Cloudflare in SiteGround), Cloudflare APO, and FlyingProxy.
11. Configure SiteGround Security
Blocking unwanted requests lightens the load on the server too (that’s why using a firewall like Cloudflare’s WAF is so important).
SiteGround’s security plugin can disable XML-RPC, move your wp-login page, limit login attempts, and has several other security features. It has solid reviews and is simple to set up. Just make sure to specify a custom login URL and use two-factor authentication in the settings.
12. Replace WP-Cron With A Real Cron Job
SiteGround has a tutorial on this, but it’s easy. Open your wp-config.php file and disable WordPress cron by adding the code before the line: /* That’s all, stop editing! Happy blogging. */
Login to Site Tools → Devs → Cron Jobs. Create a cron job using the code to execute twice per hour. As SiteGround says, “replace /home/customer/www/yourdomain.com/public_html with the actual path to your WordPress application’s core file.” This can also help reduce CPU usage.
cd /home/customer/www/yourdomain.com/public_html; wp cron event run --due-now >/dev/null 2>&1
13. Reduce CPU Usage
SiteGround’s CPU limits are a mess. These are found on SiteGround’s features page. If you exceed them, SiteGround will send you an email warning and can take down your website. Coming close to CPU limits can also lead to a slower website since your server isn’t relaxed.
Plenty of CPU limit complaints are found in the WP Speed Matters Facebook Group (which is one of the few WordPress-related Facebook Groups not moderated by SiteGround’s brand ambassadors, affiliates, or community manager). I had them myself which is ultimately why I left. And I wrote what’s arguably the most used tutorial on reducing CPU usage in WordPress.
Many ways to reduce CPU usage are mentioned in this guide: caching, disabling heartbeat, offloading bandwidth to CDNs, using a real cron job, higher PHP versions, and SiteGround’s security plugin. If you still find yourself struggling, try disabling “preheat cache” in SiteGround Optimizer’s file-based caching. You should also block bad bots (i.e. using Cloudflare bot fight mode or Blackhole For Bad Bots), use a firewall, and remove bloat using plugins like Unbloater.
14. Avoid SiteGround’s Cloud Hosting
Most people upgrade from GoGeek to SiteGround’s cloud hosting in hopes of a faster website or to fix CPU limit issues. Do not do this.
I already did it and it was a huge waste of time/money. I had to add more CPU/RAM several times before fixing CPU limits, then pay about double their entry-level cloud hosting plan to make my website decently fast. Again, you can search the WP Speed Matters Facebook Group.
15. Leave SiteGround
As you can probably tell, I’m not a fan of SiteGround. I actually think they’re awful.
It’s shared hosting with some of the worst CPU limits, bad cache plugin/CDN, and expensive renewals. Support is getting worse, plus they censor Facebook Groups and try to sue people.
Sorry, not for me!
Here are a few better options (aff links):
- Rocket.net – look at their specs and have a conversation with Ben Gabler (that’s all it took for me). They average a <100ms global TTFB which you can measure in KeyCDN. Their free Cloudflare Enterprise is superior than Cloudways/Kinsta with full page caching, smart purging, and built their data centers in the same ones as Cloudflare (Ben was StackPath’s Chief Product Officer so that makes sense). Just to give you an idea, their plans start at $25/mo with 32 CPU cores + 128GB RAM + NVMe SSDs + Redis. No PHP worker limits because only about 10% of traffic actually hits your origin. Everything is free (no paid add-ons) and their powerful stack makes scaling affordable with plenty of resources. I asked Ben to create a coupon OMM1 to make your first month $1. Compared to Kinsta, they use about 16x more RAM, 32x more cores on staging sites, and up to 25x more monthly visits. Top performer on wphostingbenchmarks.com with a 4.9/5 TrustPilot rating too? Take 5 minutes to compare specs and see for yourself or see my Rocket.net review.
Vultr High Frequency – I was previously using Cloudways Vultr HF and this was a big upgrade from SiteGround’s cloud hosting. Also uses NVMe + Redis Object Cache Pro but Cloudflare Enterprise and their Breeze plugin need some work. Can also get expensive between the CPU/RAM, add-ons, email hosting, etc. That said, here’s 30% off 3 months.
LiteSpeed – NameHero if your visitors are in the US/EU or Scala / ChemiCloud if they’re somewhere else. All have great TrustPilot ratings and include more CPU/RAM than similar hosts like Hostinger or A2, for example, if you view NameHero’s specs page. LiteSpeed is not only faster than Apache/NGINX but can handle more concurrent connections which means less chance of CPU limit issues. Plus, the LiteSpeed Cache + QUIC combination is probably the fastest/cheapest setups you’ll find for shared hosting.
Why is my website slow on SiteGround?
A slow website on SiteGround may be from SiteGround Optimizer doing a poor job addressing core web vitals because SiteGround's CDN only uses 14 PoPs. They also have a history of a slow TTFB.
Why is SiteGround's TTFB slow?
SiteGround uses a balanced Google Cloud machine family (N2) which is slower than compute-optimized families (like C2). It's also shared hosting with limited resources.
Feel free to leave a comment if you have questions. Hope this helped!