One address, one zone, first match wins
WooCommerce does not combine zones. For each shipping address it checks the zone list from the top down, takes the first zone that matches, and offers only the methods inside that zone. If the zone it picks has no methods, the shopper is told no shipping is available, even when a perfectly good zone sits lower in the list. A zone can be defined by countries, states or provinces, continents or postcodes.
This is why the order of the list is the first thing to read. The documented advice is to put zones from the smallest area to the largest: city before state, state before country. A broad zone placed above a narrower one captures the addresses the narrower one was meant to serve. From WooCommerce 11.1 the zones table warns you when an earlier, broader zone makes a later zone unreachable, so on that version or later look for the warning before anything else.
- Read the zones from top to bottom as WooCommerce does.
- For each failing address, find the first zone that could match it.
- Look at that zone, not the one you expected: does it have methods?
The fallback zone and the empty zone
Every store has a catch-all zone named Rest of the world. It applies to anyone who matches no other zone, adding methods to it is optional, and it cannot be moved, renamed or deleted. If you want to exclude some regions while still using the catch-all, the documentation says to create a zone for those regions and give it no methods. That works as designed, and it is also a common accident: a zone created to exclude a region, or left half-finished, with no methods catches addresses and gives shoppers nothing.
- A zone that exists but has no methods is a valid state that produces "no shipping".
- The three built-in methods are flat rate, free shipping and local pickup; anything else comes from an extension.
How postcode entries match
Postcode limits are written one per line. WooCommerce accepts exact codes, numeric ranges written with an ellipsis, and wildcards with an asterisk. A wildcard matches everything that starts the same way, and it is the recommended form for postcodes that contain letters: an entry such as CB23 followed by an asterisk matches CB23 1EX. Wildcards inside numeric ranges are not supported, so a pattern that mixes the two silently matches less than you expect.
Because postcode entries decide which zone an address lands in, test addresses just inside and just outside each pattern. An entry that is a character too long or too short can exclude the very area it was written for.
- One entry per line; no commas.
- Use a wildcard for postcodes with letters.
- Do not put a wildcard inside a numeric range.
The setting that sits outside the zones
Before any zone is consulted, the store-wide shipping location settings under the General settings decide which countries can reach checkout at all. If a country is not allowed to ship to there, no zone setup can offer it a method. Documentation lists this check as the prerequisite for zone work, and it is the quickest to read.
A safe first investigation on a copy
Use a staging copy with payments in test mode. Make a table of the destinations you serve and the method and cost each should show. Run every address to the checkout total and record the methods shown.
- Test one address inside each zone, one just outside, and one in the catch-all.
- Include an address that worked before and one that never did.
- Check the selling and shipping location settings for each failing country.
- If a method you expect is missing, check whether it came from an extension.
What fixes it, and what does not fit
Fixes are ordering, entries and methods: reorder zones from smallest to largest, add the method to an empty zone, correct the postcode patterns, or allow the country in the store settings. Live courier-rate plugins, table-rate plugins and their accounts are different integrations; if those own the missing rate, this fixed repair will not fit. Choosing what to charge is your decision.
How the paid fix is accepted
The fixed job for this problem is accepted on a staging copy. Each agreed destination shows exactly the methods and costs in your confirmed table at the checkout total, a destination you do not serve shows no method, a destination that worked before still gives the same result, and the final zone order matches the written settings. Your site holder applies the settings to the live store.
Sources and limits
- WooCommerce documentation: Setting up shipping zones Checked 2026-10-11.
- Each customer matches only one zone, based on the shipping address, and sees only that zone's methods.
- WooCommerce checks zones from the top of the list down and the first match wins, so zones should be ordered from smallest area to largest.
- From WooCommerce 11.1 the zones table warns when an earlier, broader zone makes a later zone unreachable.
- A catch-all zone called Rest of the world applies to anyone who matches no other zone and cannot be moved, renamed or deleted.
- Flat rate, free shipping and local pickup are built in, and a missing method probably comes from a third-party extension or custom code.
- A customer whose address falls in a zone with no methods is told that no shipping is available.
- Postcode entries go one per line and can be exact codes, numeric ranges or wildcards with an asterisk, and wildcards inside numeric ranges are not supported.
- The Shipping location settings under WooCommerce settings, General, are a prerequisite.