How to Set Up Shipping Zones and Rates in WooCommerce
Set up WooCommerce shipping zones, flat rate, free shipping above a total, local pickup and a fallback so nobody sees "no shipping options". Step by step, with stock WooCommerce.
Watch the tutorial
Shipping in WooCommerce is built from zones, methods and rates, and the order of your zones decides which rate a customer gets. In this tutorial we build it from scratch in a fresh test shop: a home-country zone, a second zone, a fallback for everywhere else, a shipping class for heavy items and local pickup. Then we test it at checkout from different addresses and go through the five most common mistakes. No code needed.
Also on YouTube (opens in a new tab)
Read the transcript
How to set up shipping zones and rates in WooCommerce. We'll build it from scratch in a fresh test shop, using only what comes with WooCommerce. First, how WooCommerce thinks about shipping: zones, methods and rates. A zone is a region you ship to: a country, a state, or a list of postcodes. Each zone has shipping methods, like flat rate or free shipping, and each method has a rate. That's the price the customer pays. When a customer enters an address, WooCommerce reads down your list of zones from the top, and uses the first one that matches. Only that zone's methods are offered, so zone order matters. You can drag zones to change it. Anyone who matches no zone falls into one last zone at the bottom, called Rest of the world.
Let's start with a zone for the home country. Open WooCommerce, then Settings, then Shipping. This store is brand new, so there are no zones yet. Click Add zone. Give it a name, then pick the region. We'll choose United States. Now add a shipping method. Choose Flat rate, and set the cost to $6.00. Save, and the zone is created. Next, free shipping above a certain total. Add a second method, and choose Free shipping. Under Free shipping requires, choose A minimum order amount, and type $75.00. Save, and the zone now offers a flat rate, and free shipping for bigger orders.
Let's see it live. This cart comes to $61.00, and at checkout the customer is offered the flat rate, $6.00. Now we add one more bag of coffee, and the cart passes $75. Free shipping appears next to the flat rate, and the customer picks the one they want. If you'd rather show only free shipping when it applies, open Shipping settings, and tick Hide shipping rates when free shipping is available. Now the flat rate steps aside, and free shipping is the only option.
Now a second zone, for another region. Click Add zone, and call it Canada. Choose Canada as the region, and add a flat rate of $15.00. The list shows every zone with its regions and methods. WooCommerce checks them from the top down.
So what happens to a customer in Australia? Their address matches neither zone. At checkout they see that there are no shipping options, and they can't order. The fix is the zone at the bottom of the list, Rest of the world. Its edit page calls it Locations not covered by your other zones. It has no regions to choose, because it catches everything else. Add a flat rate here, of $25.00. Now the customer in Australia gets a rate, and can order.
Some products cost more to ship. Shipping classes handle that, and we'll keep this short. Under Shipping, open Classes, and add a class called Heavy items. Then open the product, and on the Shipping tab, choose that class. This is a 22 pound sack of green coffee. Back in the United States zone, edit the flat rate. There's now a cost field for the Heavy items class. Enter $10.00. At checkout, the sack costs the $6.00 flat rate plus the $10.00 class cost. That's $16.00. Shipping classes can do more, and they'll get their own video.
Local pickup is set up in its own place, not inside a zone. Open Shipping, then Local pickup. Tick Enable local pickup, and add a pickup location. Local pickup is free by default, and it works with the block checkout, which this shop uses. Customers can now choose pickup instead of delivery.
Always test as a customer. Here's the checkout with a cart over $75, and a Colorado address. Free shipping, and pickup is offered too. Change the country to Canada, and the Canada zone takes over, at $15.00. Now Australia, which falls through to Rest of the world, at $25.00. The classic checkout picks the same rates. Only the layout is different.
Now some common mistakes. The first is zone order. Here a Denver area zone sits below the United States, with a $3.00 rate. A customer in Denver still gets $6.00, because the United States zone matches first. Drag Denver area to the top. WooCommerce saves the new order for you. Now the same customer gets $3.00.
Postcodes are the second one. In a zone, click Limit to specific ZIP/postcodes, and put one on each line. A star is a wildcard, so 802* matches every postcode that starts with 802. You can also use a range, with three dots between two postcodes.
Third, check where you're allowed to ship. Under Settings, General, the Shipping locations setting can limit shipping to specific countries. Customers outside those countries get no shipping options, whatever your zones say. And Disable shipping turns it off for the whole shop.
Fourth, a zone with no methods. If a customer lands in a zone that has none, WooCommerce doesn't move on to the next zone. Here's a Mexico zone with nothing added. At checkout, the customer sees no shipping options.
Last, tax on shipping. Flat rate has a Tax status setting. Taxable is the default, and None skips tax on that rate. Sales tax is switched on in this shop, with a 10% Colorado rate. The Shipping box on that tax rate decides whether shipping is taxed. At checkout, the tax is $6.70. That's 10% of the $61.00 cart, plus the $6.00 shipping. Untick Shipping on the tax rate, and save. Now the tax is $6.10, because shipping is no longer taxed.
To recap: make one zone for home, add a flat rate, and add free shipping above a total if you want it. Add a zone for each region you ship to, and decide what Rest of the world should do. Then test from a few different addresses. Start simple. You can add zones, classes and rates as your shop grows. One optional note. WooCommerce has no built-in delivery dates, or minimum order. If you want them, PluginCity has two free plugins on WordPress.org: PluginCity Estimated Delivery Date, and PluginCity Minimum Order for WooCommerce. Everything here works without them. Thanks for watching.
What you will learn
- How WooCommerce picks a zone from the customer's address: the first matching zone wins, and you can drag zones to reorder them
- How to create a zone with a flat rate and free shipping above a minimum order total
- How to add a second zone, and what the "Rest of the world" zone does for everyone else
- How to charge more for heavy items with a shipping class
- How to switch on local pickup (it is a block checkout feature with its own settings page)
- How to test the result at checkout, including an address no zone covers
- Why customers can get the wrong rate or no shipping options: zone order, postcodes and wildcards, the Shipping location(s) setting, a zone with no methods, and tax on shipping
Good to know
Everything shown is stock WooCommerce (version 11.2 in this video) with no extra plugins, and screens may look slightly different in other versions. The last 20 seconds of the video mention two free PluginCity plugins, Estimated Delivery Date and Minimum Order, as an optional extra. Nothing in this tutorial needs them. Filmed on a demo shop (Ridgeline Coffee Roasters) with sample products and prices. The voice-over is a computer-generated voice.
Related plugins
PluginCity plugins for related jobs.

PluginCity Free Shipping Bar for WooCommerce
A free shipping progress bar for WooCommerce. Shows customers how much more to spend, on the cart, at checkout and in the mini-cart.

PluginCity Estimated Delivery Date for WooCommerce
Show an estimated delivery date on product pages, the cart, checkout and emails, and tell your team the dispatch date. Counted in working days.

PluginCity Minimum Order for WooCommerce
Set a minimum order amount or quantity for WooCommerce. Checkout waits until the cart reaches it, and customers see exactly what to add.