Your customer enters an address, reaches the delivery step, and finds no way to place the order. The product is available. Payment works. Shipping is where the purchase stops.
The quickest route to a fix is to identify which part of shipping has failed. Is the address matching the wrong zone? Does the cart qualify for any method? Is a carrier returning no quote? Or are valid options failing to appear in the checkout interface?
Start with one reproducible checkout attempt. Keep the same products, quantities, address, and coupon while you investigate. Changing several of those at once makes a successful test difficult to explain.
First, identify the pattern
Record the exact message and the point where it appears. A shipping section that is absent entirely needs a different investigation from a visible section reporting that no options are available.
| What the customer sees | First investigation | Useful comparison |
|---|---|---|
| No options for one ZIP code | Address matching and zone configuration | Same cart, another address you serve |
| No options for one product or variation | Product data and shipping restrictions | Same address, a known working product |
| Free shipping is missing but paid shipping works | Minimum spend and coupon conditions | Same cart just below and above the threshold |
| Flat rate appears, carrier rates do not | Carrier extension and quote response | Same address and products with each method |
| Options disappear after an address change | Checkout recalculation and display | Fresh checkout session with the final address |
| Only logged-in customers have the problem | Customer-specific rules or saved address | Guest checkout with the same cart and address |
These comparisons are diagnostic experiments, not proof on their own. For example, a different address may change both the matched zone and carrier service availability. Record which variables changed before deciding what the result means.
Check which shipping zone actually matches
Open WooCommerce → Settings → Shipping → Shipping zones. Review the customer’s shipping address, including country, state, and postcode.
WooCommerce matches the first applicable zone in the list. A customer does not collect methods from every overlapping zone. Put narrow regions above broad ones and verify that the matched zone contains an enabled method. The fallback zone applies when none of your configured zones matches. WooCommerce explains zone matching here.
Consider this illustrative setup:
| Zone order | Region | Methods |
|---|---|---|
| 1 | Selected local ZIP codes | Local delivery |
| 2 | Florida | Flat rate |
| 3 | United States | Carrier rates |
A Florida customer outside your local ZIP codes matches the Florida zone. They will not automatically receive the carrier methods configured only in the United States zone below it.
Also ask whether the blocked destination is intentional. An empty zone might exist to exclude an area the business cannot serve. Adding a method simply to remove the checkout message can create an order your team cannot fulfill.
If only free shipping is missing, inspect eligibility
Open the Free Shipping method inside the matched zone. Check whether it requires a coupon, a minimum amount, either condition, or both. Verify whether the minimum is evaluated before or after coupon discounts according to the method setting. A coupon must permit free shipping when that condition is required. See the official Free Shipping configuration guide.
For an illustrative $100 threshold, test the following:
| Test | What it establishes |
|---|---|
| $99 cart, no coupon | Behavior below the threshold |
| $100 cart, no coupon | Behavior at the threshold |
| $110 cart with a $20 discount | Effect of discount handling |
| Smaller cart with a free-shipping coupon | Coupon eligibility, if offered |
Use the same address and products throughout. Write down the expected outcome for each test before running it.
If free shipping is the only configured method, an ineligible cart may have no shipping option. Decide whether that is the intended business policy or whether a paid method should also be available. This is a fulfillment decision as well as a settings decision.
Separate product problems from address problems
When one cart fails and another works at the same address, inspect the affected product and the selected variation. Check the Virtual flag, shipping class, and any product restrictions used by your shipping extension.
A downloadable item can still be physical. Marking an item Virtual means it does not require shipping; that distinction matters when the entire cart consists of virtual items.
Weight and dimensions are not universal requirements for displaying every shipping method. They become particularly relevant when an extension calculates carrier quotes or package-based rates. Review the extension’s requirements rather than filling every field and hoping for a different result.
Build a minimal failing cart. Remove one item at a time until you can identify whether a single item or a combination triggers the problem. Preserve the original cart details so the final fix can be tested against the actual failure.
Distinguish checkout rates from shipping labels
Buying or printing a label after an order is placed is a different function from offering a delivery price before the order is placed. A label workflow working correctly does not establish that checkout quotes are configured.
For a missing carrier quote, inspect the extension’s account connection, enabled services, origin address, package configuration, and destination eligibility. Use the specific extension’s documentation and logs: one provider’s error message does not explain another provider’s integration.
If possible, compare a carrier method with a simple flat rate on staging. A working flat rate narrows the investigation toward the carrier path; it does not prove that all checkout behavior is healthy.
Ask the log a precise question: did the quote request fail, or did it succeed without an eligible service? Those outcomes require different fixes. Keep credentials and customer details out of any log excerpts you share externally.
Check whether recalculation or display is failing
If changing the address removes shipping options, inspect browser errors and the request that updates checkout. For classic checkout, WooCommerce documents AJAX requests such as update_order_review; block checkout uses a different integration path. Do not assume the same request applies to both.
Compare the returned data with what the customer sees. A failed request, an empty rate result, and a rate that exists but is hidden by the interface are separate findings. WooCommerce’s troubleshooting guide covers browser inspection, logs, template overrides, and conflict testing.
Use a staging copy for theme switches, plugin isolation, and checkout changes. Reproduce the fault before disabling anything. Then change one component, retest the same checkout, and record the outcome. If the fault disappears, restore the component and confirm whether it returns.
Do not use a blanket plugin deactivation on a live store as the first experiment. You may remove payments, tax rules, or operational integrations while trying to repair shipping.
Verify the fix against the business rules
One successful order is useful evidence, but it is not the whole shipping policy. Test the boundary that was broken and at least one nearby case that should behave differently.
- An address inside the corrected region and one outside it.
- A qualifying cart and a cart that should not qualify.
- The affected variation and a known working product.
- Guest checkout and logged-in checkout if behavior differed.
- A fresh session and an address change during checkout.
Confirm the final shipping charge on the order, not just the label displayed at checkout. If you enabled frontend debug messages, disable them after diagnosis. Note the change and the test cases so future updates can be checked against the same behavior.
Frequently asked questions
Why does WooCommerce say no shipping options are available?
The message means the checkout has no available shipping option for the current situation. Investigate the matched zone, enabled methods, cart eligibility, and extension restrictions before treating it as a single known bug.
Why does shipping work for some addresses but not others?
Compare the matched zones and the delivery coverage of the selected method. Test with the same cart so a product restriction does not confuse the address comparison.
Should I install another shipping plugin?
Only when the required delivery rule or service is missing from your current setup. An additional plugin will not automatically correct a wrongly ordered zone or an invalid carrier request.
Need help with a shipping issue that keeps returning?
Send E-FRAME the affected cart, a test destination, the exact checkout message, your shipping extension, and what changed before the failure. That gives us a useful starting point for WooCommerce troubleshooting and development.
If checkout is also slow, see our separate guide to finding WooCommerce performance bottlenecks. For a reproducible shipping failure, talk to a developer.