If WooCommerce says no shipping options are available, first identify the shipping zone matched by the customer's delivery address. Then check the methods inside that zone. A carrier timeout, an unmatched postcode and a disabled flat rate can produce similar checkout symptoms but need different fixes.
Capture one failing basket
Record the product and variation IDs, quantities, delivery country, state and postcode, plus the exact message. Use a staff-controlled test address rather than publishing a customer's address in a support ticket. Keep the basket unchanged while testing; changing the product and address together hides the cause.
If checkout rejects the address before requesting rates, start with billing-field validation. A valid-looking address is not proof that the checkout accepted its country or state value.
Follow the zone order
Open WooCommerce > Settings > Shipping > Shipping zones. Matching works from the top downward, with one zone selected for an address. Put specific postcode regions before broader country regions. A broad zone can intercept an address that you expected a later local zone to handle.
Inspect the matched zone itself. It needs an enabled method that can serve the basket. Merely having a method in another zone is insufficient. Check the fallback region deliberately; do not add worldwide delivery just to hide an error for a destination you cannot serve.
Separate configuration from carrier failure
| Observation |
Next check |
| Every address fails for one product |
Shipping requirement, weight and dimensions for that product |
| One postcode fails but a nearby one works |
Zone boundaries, postcode format and service coverage |
| Flat rate works on staging, live carrier does not |
Extension credentials, carrier response and package rules |
| A free-shipping offer disappeared |
Its threshold, coupon requirements and basket eligibility |
On an isolated staging copy, compare the same basket with a temporary core flat-rate method. This is a diagnostic control, not a proposed production price. If the control works, investigate the live-rate extension and its logs without replacing the commercial shipping policy.
Inside local zone: Expected local method. Outside local zone: Expected broader method. Unserved destination: No accidental delivery offer. Address changed: Rate recalculates correctly. Explanatory checklist, not a customer test result.
Test a repair at the boundary
For an illustrative local zone, test a postcode inside the zone, one just outside it and a destination you intentionally do not serve. Record the matched zone, method and displayed cost for each. A fix that restores one rate but offers delivery outside your service area is incomplete.
Repeat as a guest with a new session. Check cart and checkout after editing the address, not just after the first page load. If the request fails in the browser, preserve its status and error text without copying payment details or authentication tokens.
Do not turn off address validation, grant free shipping universally or suppress checkout errors with CSS. Each can convert a visible failure into an order your team cannot fulfill.
For help, send the failing basket, zone order and redacted carrier response to HandL WP's one-time fix service. Those details make the investigation much more specific than a screenshot of an empty shipping list.
References: shipping zones and core shipping troubleshooting.
References reviewed October 4, 2026. Examples are explanatory; production changes require an appropriate backup and authorized access.