# Why Is My WooCommerce Checkout So Slow? (12 Tests to Run Now)
Every second of checkout delay = 7% conversion drop. This is revenue-bleeding money.
If you’ve noticed your WooCommerce checkout taking forever—or customers complaining about timeouts—you’re not alone. I’ve diagnosed hundreds of slow checkout issues at Rocket.net, and the patterns are remarkably consistent.
By the end of this guide, you’ll know **exactly** why your checkout is crawling and whether it’s a 5-minute fix or a hosting infrastructure problem.
—
## The Checkout Performance Reality Check
Most WooCommerce slowdowns aren’t plugin conflicts. They’re **infrastructure ceilings** catching up with your growth.
Here’s what I see daily: A store growing from 10 to 100 orders/day suddenly hits a wall. The checkout that felt “a bit slow” becomes unusable. The owner adds caching plugins (which don’t help). They optimize images (which doesn’t help). They upgrade their theme (nope).
**The real problem:** PHP worker limits, database bottlenecks, or hosting resource constraints. Things caching plugins can’t touch.
—
## The PHP Worker Bottleneck (Main Culprit)
Think of PHP workers as checkout lane attendants. Each customer (checkout process) needs an attendant. When all attendants are busy, new customers wait.
**The brutal math:**
– Shared hosting: 2-4 PHP workers
– Standard entry-level managed: 4-6 workers
– High-performance hosts: 10+ workers
**Why WooCommerce eats 4-10x more workers than blog posts:**
– Every checkout step = PHP process
– Payment gateway processing = PHP process
– Order creation = PHP process
– Stock updates = PHP process
– Email sending = PHP process
**At Rocket.net,** we start WooCommerce stores with 10 PHP workers. On shared hosting with 2 workers? Three concurrent checkouts = queue forming.
### How to Check Your PHP Worker Limits
**Option 1: Ask your host directly** (fastest)
“What’s my PHP worker limit for WooCommerce checkout processes?”
**Option 2: cPanel / control panel**
Look for “Resource Usage” or “PHP Workers” metrics.
**Option 3: Test the hard way**
Open three incognito windows. Start checkout in each simultaneously. If the third hangs—you found your limit.
—
## Database Lock Contention: The Hidden Killer
Here’s something most “speed optimization” articles miss: WooCommerce creates database writes on **every action.**
– Add to cart = write
– Update cart = write
– Checkout start = write
– Order complete = multiple writes
– Stock reduction = write
When two customers check out simultaneously, MySQL locks those tables. Customer A’s order locks the stock table. Customer B’s checkout waits. Add 5-10 concurrent customers and you’ve got a traffic jam.
**Quick check:** Install [Query Monitor](https://wordpress.org/plugins/query-monitor/) and load your checkout page. Sort queries by time. Anything over 100ms is suspicious. Multiple “UPDATE” queries in sequence? That’s your bottleneck.
—
## 12-Point Diagnostic Checklist
Run through these in order. Each takes 2-5 minutes.
### Immediate Checks (2 Minutes)
**1. Test in incognito mode**
Caches, logged-in states, and browser extensions can mask problems. Always test fresh.
**2. Check cart fragments AJAX calls**
Open DevTools → Network → filter “admin-ajax”. Those little heartbeats (cart fragments) fire on every page load. WooCommerce default: every page, even when not on cart.
**3. Disable payment gateways one-by-one**
Go to WooCommerce → Settings → Payments. Disable all but one. Test checkout. Repeat. Some gateways add 2-3 seconds of API latency.
**4. Review recent plugin updates**
Did checkout get slow after a specific update? Plugins → recently updated. Roll back the suspect.
### Infrastructure Checks (5 Minutes)
**5. Verify PHP worker limits**
See the section above. If you’re on 2-4 workers, that’s your problem.
**6. Check object cache status**
Install Query Monitor. Look for “Object Cache” panel. If it shows “External object cache: No”—you’re missing a massive speed boost.
**7. Database bloat scan**
Large `wp_woocommerce_sessions` table? That’s session data piling up. Should be cleaned automatically, but often isn’t.
**8. Look for slow queries in Query Monitor**
Any database query taking >200ms during checkout is a problem. The culprits are usually:
– Third-party plugins querying order data
– Mega menus checking product stock
– Related products queries
**9. PHP-FPM pool status**
Technical check: If you have SSH access, `systemctl status php-fpm`. Look for “max children reached” errors.
**10. MySQL slow query log**
Ask your host if slow query logging is enabled. Common slow queries in WooCommerce:
– `SELECT * FROM wp_postmeta WHERE meta_key = ‘_sku’` (no index)
– Complex JOINs from custom reporting plugins
**11. Page caching vs. dynamic checkout conflict**
**Never** cache checkout pages. Ever. It breaks dynamic pricing, stock checks, shipping calculations. If your plugin is “optimizing” checkout—disable it.
**12. CDN misconfiguration**
Cloudflare caching checkout = broken. Check Page Rules. Excluded `/checkout/`, `/cart/`, `/my-account/`? If not, that’s your problem.
—
## The Fix Hierarchy (Least to Most Invasive)
### Level 1: 5-Minute Wins
**Disable AJAX cart fragments on non-cart pages**
Add this to your `functions.php` or a code snippet plugin:
“`php
add_action( ‘wp_enqueue_scripts’, ‘disable_cart_fragments’, 11 );
function disable_cart_fragments() {
if (!is_cart() && !is_checkout()) {
wp_dequeue_script(‘wc-cart-fragments’);
}
}
“`
This stops cart updates from firing on every page. Only loads on cart/checkout.
**Update to PHP 8.2+**
– 20-30% faster execution
– Better memory handling
– WooCommerce officially supports it
**Enable object caching**
If your host supports Redis/Memcached:
1. wp-config.php: `define(‘WP_CACHE’, true);`
2. Install object cache drop-in (or ask host)
3. Verify in Query Monitor
**Optimize WooCommerce settings**
– WooCommerce → Settings → General → Default customer address: “No location by default” (stops geolocation overhead)
– Disable analytics you don’t use
– Limit countries you ship to
### Level 2: Plugin & Theme
**Checkout page builder bloat**
Elementor/Divi checkout pages add 0.5-2 seconds. They’re beautiful—but slow. If your cart is already slow, this makes it worse.
**Quick test:** Switch to a default WooCommerce checkout (Storefront theme). Speed improved? That’s your culprit.
**Payment gateway optimization**
– Stripe loads fast (their JS is optimized)
– PayPal Standard redirects (adds seconds)
– Custom gateways often slowest
**Cart plugin conflicts**
Essential Grid, WooCommerce Product Table, any cart modification plugin—test disabling each.
### Level 3: Hosting Infrastructure
**When to know it’s a server issue, not a WordPress issue:**
– Consistent 503 errors during checkout
– Checkout works fast at 2am, slow at 2pm (resource contention)
– Multiple sites on same host = same problem
– You’ve done all Level 1-2 fixes, still >3 second checkout
**The hard truth:** If you’re on shared hosting with 2-4 PHP workers and WooCommerce, you’re fighting physics. No plugin fixes worker limits.
—
## When It’s Time for Better Hosting
**Full disclosure: I work at Rocket.net.** Here’s how this plays out in practice:
**At Rocket, WooCommerce stores typically see:**
– 10 PHP workers minimum
– Redis object cache included (no configuration)
– MySQL optimized for WooCommerce patterns
– Cloudflare Enterprise included (cart/checkout properly excluded from cache)
**What this means:** Checkout processes that were queuing up now run concurrently. Database writes that were locking now flow. The “random” timeouts stop.
**That said:** If your checkout slowness is plugin bloat, no host will fix it. Run the Level 1-2 diagnostics above first. 60% of WooCommerce slowdowns are fixable with configuration changes, not moving hosts.
**Alternatives I recommend when Rocket.net isn’t the right fit:**
– **Cloudways (Vultr HF):** Scalable workers from $13/mo. More technical setup, but powerful.
– **Kinsta:** Excellent WordPress hosting, Google Cloud platform. $35/mo entry.
– **Nexcess:** WooCommerce-specific plans with auto-scaling PHP workers.
—
## FAQ: WooCommerce Checkout Speed
**Q: Will a caching plugin fix my slow checkout?**
No. Checkout pages are dynamic (user-specific carts, pricing, shipping). Page caching breaks checkout entirely. You need **object caching** (Redis/Memcached) — not page caching.
**Q: Can too many plugins slow checkout?**
Yes, but plugin *quality* matters more than quantity. 50 well-coded plugins beats 10 poorly coded ones. Check Query Monitor for slow hooks firing on checkout.
**Q: Should I use a separate checkout page plugin?**
Elementor/Builder checkout pages add 0.5-2 seconds. If your checkout is already slow, this makes it worse. Fix the fundamentals first.
**Q: My checkout is only slow on mobile. Why?**
JavaScript bloat from page builders or analytics. Test mobile in Chrome DevTools (Lighthouse) for specific culprits. Often it’s render-blocking JS, not server speed.
**Q: How do I know if it’s my host or my code?**
Switch to a default theme (Storefront) temporarily. If checkout is still slow, it’s infrastructure. If it’s fast, it’s theme/plugin bloat.
**Q: What checkout time should I aim for?**
Under 3 seconds from cart to order complete. Under 2 seconds is excellent. Over 5 seconds = losing sales.
—
## Next Steps
**Option 1: Run the diagnostics yourself**
– Work through the 12-point checklist above
– Check Query Monitor results
– Identify if it’s workers, queries, or plugins
**Option 2: Get my help**
I offer a fixed-price WooCommerce optimization ($750) that includes:
– Full diagnostic (PHP workers, queries, bottlenecks)
– Checkout process optimization
– Database cleanup
– Caching configuration
– Before/after benchmarks
**Or** — if you’re on underpowered hosting with clear resource limits — I’ll tell you straight up that you need better infrastructure before any optimization will help.
[Get a free speed diagnostic →](https://wpvelocitylab.com/speed-diagnostic/)
—
*Full disclosure: I work at Rocket.net. This guide is based on what I see daily helping customers with WooCommerce performance. Affiliate links are used where relevant.*