WooCommerce Shipping Not Showing at Checkout: The Real Fix
A customer adds a product to the cart, gets to checkout, and instead of a shipping cost they see "There are no shipping options available. Please ensure that your address has been entered correctly." No error in the logs, nothing obviously broken - just an empty shipping box where a price should be. This is one of the most common WooCommerce support tickets, and it's almost always a configuration or caching problem, not a bug.
Why WooCommerce hides shipping instead of erring
WooCommerce doesn't show a shipping method unless it finds one that matches the customer's address and is actually enabled and the cart meets any conditions attached to it (minimum order value, weight, item count). Miss any one of those three, and the customer just sees nothing - no error, no hint, which is why this is so easy to miss during testing on your own address.
Cause 1: The shipping zone doesn't match the address
WooCommerce shipping is entirely zone-based. Go to WooCommerce > Settings > Shipping and look at your zone list. Each zone is matched by country, state, or postcode - top to bottom, first match wins.
- If you built a zone for "Maharashtra" but a customer enters a Delhi address, and there's no fallback "Rest of India" zone below it, they get nothing.
- Postcode-based zones are the most fragile - a typo in the postcode range, or a customer entering a postcode with a space or different format, will silently fail to match.
- Zone order matters. A broad zone sitting above a specific one will swallow the match first, so the specific zone (and its rates) never gets evaluated.
Fix: add a catch-all zone at the very bottom of the list scoped to your full selling region (e.g. "India") with at least one flat rate method, so nobody falls through the cracks.
Cause 2: The method exists but isn't enabled
Opening a zone and adding a shipping method doesn't turn it on. Each method has its own toggle in the Enabled column, separate from being merely listed under the zone.
- Click into the zone from WooCommerce > Settings > Shipping.
- Check the Status column for every method - a greyed-out toggle means it's saved but not live.
- Click the method to open its settings and confirm Enable this shipping method is actually ticked, then Save changes.
Cause 3: The cart doesn't meet the rate's conditions
Free Shipping and some Flat Rate setups only appear when the cart clears a minimum order amount, a coupon, or a weight/class rule. If you're testing checkout with a single low-value item, you may genuinely be below the threshold - which is correct behavior, not a bug. Open the method and check:
- Free Shipping requires: if set to "A minimum order amount," confirm the cart total (before tax) actually exceeds it.
- Flat rate cost formulas: if the cost field uses a formula like
[qty] * 50and a shipping class isn't assigned to the product, the calculation can return an empty or invalid value, which WooCommerce then hides rather than showing as zero.
Cause 4: Caching is showing stale shipping settings
This is the one that trips people up on Getwebup and most LiteSpeed/Apache shared hosting: the cart and checkout pages got cached along with the rest of the site, so a customer is looking at shipping options calculated for a different address, or from before you changed your zones.
WooCommerce ships with logic that's supposed to exclude cart/checkout/my-account from page caching automatically (via the woocommerce_cart_is_a_shortcode / no-cache headers), but a page-caching plugin or a CDN in front of it can still cache these pages if it isn't WooCommerce-aware.
Fix:
- If you're using LiteSpeed Cache, go to LiteSpeed Cache > Cache > Excludes and confirm cart, checkout, and my-account URLs are excluded - the plugin usually does this out of the box, but a manual cache rule can override it.
- If you're behind Cloudflare, set a Cache Rule (or Page Rule) with Cache Level: Bypass for
/cart/*,/checkout/*, and/my-account/*. - Purge all caching layers - plugin cache, object cache, and CDN - after any change to shipping zones, and test in an incognito window so you're not looking at a cached response tied to your own session.
Cause 5: A plugin or theme is interfering with the calculation
Multi-currency plugins, tax add-ons, distance-based shipping plugins, and some page builders hook into woocommerce_package_rates to modify or filter the rates WooCommerce would otherwise show. A bug or misconfiguration in any of them can wipe the rate list entirely instead of just adjusting it.
To isolate it fast:
- Switch to a default theme (Storefront) and retest checkout - if shipping reappears, the theme's checkout template is the problem.
- Deactivate all plugins except WooCommerce and re-test, then reactivate one at a time until shipping disappears again.
- Check WooCommerce > Status > Logs for entries from
fatal-errorsor the shipping method's own log source - a PHP warning during rate calculation is often enough to make WooCommerce quietly drop the whole rate set.
Quick reference: symptom to likely cause
| What you see | Most likely cause |
|---|---|
| "No shipping options available" for one address only | No zone matches that country/state/postcode |
| Shipping missing for every address | Method disabled, or all zones misconfigured |
| Free shipping never appears | Cart total below the minimum order amount |
| Rates worked yesterday, gone today after a settings change | Page or CDN cache serving the old checkout page |
| Shipping vanished right after installing a plugin | Plugin filtering woocommerce_package_rates incorrectly |
Preventing this going forward
Always keep one broad catch-all zone at the bottom of your zone list with a working flat rate - it costs nothing and guarantees no customer ever hits a dead end. Test checkout from an incognito window after every shipping or caching change, using an address outside your own state so you're actually exercising zone matching. And if you run WooCommerce on Getwebup hosting with LiteSpeed Cache active, treat cart/checkout exclusions as part of your initial setup checklist, not something you only discover after a lost sale.
Frequently asked questions
Why does WooCommerce show a blank shipping box instead of an error?
WooCommerce is designed to hide shipping entirely when no method matches the cart and address, rather than showing an error - which is correct for genuinely unsupported regions but confusing when the real cause is a misconfigured zone or a caching issue.
I added a shipping zone but customers still see nothing. What am I missing?
Check that the method inside the zone is actually toggled Enabled (not just added), that the zone's region actually matches the customer's country/state/postcode, and that zone order puts specific zones above broad ones.
Could my caching plugin really be hiding shipping rates?
Yes - if cart, checkout, or my-account pages get cached by a page-caching plugin or CDN, customers can see shipping options calculated for a stale address or old settings. Exclude those URLs from caching and always retest in an incognito window.
How do I find which plugin is breaking shipping calculation?
Switch to a default theme like Storefront and deactivate all plugins except WooCommerce, then re-test checkout. If shipping returns, reactivate plugins one at a time until it disappears again to isolate the conflict.
Should I always have a fallback shipping zone?
Yes. Add a catch-all zone at the bottom of your zone list covering your full selling region with at least one flat rate method, so no customer ever lands on "no shipping options available" due to an address that slipped through your other zones.