You've built your WooCommerce store, added products, configured payment gateways, and tweaked the theme. Then you load the shop page and wait. And wait. A slow store bleeds conversions before you even launch. In support tickets I handled, the usual culprit was a combination of inadequate hosting, unoptimized images, and plugin bloat—rarely just one thing.
This checklist walks you through twelve concrete steps to audit and fix performance before going live. Each item is something you can verify, measure, or toggle right now.
1. Confirm your hosting resources match your catalog size
Shared hosting with 512 MB PHP memory and one CPU core will buckle under a catalog of five hundred products and a dozen plugins. Check your current limits first.
Log into cPanel or SSH and review your PHP configuration:
php -i | grep memory_limit
php -i | grep max_execution_time
For WooCommerce, aim for at least 256 MB memory_limit (512 MB is safer for larger catalogs), max_execution_time of 300 seconds, and post_max_size / upload_max_filesize of at least 64 MB if you import products via CSV.
If you're on shared hosting, monitor your CPU and I/O usage in cPanel's resource usage panel. Consistent spikes to the limit mean you need a VPS or managed WordPress host. A single-core shared environment cannot handle WooCommerce admin operations and front-end traffic simultaneously without queuing requests.
2. Install a proper caching plugin and configure it
WooCommerce runs dozens of database queries per page load. Without caching, every visitor regenerates the same HTML. Install WP Rocket, LiteSpeed Cache (if your host runs LiteSpeed), or W3 Total Cache.
Enable page caching and object caching (Redis or Memcached if your host supports it). Exclude cart, checkout, and my-account pages from page caching—those must stay dynamic. Most caching plugins have WooCommerce presets; use them.
Test by loading your shop page twice. The second load should be noticeably faster. Check your HTML source for cache headers or a comment tag indicating the page was served from cache.
3. Audit and prune your plugin list
Every active plugin adds code to every page load, even if it only runs on one admin screen. Count your plugins. If you have more than fifteen active, you probably have redundancy or bloat.
Deactivate plugins one by one and test shop page load time after each. Use Query Monitor (a free plugin) to see which plugins fire the most queries and take the most execution time. Sort by time descending.
Common offenders: social sharing plugins that load third-party scripts, live chat widgets, analytics plugins that run synchronously, and page builders you're not actively using on product pages. Remove anything you don't need daily.
4. Switch to a lightweight theme or child theme
Many multipurpose themes ship with sliders, parallax effects, and dozens of font files you never use. They slow the shop page regardless of your caching setup.
Test with Storefront (WooCommerce's official free theme) or Astra. If the shop page loads faster, your theme is the bottleneck. Either switch or hire a developer to strip out unused features and styles.
Check your theme's JavaScript. Open DevTools Network tab, filter by JS, and reload the shop page. If you see more than five JS files larger than 100 KB each, and half of them are theme-related, you have bloat. Minify and concatenate where possible.
5. Optimize every product image before upload
Unoptimized images are the easiest fix and the most commonly ignored. A 3000×3000 pixel PNG exported from Photoshop at full quality can be 8 MB. Your product thumbnail displays at 300×300.
Resize images to the exact dimensions your theme uses before uploading. Most themes use 800×800 for single product images and 300×300 for thumbnails. Export as JPEG at 80-85% quality or use WebP if your host supports it.
Install ShortPixel, Imagify, or EWWW Image Optimizer to compress existing images in bulk. Set the plugin to auto-compress new uploads. After optimization, check a few product pages—file sizes should drop by sixty to eighty percent with no visible quality loss.
6. Disable unused WooCommerce features
WooCommerce ships with features most stores never use. Each adds database tables, queries, and admin UI weight.
Go to WooCommerce → Settings → Advanced and check what's enabled. If you don't use the REST API for integrations, disable it. If you don't need the legacy REST API, turn that off too. Disable cart fragments if you don't display a live-updating mini cart in the header (requires custom code or a plugin).
In Settings → Products, disable reviews if you don't use them. Disable related products if you prefer manual upsells. Every feature you turn off means fewer queries per page.
7. Check your database size and clean up transients
WooCommerce and plugins store temporary data in the wp_options table as transients. Over time, expired transients pile up and slow queries. Check your database size in phpMyAdmin or via SSH:
mysql -u username -p -e "SELECT table_schema AS 'Database', ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)' FROM information_schema.tables WHERE table_schema = 'your_database_name' GROUP BY table_schema;"
If wp_options is over 10 MB, you likely have transient bloat. Install WP-Optimize or Advanced Database Cleaner, run a transient cleanup, then optimize all tables. Run this monthly.
Also delete old order data if you migrated from a test environment or imported dummy orders. Go to WooCommerce → Status → Tools and use the built-in cleanup tools.
8. Implement a CDN for static assets
Even with caching, every image, CSS file, and JavaScript file loads from your origin server. A CDN caches those assets on edge servers closer to your visitors.
Cloudflare's free tier works well for WooCommerce. Point your domain's DNS to Cloudflare, enable Auto Minify for CSS and JS, and turn on Brotli compression. Set Browser Cache TTL to one month.
If you use a managed WordPress host, check if they include a CDN (many do). Otherwise, BunnyCDN and KeyCDN are affordable pay-as-you-go options. After setup, check DevTools Network tab—static assets should show the CDN's domain or return cf-cache-status: HIT headers.
9. Lazy-load images below the fold
Your shop page lists dozens of products. Browsers load all images by default, even those the visitor never scrolls to. Lazy-loading defers off-screen images until the user scrolls near them.
Most caching plugins include lazy-load. Enable it in WP Rocket, LiteSpeed Cache, or use the free Lazy Load by WP Rocket plugin. Exclude your logo and any above-the-fold hero image from lazy-load rules.
Test by opening a shop page with the Network tab open, then scroll slowly. You should see additional image requests fire as you scroll. Initial page weight should drop significantly.
10. Verify your host runs PHP 8.1 or newer
PHP 7.4 reached end-of-life years ago. PHP 8.0 and 8.1 deliver measurable speed improvements for WooCommerce—sometimes twenty to thirty percent faster execution time.
Check your current version:
php -v
Or create a file called phpinfo.php in your site root:
<?php phpinfo(); ?>
Load yoursite.com/phpinfo.php in a browser. If you're on PHP 7.4 or older, upgrade via cPanel MultiPHP Manager or contact your host. Test your theme and plugins on a staging site first—most are compatible, but always verify.
After upgrading, delete the phpinfo.php file.
11. Preload critical fonts and defer non-critical scripts
Custom fonts and third-party scripts (analytics, pixel tracking, chat widgets) block page rendering if loaded synchronously. Fonts should be preloaded; scripts should be deferred or loaded async.
Add font preload links to your theme's header.php or use a plugin like Perfmatters:
<link rel="preload" href="/wp-content/themes/yourtheme/fonts/roboto.woff2" as="font" type="font/woff2" crossorigin>
Defer non-critical JavaScript by adding defer to script tags or using a plugin. WP Rocket and Perfmatters both have one-click defer options. Exclude jQuery and any scripts required for above-the-fold interactivity.
After applying these changes, run a Lighthouse audit in Chrome DevTools. Your First Contentful Paint and Largest Contentful Paint scores should improve.
12. Test under load with real product data
Your site might feel fast with ten products and no traffic. Add five hundred products, a few live payment gateways, and a dozen concurrent users, and performance can collapse.
Populate your staging site with realistic product data—images, variations, descriptions. Use a tool like K6, Apache Bench, or loader.io to simulate concurrent users browsing the shop and adding items to cart.
Example with Apache Bench (hitting the shop page with fifty concurrent requests):
ab -n 500 -c 50 https://yoursite.com/shop/
Watch for failed requests or response times over two seconds. If performance degrades, revisit hosting resources, caching config, and database query counts. This test reveals bottlenecks that don't appear in single-user testing.
What happens if you skip these steps?
Launching without this checklist means you'll discover performance issues under real traffic, often after customers have already abandoned slow-loading pages. A two-second delay in load time can cut conversions significantly. Fixing performance post-launch is harder because you're troubleshooting live traffic, possibly during peak sales periods.
You don't need to do all twelve in one session. Tackle hosting resources and caching first—those deliver the biggest gains. Then work through images, plugins, and database cleanup. Test after each change so you know what moved the needle.
Does object caching require Redis or Memcached?
No, but Redis and Memcached are faster than transient-based object caching. Most managed WordPress hosts offer Redis. On a VPS, install the Redis server package and the PHP Redis extension, then configure your caching plugin to use Redis. You'll see query time drop noticeably on product and archive pages.
Should I disable WooCommerce admin AJAX for better performance?
Disabling admin AJAX (Heartbeat API) can reduce server load, but it may break real-time order notifications and stock updates in the admin. Test on staging first. If you don't need live admin updates, disabling Heartbeat or extending its interval to sixty seconds can help on constrained hosting.
Can I use a free CDN for WooCommerce?
Yes. Cloudflare's free tier works well for caching static assets and offers DDoS protection. Set Page Rules to cache everything on /wp-content/ and /wp-includes/ paths. Avoid caching dynamic pages like cart and checkout—those must remain dynamic or sessions will break.
How often should I run database optimization?
Once a month is usually enough unless you have very high order volume. Schedule it during off-peak hours since table optimization locks tables briefly. Most optimization plugins let you schedule automated runs.
What's the minimum recommended hosting for WooCommerce?
A VPS with at least two CPU cores, 2 GB RAM, SSD storage, and PHP 8.1 or newer. Shared hosting can work for small catalogs under one hundred products and low traffic, but you'll hit resource limits quickly as you scale. Managed WordPress hosting from providers like Kinsta, Cloudways, or WP Engine is often worth the cost if you want performance handled for you.
Start with hosting and caching
If you only fix two things before launch, make them hosting resources and caching. Everything else is incremental. A store on inadequate hosting with no caching will frustrate you and your customers no matter how much you optimize images or prune plugins. Work through the rest of the checklist methodically, test after each change, and you'll launch with a store that loads fast and stays fast under real traffic.
