← Back to Blog
WooCommerce Troubleshooting

No Shipping Options Found? WooCommerce Fix

October 24, 2026 24 views Amanur Rahman
A step-by-step way to find why WooCommerce shows no shipping options at checkout, from zones and postcodes to products, carrier plugins and caching.

A customer fills their cart, reaches checkout, and sees a message that no shipping options are available for their address. They cannot pay, so they leave. Nothing in your dashboard looks broken, and you may not hear about it until sales quietly drop.

The good news is that this message almost always comes from one of a small number of causes, and each one can be checked in a few minutes. This guide walks through them in the order that finds the problem fastest, from store settings to products to plugins and caching.

Quick answer: WooCommerce shows this message when it cannot return a single valid shipping rate for the cart and address. Check, in order: the shipping location setting under WooCommerce → Settings → General, whether a shipping zone covers the customer's address, whether that zone has at least one enabled method, whether the method's own conditions are met, then products, carrier plugins and caching.

Before you change anything

Take a backup first. Shipping settings affect every order. Save a full backup of your files and database, and if you can, test changes on a copy of the store before touching the live one. Our guide to a WooCommerce staging site explains how to set that up.

Also write down what you see now: the exact message, the address that triggers it, and what is in the cart. When you later change one thing at a time, you will know which change fixed it.

How WooCommerce decides which rates to show

It helps to know what WooCommerce does behind the scenes. For every cart, it builds a shipping package and runs through a short chain of checks:

  1. Is shipping enabled for the destination country in your general settings?
  2. Does one of your shipping zones match the customer's country, state or postcode? WooCommerce reads zones from top to bottom and uses the first one that matches.
  3. Does that zone contain at least one enabled shipping method?
  4. Does the cart meet that method's own rules, such as a minimum order for free shipping or a valid cost formula?

If any link in that chain fails, you get no rates and the customer sees the message. The rest of this guide simply tests each link.

A cardboard shipping box on a clean white surface, representing orders that WooCommerce cannot find a shipping rate for

Step 1: Turn on shipping debug mode

Go to WooCommerce → Settings → Shipping → Shipping settings (labelled Shipping options in older versions) and tick the debug mode option. Save the changes.

Debug mode does two useful things. It shows which shipping zones match the address you enter in the cart, and it stops WooCommerce from reusing cached shipping rates. Many "I fixed it but nothing changed" problems come from stale cached rates, and debug mode removes that doubt while you test.

Now add a product to your cart, enter the address that fails, and note which zone, if any, the debug message reports. Turn debug mode off again when you are finished, because it is meant for administrators only.

Step 2: Check the shipping location setting

Open WooCommerce → Settings → General and look at the selling and shipping location options. If shipping is limited to specific countries, or disabled entirely, customers outside that list will never see a rate, no matter how your zones are set up.

Confirm that the customer's country is allowed both as a place you sell to and as a place you ship to. This is the most overlooked cause, and it takes ten seconds to check.

Step 3: Check that a zone covers the address

Go to WooCommerce → Settings → Shipping and open the list of shipping zones. For each zone, look at the regions assigned to it.

  • Is the customer's country, state or province actually listed in a zone?
  • Do zones overlap? Because WooCommerce uses the first matching zone, a broad zone placed above a narrower one can swallow addresses and use the wrong methods.
  • Do you have a catch-all zone? The zone named for locations not covered by your other zones applies only if no other zone matches, and it needs its own methods.

A common pattern is a store that created one zone for its home country, then expanded to sell abroad without creating a zone for the new countries. Orders from the new countries then fail with exactly this message.

Step 4: Check the zone has an enabled method

A zone with no methods inside it returns nothing. Open the zone and confirm there is at least one method such as Flat rate, Free shipping or Local pickup, and that its toggle is switched on. A method can exist in the list and still be disabled, so check the switch rather than the name.

If you recently changed zones or switched shipping plugins, this is a frequent cause: the zone was recreated, but the methods were never added back.

Step 5: Check postcode rules

Zones can be limited to certain postcodes. WooCommerce accepts exact postcodes, wildcards such as SW1*, and numeric ranges written like 90210...90290. A small mistake here quietly excludes real customers.

  • Check for typos, extra spaces and missing wildcards.
  • Check that the format matches your country. Some countries write postcodes with spaces or letters that your rule does not expect.
  • Test with a postcode that should match and one that should not, and compare against what the debug message says.

Step 6: Check each method's conditions

A method can be enabled and still decline to show, because its own conditions are not met.

Free shipping

Open the free shipping method and look at what it requires. It might need a minimum order amount, a valid free shipping coupon, or both. If a customer's cart total is below the minimum and no coupon is applied, the method will not appear. If it is the only method in the zone, the customer sees no options at all.

Flat rate

Flat rate costs can use placeholders such as [qty], [cost] and [fee percent="10" min_fee="5"]. A typo in a formula, a missing bracket or a stray character can stop the method from returning a rate. Replace the formula with a plain number, save, and test. If the rate returns, the formula was the problem.

Also check shipping class costs. If the main cost field is empty, the method depends on the shipping class entries, and a product with a class that has no cost set can behave in surprising ways.

Local pickup

Local pickup is often added as a fallback. Make sure it is enabled in the zone you expect, and remember that it applies only inside that zone's regions.

Step 7: Check your products

Sometimes the settings are fine and a single product breaks the cart.

  • Virtual and downloadable products do not need shipping. A cart containing only these will skip shipping entirely, which is normal. If a physical product is wrongly marked virtual, it will not get a rate.
  • Weight and dimensions. Core methods like flat rate do not need them. Carrier methods that calculate live rates, and table rate plugins, usually do. A product with no weight can make the carrier return nothing.
  • Shipping classes. A product assigned to a class that no method handles can leave the cart with no valid rate.
  • Mixed carts. Test with only one product at a time to see whether a specific item is the cause.

A fast way to isolate a bad product is to empty the cart, add products one by one, and watch for the point where the rates disappear.

Step 8: Check carrier and shipping plugins

If you use a plugin for UPS, USPS, FedEx, DHL or another carrier, the plugin, not WooCommerce itself, is often what returns no rate. Common reasons include:

  • Expired or incorrect account credentials or API keys
  • A missing or incomplete store origin address
  • Packing settings where the boxes you defined are too small for the items
  • The carrier does not offer a service to the destination
  • The carrier's service returned an error that WooCommerce hides from the customer

Look in WooCommerce → Status → Logs for entries from the plugin. They often state the real reason. If you have developer access, you can also record how many rates WooCommerce receives at the end of the process with a small logging snippet. Add it temporarily on a staging copy, with debug logging enabled:

add_filter( 'woocommerce_package_rates', function ( $rates, $package ) {
    error_log( 'Shipping rates found: ' . count( $rates ) . ' for ' . $package['destination']['country'] . ' ' . $package['destination']['postcode'] );
    return $rates;
}, 999, 2 );

If the log says zero rates were found, the problem sits upstream, in zones, methods or the carrier plugin. If it says one or more rates were found but the customer still sees nothing, the problem is in display, caching or the checkout template. Remove the snippet when you are done.

Step 9: Clear stale rates and fix caching

WooCommerce stores calculated shipping rates for a short time so it does not recalculate them on every page load. After you fix a setting, old results can linger.

  • Saving a zone or a method normally resets the stored rates. Changing a product's weight or a carrier plugin's own settings may not.
  • Go to WooCommerce → Status → Tools and clear the WooCommerce transients, then test with a fresh cart in a private browser window.
  • Check your caching plugin, host cache and CDN. The cart, checkout and account pages must never be served from a page cache, because every visitor needs their own result. Exclude them explicitly.

If shipping works for you as an admin but fails for visitors, caching is the first thing to suspect. Performance tools that are too aggressive can also break the cart fragments that update totals. Our guide to a WooCommerce cart that is not updating covers that related problem.

Step 10: Test for a plugin, theme or checkout block conflict

If every setting looks right and rates still fail, something else may be interfering. Two things are worth checking:

  • Plugin or theme conflict. On a staging copy, switch to a default theme and deactivate everything except WooCommerce and your shipping plugin. If rates return, reactivate the others one at a time. Our walkthrough on diagnosing a WordPress plugin conflict shows a safe way to do this.
  • Checkout type. Stores can use the older shortcode checkout or the newer block-based checkout. Some shipping plugins work with one and not the other. If your plugin does not support the checkout you use, rates may not appear. Check the plugin's compatibility notes and try the other checkout on staging.

If the same customer also reports a broader failure at the payment step, see our guide on fixing a WooCommerce checkout that is not working, since the two problems sometimes share a cause.

Symptom and fix at a glance

What you seeMost likely causeWhat to do
Fails for one country onlyNo zone covers it, or shipping to it is disabledAdd the region to a zone and check the general location setting
Fails for some postcodesPostcode rule too narrow or mistypedFix wildcards and ranges, then test
Zone exists but nothing showsNo enabled method in the zoneAdd or enable a method
Free shipping missingMinimum order or coupon requirement not metCheck the free shipping conditions
Flat rate missingCost formula errorReplace the formula with a number to confirm
Fails after adding one productMissing weight, size or shipping class issueFix that product's shipping data
Carrier rates missingCredentials, origin address or packing settingsCheck plugin logs and settings
Works for admin, fails for visitorsPage cache on cart or checkoutExclude cart and checkout from caching
Fixed a setting, no changeStale cached ratesClear transients and test in a private window

After the fix: test properly

Do not stop at one successful test. Run through a short checklist so you know the fix holds:

  1. Test a domestic address and an international address.
  2. Test a small cart and a large cart, plus one with a coupon.
  3. Test a postcode near the edge of any postcode rule.
  4. Test as a logged-out visitor in a private browser window, on a phone as well as a computer.
  5. Place a test order if you can, and confirm the shipping line appears in the order and the confirmation email.
  6. Turn debug mode off.

If you are redesigning your shipping setup rather than repairing it, our overview of WooCommerce shipping setup options and what they cost compares zones, flat rate, table rate and live carrier rates so you can choose a structure that does not break as you grow.

Still seeing the message, or not sure what to change?

A shipping fault can quietly cost sales every day it stays unfixed. I debug WooCommerce shipping, checkout and carrier integrations for store owners. See how I can help or send me the exact message and address that fails, and I will tell you what I find.

Frequently asked questions

Why does WooCommerce say no shipping options were found when I already set up a zone?

A zone alone is not enough. It must cover the customer's address, contain at least one enabled method, and the method's own conditions must be met. Also check the shipping location setting in the general settings, which can block a country even when a zone exists.

Why does shipping work for some countries but not others?

Usually a zone does not include the failing country, shipping to it is disabled in the general settings, or a broader zone higher in the list is matching first and using methods that do not apply. Review your zone order and regions.

Do I need product weight for flat rate shipping?

No. Flat rate and free shipping do not need weight or dimensions. Live carrier rates and table rate plugins usually do, so a product missing that data can make those methods return nothing.

Can a caching plugin cause this error?

Yes. If the cart or checkout is served from a page cache, visitors can see stale or incorrect results. Exclude the cart, checkout and account pages from caching, and clear the WooCommerce transients after you change shipping settings.

Why do shipping options show in the cart but not at checkout?

The cart calculator may use a partial address, while checkout uses the full address. A postcode rule, a missing required field, or a shipping plugin that does not support your checkout type can create that difference. Test with the full address and check plugin compatibility.

Can an update cause this problem?

It can. A WooCommerce, theme or carrier plugin update can change behavior or expose a setting that was never quite right. Reproduce the issue on staging, check the logs, and roll back the specific plugin there to confirm before changing the live store.

How can I test shipping zones without placing an order?

Turn on shipping debug mode, add a product to the cart, and enter different test addresses in the cart's shipping calculator. The debug message shows which zone matched, so you can confirm your regions and postcode rules behave as expected.

Tags: woocommerce no shipping options no shipping methods available woocommerce shipping zones woocommerce checkout error woocommerce flat rate shipping woocommerce shipping not showing woocommerce troubleshooting
About the Author

Amanur Rahman

I'm a freelance WordPress & WooCommerce developer with 14+ years of experience and 240+ projects delivered for clients in the US, UK and Canada. I build custom plugins, fast WooCommerce stores and Elementor websites, and I'm a Top Rated Plus freelancer on Upwork.

Explore more: Services · Hire a WooCommerce Developer · Portfolio · Contact

Need Help with Your WordPress Project?

Let's discuss how I can help you build something amazing!

Get in Touch →
← Back to Blog