How to set up shipping in WooCommerce
Shipping is zones and rates, but the order you set them up in decides whether a customer sees a price at all.
Shipping is the setting most likely to quietly ruin a checkout without producing an error message. Get a zone wrong and a customer simply sees no shipping option at all — the order cannot be placed, and nothing tells you why, because from your side nothing has crashed.
How WooCommerce shipping is structured
Shipping in WooCommerce is built from zones and methods. A zone is a geographic area — a country, a state, or a specific postcode range. A method is what you charge inside that zone: a flat rate, free shipping above a threshold, or a live rate from a carrier if you have that set up. Every order is matched to exactly one zone based on the customer's address, and shows whatever methods are attached to that zone.
If a customer's address does not fall inside any zone you have defined, WooCommerce does not show an error — it shows no way to proceed with checkout, and the order simply cannot be completed. This is the single most common shipping fault, and it is invisible unless you specifically test it.
Setting up zones in the right order
Under WooCommerce > Settings > Shipping, zones are checked from the top of the list down, and the first match wins. That makes the order you create them in meaningful:
-
Start with your most specific zone
If you offer a special local rate for your own city or region, create that zone first so it takes priority over broader zones that would otherwise match the same address.
-
Add your main country or region zone next
This covers the bulk of your customers with your standard rate.
-
Finish with a catch-all "rest of world" zone
Even if you only ship domestically today, a fallback zone with a clear message — or a deliberately high rate — is better than leaving international customers with no option and no explanation at checkout.
Choosing a shipping method
| Method | Good for |
|---|---|
| Flat rate | Predictable costs and simple products. The most common starting point for a new store. |
| Free shipping | Encouraging a minimum order value, or as your only option if delivery cost is already built into product prices. |
| Live carrier rates | Stores with variable package sizes or weights, where a flat rate would badly overcharge some orders and undercharge others. Requires a carrier integration, usually a plugin or extension. |
Most stores launch with flat rate shipping, sometimes combined with free shipping above a spending threshold, and move to live carrier rates later if package sizes vary enough to make a flat rate unfair to either the store or the customer.
Shipping classes for products that need different rates
If some products are heavier, larger, or more expensive to ship than others, shipping classes let you charge differently for them within the same zone rather than needing a separate zone per product type. Assign a class to a product under its shipping settings, then set a class-specific rate under each zone's shipping method — for example, a flat rate method that charges more for anything tagged "oversized".
Testing before launch
Place a test order using an address inside each zone you have defined, including any edge cases — a postcode right at the boundary of two zones, or a country you are not sure you have covered. Confirm a sensible rate appears every time and that no combination of address and cart contents leaves checkout with no shipping option shown.
If you sell both physical and digital products, confirm that an order containing only digital items correctly skips the shipping step rather than asking for an address it does not need.
How shipping and tax interact
In many jurisdictions, tax is calculated on the shipping cost as well as the product price, and the tax rate can depend on the shipping destination. Get shipping zones set up correctly before configuring tax rules — see setting up tax in WooCommerce for that step, which naturally follows this one.
If you sell in more than one currency or to customers in multiple countries, shipping is also one of the settings most likely to need per-region configuration — see selling in more than one currency for what else changes.
Related reading
Installing the plugin is the easy part — this is the order to configure it in so nothing important gets skipped.
How to set up tax in WooCommerceWooCommerce can calculate tax automatically — what rate to charge whom is a question for an accountant, not a setting.
How to sell in more than one currencyMulti-currency is not one setting — it touches pricing, payments, tax and your own bookkeeping all at the same time.
How to keep stock in sync across channelsSell the same product in two places without a single source of truth for stock, and overselling is a matter of when, not if.