WooCommerce shipping-zone troubleshooting
Wrong shipping zone? Test the address WooCommerce actually matches
WooCommerce gives one address to one shipping zone: the first matching zone in the list. If checkout shows the wrong shipping options—or none at all—check that match before changing prices or installing another plugin.
Published · Updated · Shipping Contract Guard
The short answer
Put specific zones before broad zones
A postcode zone can sit inside a state or country zone, but WooCommerce does not combine their shipping options. It works from the top of the list, stops at the first match, and shows options from that zone only. Order zones from the smallest area to the largest.
The built-in Rest of the world zone is the final fallback. If the matched zone has no enabled shipping option, the customer can still end up with no shipping option.
Why is WooCommerce matching the wrong postcode?
A broader zone may appear above the postcode zone, the postcode pattern may not cover the address you entered, or the address may be incomplete. WooCommerce stops at the first match; it does not merge a narrow postcode zone with a later country zone.
Test the first and last postcode that should match, plus one immediately outside the rule. Keep the country and state fixed. If no shipping method appears after the correct zone matches, continue with the no-shipping-options checklist.
Use one complete made-up address
Enter the country, state or province, city, and postcode that should reach the zone. Use an address chosen for the test, not a customer’s address. An incomplete address can prevent WooCommerce from finding the intended match.
Check the zone order from top to bottom
Look for a broader zone above the intended one. A country-wide Belgium zone above a Brussels postcode zone will match first, so WooCommerce never reaches the narrower rule. Move the most specific zone above the broader one and save the order.
Test postcode rules at their edges
Check one postcode inside the rule and one immediately outside it. Check the exact codes, numeric ranges, and * wildcard placement. WooCommerce does not support wildcards inside numeric ranges. A successful postcode in the middle of the range does not prove that the first and last postcodes work.
Open the matched zone and inspect its shipping options
Confirm that the intended Flat Rate, Free Shipping, Local Pickup, or extension option is added to this zone and enabled. Then check that option’s own conditions. A correct zone match cannot show a disabled option or make Free Shipping appear when its conditions are not met.
Use shipping debug mode for one test
WooCommerce’s shipping debug mode can show which zone the current address matches. Enable it under WooCommerce → Settings → Shipping → Shipping settings, run the test, then turn it off again because the message appears on the storefront.
Retest the same addresses after the change
Keep the cart and addresses the same while changing one setting. Check the intended zone, exact shipping option, and price for both the inside and outside address. Clear any cart or page cache if an old result remains visible.
Worked example
A narrow postcode zone inside a country zone
Suppose a Brussels zone covers postcodes 1000 through 1299 and has a Flat Rate named Brussels delivery for EUR 5. A broader Belgium zone has a Flat Rate named Belgium delivery for EUR 9.
Test 1000 and 1299 inside the narrow zone, then 1300 outside it. If 1000 receives the EUR 9 Belgium delivery rate, inspect the zone order. If 1300 receives the EUR 5 Brussels delivery rate, inspect the postcode range.
| Address | Correct result |
|---|---|
| Belgium 1000 | Brussels delivery · EUR 5 |
| Belgium 1299 | Brussels delivery · EUR 5 |
| Belgium 1300 | Belgium delivery · EUR 9 |
Check WooCommerce’s own instructions
WooCommerce explains its first-match rule, zone order, postcode patterns, enabled shipping options, and storefront debug mode in these official guides.
Read WooCommerce’s shipping-zone guide →
Read WooCommerce’s core shipping checklist →
Save the results for inside and outside postcodes
Shipping Contract Guard saves the shipping options and prices you approve for each test address, then compares them when the same checks run again. It places no order and uses no customer address.
Install free from WordPress.org