Why Is My WooCommerce Checkout and Add to Cart So Slow?
Cart and checkout are two of the parts of a WooCommerce store that usually can't be cached, so every click makes your server do fresh work. Here is how to see which request is slow and what usually causes it.
Add to cart and checkout are slow on so many WooCommerce stores because they usually can't be cached. Every click there is a fresh request: WordPress loads, your plugins run, the cart is calculated, and often the server asks an outside service for shipping, tax or payment details before it can answer. If any of those steps drags, or the server is already busy, the shopper waits.
"Checkout is slow" is really a handful of separate requests, each with its own usual causes. Find the slow one and the cause is much easier to track down.
What happens when a shopper clicks "Add to cart"
On a classic WooCommerce store, "Add to cart" on a shop or category page sends a background request ending in ?wc-ajax=add_to_cart. The server adds the item, saves the cart session and sends back the parts of the page that changed, like the cart count in the header. On a single product page, many themes reload the whole page instead, which is a full uncached page load.
There is often a second request, ?wc-ajax=get_refreshed_fragments, which keeps the mini-cart in the header up to date. Depending on your theme and plugins, it can run on page loads all over the store. It isn't cached either, so if it takes a second or more, add to cart feels slow and the server carries extra load on pages that should have been quick.
What happens on the checkout page
The classic checkout sends a request to ?wc-ajax=update_order_review as soon as it loads, and again whenever the shopper changes something that can affect the price: country, state, ZIP code, city or shipping method. Each time, WooCommerce recalculates the whole order: shipping, taxes, coupons, fees and anything a plugin adds. A lot of "checkout loading forever" complaints start here. The shopper types a ZIP code, the order summary grays out under a spinner, and if the request takes four seconds they wait four seconds every time they change a field.
Newer stores often use WooCommerce's block-based Cart and Checkout, which new installs get by default. It talks to the Store API at addresses containing wc/store instead of using wc-ajax, but it behaves the same way: change the address or shipping choice and the page waits while the server recalculates.
Clicking "Place order" sends one more request (?wc-ajax=checkout on the classic checkout). In that one request WooCommerce validates the form, creates the order, talks to the payment provider, reduces stock and, by default, sends the order emails. A slow payment provider, a slow mail connection or plugins that hook into order creation all add to the wait for the thank-you page.
How to see which step is slow
You can check this in about ten minutes with the browser you already have:
- Open your store in a private Chrome window, right-click and choose Inspect, then click the Network tab. Google's DevTools guide shows where everything is.
- Type wc-ajax into the filter box. If your checkout uses blocks, type wc/store instead.
- Add a product to the cart, go to checkout, and change your ZIP code and shipping method.
- Watch the list. Each line is one request, and the Time column shows how long your server took to answer.
Write the numbers down, and run the test once at a quiet hour and once at a busy one. Which request is slow tells you where to look next.
What usually makes each step slow
If all of the add to cart and fragment requests are slow, the cause is usually general: too much running on every request, a heavy database or a stretched server. Plugins load on these requests even if they have nothing to do with the cart. If only certain products are slow to add, look at product add-on, bundle and dynamic pricing plugins. Discount rules are checked on every cart change too, so a long list of them adds up.
When update_order_review or its block equivalent is the slow one, look at outside services first. With live carrier rates from UPS, FedEx or USPS, or an automated tax service, your server waits for someone else's answer, and several carriers or service levels at once make the waits stack. Plugins that add upsells, fees, gift options or loyalty points to the summary also run on every recalculation.
If everything is quick until the final click, look at the payment plugin, email sending and whatever runs when an order is created: fraud checks, accounting or inventory sync, CRM and marketing integrations. Order storage matters here too. WooCommerce's High-Performance Order Storage keeps orders in their own tables designed for the job. It is on by default for new stores, but an older store that was upgraded may still use the old setup. Check under WooCommerce > Settings > Advanced > Features, which also lists plugins that aren't compatible with it.
Payment providers also load their own scripts into the checkout page. With several gateways active the page can feel sluggish when shoppers type, and that drags down Interaction to Next Paint, the responsiveness score in Google's Core Web Vitals.
Numbers that are fine at quiet times and bad during a sale or a busy evening point at the server. Cached pages cost almost nothing, so a weak plan looks fine most of the day. Cart and checkout requests need real processing, and on limited hosting a few at once can form a queue. Bots hitting the add-to-cart or checkout addresses can fill it too, which your host can see in the server logs.
Background jobs compete for the same server. WooCommerce and many extensions use Action Scheduler for emails, stock sync and subscriptions; the list is under WooCommerce > Status > Scheduled Actions, and thousands of pending or failed jobs means something is stuck. WordPress also has its own scheduled tasks, WP-Cron, which by default are started by visitors loading pages.
When checkout loads forever or won't submit
A spinner that never stops, or a checkout that won't go through, usually means something is broken, not slow. Look for a request in red or with an error code in the Network tab. One cause is cart or checkout pages cached by mistake, so shoppers see an empty cart or someone else's. Cart, checkout and My Account should be excluded from page caching, in your caching plugin and at your host.
Other usual causes are a JavaScript error from a plugin, theme or tracking script (the Console tab next to Network shows it in red), a firewall or security plugin blocking the wc-ajax or wc/store requests, or an outside service timing out. A broken checkout loses every sale while it's down, so fix it first.
What you can fix yourself, and what to hand over
Some of this you can do from the WordPress dashboard. Remove checkout plugins you don't use, keep only the payment methods customers actually choose, and keep the rest updated. Ask fewer carriers or service levels for live rates, use a fallback rate for when the carrier is slow if your shipping plugin has one, or switch to flat or table rates where they suit your business, and re-test update_order_review after each change. Ask your host whether bots are hitting your cart and checkout addresses and whether your plan runs out of resources at busy times.
The rest needs someone experienced, because a mistake here breaks the part of the store that takes the money. Testing plugins one by one belongs on a staging copy that can't email real customers or charge real cards: gateways in test mode, outgoing email off. Database cleanup, like old sessions and leftovers from deleted plugins, needs a tested backup and someone who knows which data is safe to remove. Switching an older store to High-Performance Order Storage means checking every order-related plugin first.
Moving WP-Cron to a real server schedule means turning off the visitor-triggered version and setting up a scheduled job on the server. Do only the first half and emails and background jobs stop running, so have your host or developer do both together. Stuck scheduled actions will pile up again if you clear them without finding out why they failed. For tracing slow code, the free Query Monitor plugin shows which plugins make slow database queries, if you know how to read it.
For the rest of the store, our WooCommerce speed optimization guide covers images, caching and hosting step by step, and why your WooCommerce store is painfully slow looks at how slowness affects sales.
When to get help
If the Network tab points at a slow request and you can't tell why, or you'd rather not experiment on your checkout, bring someone in. Slow checkouts often have two or three causes stacked together, so fixing one can look like it changed nothing.
Every new store we work with starts with a free store review. We trace the cart and checkout requests, find where the time goes and tell you what to fix first. If the store needs hands-on work, our Speed Fix starts from $2,500, and you can see how we approach WooCommerce stores.
Want us to look at your store? Book a call.