WooCommerce no shipping options available at checkout? First check the customer’s full delivery address, the shipping zone it matches, and whether that zone has an eligible method. If those checks pass, investigate the product, carrier integration, or checkout itself. The same message can have several causes.
A customer who cannot select delivery may be unable to finish an order. However, making the warning disappear is not enough. A repair must return the right delivery choices at the agreed price, without opening destinations you cannot serve.
This guide gives you a controlled way to narrow the problem before changing settings. The comparison tables are a Webless diagnostic framework, not results from tests on your store.
Start with one address and one cart
Write down the delivery choice you expect before testing. For example: a physical product should offer standard delivery to an address inside your supported region. Use your own controlled test address, not a customer’s personal information in a public screenshot.
Record the product and selected variation, quantity, destination country, region, postcode, coupon, and whether you are logged in. Also note whether the problem occurs in the cart, checkout, or both. Do not place a paid order just to check whether a rate appears.
Then change one factor at a time. Replacing the product, address and coupon together may produce a working checkout without showing which change mattered.
Find the boundary of the shipping failure
| Controlled comparison | What the result suggests | Next evidence to collect |
|---|---|---|
| Same cart, two supported delivery areas | Only one area fails: investigate destination-specific rules first | Matched zone and enabled methods for each address |
| Same address, one ordinary product versus the affected product | Only one product fails: inspect its shipping data and restrictions | Variation, class, weight, dimensions and extension rules |
| Same cart and address, coupon removed | Shipping changes with the discount: inspect eligibility conditions | Expected threshold and whether discounts count toward it |
| Same inputs, cart versus checkout | A rate disappears between pages: inspect recalculation and checkout customization | First failed request or visible error, with private data removed |
| Same inputs, fresh guest session versus your usual browser | Session-specific behavior needs investigation; it is not proof of a cache fault | Consent state, completed address fields and selected delivery destination |
Check which shipping zone actually matches
Open WooCommerce > Settings > Shipping > Shipping zones. WooCommerce uses the first matching zone, not every zone that covers an address. A broad country zone above a narrow postcode zone can therefore select the wrong set of methods.
Check the shipping destination rather than assuming the billing address controls delivery. Confirm country, region and postcode, then inspect the methods in the matched zone. A zone with no methods can intentionally block delivery. The fallback zone only applies when no other zone matches. WooCommerce explains this hierarchy in its shipping zones documentation.
Do not add worldwide delivery as a diagnostic shortcut. A checkout that accepts an unsupported destination creates a fulfillment problem instead of solving one. Capture the original configuration before correcting a confirmed zone-order or coverage mistake.
A shipping class is not a shipping method
Adding a class called Heavy or Fragile does not create a delivery option. A class groups products so a shipping method can use that grouping. Check the actual method and its class-specific configuration, not only the product’s class name.
Inspect the selected variation too. A variable product can have a different class for individual variations. That distinction matters when one size ships correctly but another does not. See the official product shipping classes guide.
Keep a note of the exact variation that fails. Reporting only the parent product’s title can send the investigation toward settings that the failing purchase path does not use.
Free shipping can disappear without being broken
Free shipping may require a minimum spend, a qualifying coupon, either condition, or both. Its minimum-order setting also determines whether WooCommerce assesses the amount before or after a coupon discount. Verify the configured rule against the offer your store actually advertises. The official free shipping guide explains these options.
Consider an illustrative test: your policy offers free delivery above a threshold, but the shopper applies a discount. If the discounted amount no longer qualifies, losing free delivery may be correct. The business question is whether another valid paid option should remain.
Test immediately below and above your own threshold, then repeat with the relevant coupon. Do not lower the threshold or make shipping free just to obtain a passing screenshot. Correct the implementation or the approved policy mismatch deliberately. For a separate discount failure, use our WooCommerce coupon troubleshooting guide.
Separate carrier rates from core shipping rules
Built-in shipping methods and live carrier quotations are different systems. A label-printing connection does not by itself prove that checkout can fetch live rates. Identify the exact extension responsible for the missing choice before changing accounts or installing another plugin.
For a carrier method, follow that extension’s current documentation. Collect the time of the failed quote and its sanitized error message. Ask whether the request failed, returned no eligible services, or returned a rate that another rule removed. Those outcomes need different repairs.
A useful developer test is to compare the carrier method with a controlled core method on staging. If the core method works for identical inputs, investigate the carrier path next. This narrows the investigation; it does not certify the live store or justify publishing an arbitrary flat rate.
When the address is valid but checkout still fails
WooCommerce’s core shipping troubleshooting guide covers missing methods, shipping debug mode, browser errors, template overrides and conflict testing. Use these deeper checks after reproducing the failure.
Shipping debug mode can expose the matched zone on the storefront. Prefer staging, and turn it off after testing. Likewise, test a standard checkout against a customized checkout on staging before replacing the live design. Keep the same cart and destination in both tests.
If changing the address leaves the rate area stuck, ask a developer to inspect the failed background request. Preserve its time, status and sanitized error rather than sharing a complete network export with cookies or customer data. Avoid copying generic code snippets that force a shipping choice without honoring the store’s restrictions.
Do not disable every business plugin on a live store during this investigation. A shipping experiment must not silently remove payment, tax or order-management behavior. Our checkout testing checklist helps define the wider regression checks.
Prove the repair without changing the offer
Agree the expected result for each row below before testing. Mark a row as not applicable when the store genuinely does not support that case. These are acceptance checks, not a promise that every store must offer the same delivery methods.
Shipping repair acceptance record
| Test case | Passing result | Stop if |
|---|---|---|
| The original failing cart and supported address | The approved method and price appear and remain selected after recalculation | The error vanishes only because delivery became free |
| A second supported delivery region | Its own intended methods remain available | A zone-order change fixes one region but breaks another |
| An intentionally unsupported destination | The store continues to decline delivery as intended | A broad fallback now accepts an unserviceable order |
| Affected variation and a mixed physical-product cart | Relevant product rules still apply to the complete cart | Only the simplest single-product example passes |
| Threshold and coupon boundary cases | Delivery choices and charges match the approved offer | The repair changes the commercial terms without approval |
| Mobile guest checkout with an address change | Rates refresh, remain readable, and can be selected | Old choices persist or controls become unusable |
If a change fails one of these checks, restore the exact changed setting or file from your recorded baseline. Do not roll back the entire live database just to reverse a shipping setting: new orders may have arrived since the backup.
Seeing a rate is only the shipping part of recovery. A full release check also needs an authorized test of the resulting order, shipping charge and fulfillment details. Use a sandbox or another agreed controlled process; do not create a real charge without permission.
When to ask Webless for help
A clear zone mismatch may be a manageable settings correction. Bring in professional help when the failure depends on carrier responses, custom restrictions, checkout code, or several interacting products and destinations. The useful deliverable is an explained cause and a verified repair, not simply another shipping plugin.
Send the public page URL, affected product or variation, approximate start time, and a description of the failing delivery area. Explain what customers should be able to choose. Keep account credentials, API keys, full customer addresses and order exports out of the initial message.