Checked for accuracy and updated on August 14, 2026.
Shipping is usually the first thing that trips people up when setting up a WooCommerce store. Products, payments, and design tend to feel straightforward by comparison — then shipping rates show up wrong, or every customer sees the same flat fee no matter where they’re ordering from, and it’s not obvious why.
In most stores I set up, the cause is the same: shipping zones were never configured properly, or WooCommerce is still running on its single default zone. WooCommerce doesn’t use one global shipping setting — it uses zones, and each zone controls both where you ship and what you charge.
How Zone Matching Actually Works
Shipping zones are set up under WooCommerce > Settings > Shipping. Create a zone for each region you ship to, assign the matching countries or states to it, then add one or more shipping methods — flat rate, free shipping, or local pickup — to that zone. WooCommerce checks a customer’s address against your zones top to bottom and stops at the first match, so order matters: put your most specific zones above broader ones. On a shipping setup with several overlapping regions, a broad zone sitting above a specific one silently swallows every order that should have matched the specific zone instead — the specific zone’s methods simply never get reached.
Get the zones wrong and customers either see no shipping option at checkout — which usually means abandoned carts — or they see a rate that doesn’t reflect the real cost of shipping to their location. Both problems are confusing to diagnose from the storefront side, since the checkout page just shows “no shipping options available” with no further explanation.
Adding and Ordering Your Zones
From your WordPress dashboard, go to WooCommerce > Settings > Shipping. Click Add zone and give it a clear name — “Domestic” or “United States” works better than something generic once you have several zones. Under Zone regions, select the countries or states this zone covers. You can be as broad as a whole country or as narrow as a handful of states.
Repeat for each region you ship to — for example, a “Domestic” zone with cheaper flat rates and an “International” zone with higher ones. Drag zones into order using the handle on the left of the zones list so the most specific zone sits above broader catch-all zones. WooCommerce’s own shipping zones documentation is worth bookmarking, since it’s updated whenever the settings screen changes.
Adding Shipping Methods to a Zone
Under Shipping methods, click Add shipping method and choose from the built-in options. A zone can have more than one method — if you add both flat rate and local pickup, customers in that zone see both options at checkout and choose one.
- Flat rate — a fixed price per order, or per item if you configure it that way. Set a base cost and, if needed, an additional cost per extra item. Works well for stores where most products are a similar size and weight.
- Free shipping — usually set with a minimum order amount or a coupon requirement. A common way to nudge up average order value.
- Local pickup — lets customers collect the order instead of paying for delivery. Set a cost if you charge a small handling fee, or leave it at zero.
Live Carrier Rates: What WooCommerce Core Actually Does and Doesn’t Do
This is where a lot of stores get confused, because “WooCommerce Shipping” is the name of both a general category and a specific, free official plugin — and that specific plugin doesn’t do what its name suggests. WooCommerce Shipping (the plugin) prints USPS, UPS, DHL, and FedEx labels directly from your WooCommerce dashboard once an order comes in, but it does not show live, real-time carrier rates to customers at checkout.
For a customer to see an actual live UPS or USPS rate calculated for their specific address and cart weight at checkout, you need a separate carrier-specific rate extension — WooCommerce sells a UPS Shipping Method and a USPS Shipping Method as distinct paid add-ons for exactly this. Many stores end up running both: a carrier rate extension for accurate checkout pricing, and the free WooCommerce Shipping plugin afterward for printing the actual labels once the order is placed. If your core flat-rate or free-shipping methods are giving customers close-enough pricing and you don’t need per-package live quotes, you can skip this layer entirely — it’s only necessary once flat rates start meaningfully over- or under-charging relative to what carriers actually bill you.
Test Checkout from Each Zone
Add a product to the cart and go through checkout using a test address from each zone you’ve configured. Confirm the expected shipping methods and rates appear. A store owner testing checkout only from their own address will never notice that an international zone is missing or misconfigured — this step catches ordering mistakes and missing regions before a real customer does.
Practical Tips
- Add a “Rest of World” catch-all zone at the very bottom of your list with no region restriction, so customers outside your defined zones still see a shipping option rather than none at all.
- If you sell heavy or oversized items alongside small ones, consider a weight-based or class-based rate rather than a single flat rate — a flat rate that works for a small item can badly undercharge for a large one.
- Review your zones every few months if you expand into new countries or states — it’s easy to add a product for a new market and forget the shipping zone doesn’t cover it yet.
Common Mistakes
- Overlapping zones in the wrong order. If a broad zone sits above a specific one, the specific zone’s rates and methods are never used for matching customers.
- No catch-all zone. Customers outside every defined zone see no shipping method at all, which typically ends in an abandoned cart rather than a support request.
- Installing WooCommerce Shipping expecting live checkout rates. It’s a label-printing tool, not a rate calculator — the two are easy to conflate given the name.
- Testing only from your own address. A store owner testing checkout from their own country will never notice that an international zone is missing or misconfigured.
When Built-In Methods Are Enough
Built-in zones and flat/free/local pickup methods cover most small to mid-sized stores well. Reach for a carrier-rate extension only once you have enough order volume and shipping variability that flat rates are visibly costing you money — either through customers abandoning carts over an overpriced quote, or you eating the difference on underpriced heavy items. Once shipping is dialled in, the next place orders commonly break down is fulfillment — see managing WooCommerce orders for what happens after a customer checks out, and setting up refunds and returns for handling the shipping side of a return.
Shipping zones are the foundation of WooCommerce shipping — get the regions, order, and methods right, and rates at checkout stop being a mystery. Test from an address in each zone before you consider the setup finished, and don’t assume the free WooCommerce Shipping plugin covers live rates just because the name suggests it.

Etienne Basson works with website systems, SEO-driven site architecture, and technical implementation. He writes practical guides on building, structuring, and optimizing websites for long-term growth.