WooCommerce shipping zones let you charge different shipping rates to different parts of the world. A customer in London pays one rate, a customer in the US pays another, and a local customer gets free delivery. This guide covers the complete setup from creating your first zone to the common mistakes that cause customers to see incorrect shipping rates at checkout.
How WooCommerce Shipping Zones Work
WooCommerce matches each customer to a zone based on their shipping address. The zone determines which shipping methods and rates they see at checkout. A customer is matched to the first zone whose region includes their country, state, or postcode. If no zone matches, they see the “Rest of the World” zone (if configured) or no shipping options at all – which blocks checkout.
Zone matching uses specificity: a postcode-specific zone takes priority over a country zone, which takes priority over the Rest of the World zone. Plan your zones from most specific to least specific and always configure the Rest of the World zone so international customers can check out.
Step 1: Access Shipping Zones
Go to WooCommerce -> Settings -> Shipping -> Shipping Zones. You see a list of existing zones (empty by default) and a “Rest of the World” zone at the bottom. Click Add Zone to create your first zone.
Need help setting up your WooCommerce store? Describe your project and get a free estimate.
Step 2: Create Your First Zone
Name the zone clearly – “United Kingdom”, “USA and Canada”, “Local Delivery (London SW1)” – so you can identify it in the list later. In the Zone Regions field, add the countries, states, or postcodes this zone covers. Type a country name or code to search. For UK-specific zones, you can enter specific postcodes or postcode ranges to create hyperlocal zones.
After adding regions, click Add Shipping Method. WooCommerce provides three built-in methods:
- Flat Rate – a fixed cost per order, per item, or per weight class
- Free Shipping – free shipping, optionally triggered by a minimum order amount or coupon
- Local Pickup – customers collect from your location
Step 3: Configure Flat Rate
Click the Flat Rate method after adding it to edit its settings. Configure:
- Method Title – what the customer sees at checkout (“Standard Delivery”, “Express Shipping”)
- Tax Status – whether shipping is taxable (depends on your jurisdiction)
- Cost – the flat rate amount. Use the formula field for dynamic pricing:
WooCommerce shipping cost formulas:
[qty] * 2.50 # £2.50 per item
[cost] * 0.05 # 5% of cart total
5 + [qty] * 1.00 # £5 base + £1 per item
[fee percent="10" min_fee="5"] # 10% of cart, min £5
Step 4: Set Up Free Shipping
Add a Free Shipping method to the zone. In its settings, set the requirement:
- A valid free shipping coupon – only free when a coupon is used
- A minimum order amount – free when cart total reaches the threshold
- A minimum order amount OR coupon – either condition triggers free shipping
Set the minimum amount to your target. Most stores use 3-5x their average order value as the free shipping threshold – enough to incentivise adding more to the cart without being unattainable. Display the threshold clearly on product pages and in the cart (“Spend £15 more for free shipping”).
Step 5: Configure the Rest of the World Zone
Click the pencil icon on the “Rest of the World” zone at the bottom of the zones list. Add a Flat Rate with your international shipping cost, or leave it without any methods if you do not ship internationally (customers in uncovered regions see no shipping options and cannot check out – add a clear message explaining this).
Debugging Incorrect Shipping Rates
If customers see wrong rates or no shipping options, check: (1) The customer’s shipping address country matches the zone’s regions – go through checkout yourself entering that address. (2) The product has a weight entered if you use weight-based rates. (3) No zone conflict where a customer matches multiple zones (WooCommerce uses the most specific match). Enable WooCommerce’s built-in shipping debug by adding ?wc-ajax=get_refreshed_fragments to checkout and checking the response.