How to Set Up WooCommerce Shipping
Configure WooCommerce shipping zones in the correct order, add flat rate, free shipping or local pickup, and use classes for product-specific costs.
Quick answer: open WooCommerce → Settings → Shipping → Shipping zones. Add specific destinations first, attach at least one method to each zone, configure a fallback “Locations not covered” zone, then test complete customer addresses in a private browser window.
Shipping zones answer where an order goes. Shipping methods answer how it ships. Shipping classes help adjust cost for what is in the cart.
Gather the shipping rules first
Before entering settings, document:
- countries, states and postcodes served;
- excluded destinations;
- flat, weight, price or live-carrier rates;
- free-shipping thresholds;
- local pickup locations;
- bulky, fragile or refrigerated products;
- taxes applied to shipping;
- packaging and handling costs.
WooCommerce core provides flat rate, free shipping and local pickup. Live carrier calculations and complex conditional rules generally require an extension or custom integration.
Set the store address and selling locations
Open WooCommerce → Settings → General and verify the store address, selling locations and shipping locations. These settings constrain which customer destinations are available.
An incorrect base address can affect tax and extension calculations. Use the real fulfillment origin or the documented configuration required by the selected carrier integration.
Create shipping zones from specific to broad
- Open WooCommerce → Settings → Shipping → Shipping zones.
- Click Add zone.
- Give it an operational name, such as “New York local” or “Continental US.”
- Select countries, regions or postcodes.
- Add one or more shipping methods.
- Save the zone.
Order matters: WooCommerce uses the first matching zone. Place a postcode-level local area above a state, and a state above an entire country.
Review Locations not covered by your other zones. Add an intentional fallback rate or leave it without methods to prevent orders from unsupported regions.
Add a flat rate
Within a zone, add Flat rate, edit it and set the tax status and cost. Test the exact cart total rather than assuming the label describes the calculation.
Core flat rate supports documented cost expressions for quantities and percentages. Keep formulas simple and comment them in store documentation; a future manager should not have to reverse-engineer checkout pricing.
If several services have different delivery times, name them clearly, such as “Standard — 3–5 business days” and “Express — 1–2 business days.” Do not promise carrier delivery guarantees the business cannot meet.
Configure free shipping
Add Free shipping to the appropriate zone and choose its requirement:
- no requirement;
- valid free-shipping coupon;
- minimum order amount;
- coupon or minimum;
- coupon and minimum.
Test whether the threshold is evaluated before or after discounts according to the current setting. Also decide whether other methods should remain visible when free shipping is available; core behavior and extensions can differ.
Configure local pickup
Add Local pickup only to zones that can use it. Provide the pickup address, opening instructions and preparation expectations in the method description or order communication.
Test tax treatment with professional advice because pickup can change the place of supply in some jurisdictions.
Use shipping classes for product cost differences
Go to WooCommerce → Settings → Shipping → Classes and create descriptive classes such as:
- bulky;
- fragile;
- small parcel;
- freight only.
Assign classes on product shipping data, then edit the zone’s flat-rate method to define class costs. Decide whether class calculations charge per class or use the most expensive class, based on how products are actually packed.
Do not use classes as customer regions. A “Canada” class on products does not replace a Canada shipping zone.
Add product weights and dimensions
Carrier and table-rate extensions cannot calculate reliable quotes without accurate product data. Include packaged weight and dimensions where the integration expects them, not merely the bare product dimensions.
Check variation-level data. A variable product can contain options with materially different shipping requirements.
Test the zone matching
Use a private browser window and test addresses at every boundary:
- one postcode inside a specific zone;
- one just outside it;
- every country served;
- an unsupported country;
- cart below and above free-shipping threshold;
- mixed shipping classes;
- virtual and physical products together.
Enable WooCommerce shipping debug mode temporarily if available in current shipping settings, then verify which zone matched. Disable debug output after testing.
Fix missing or incorrect rates
Check in this order:
- Is the product physical and does it require shipping?
- Is the complete customer address entered?
- Which zone matches first?
- Does that zone contain an enabled method?
- Are postcode patterns and country/state codes correct?
- Are product class, weight and dimensions present?
- Is cart/checkout excluded from full-page cache?
- Do logs or browser Network requests show an extension error?
WooCommerce’s official core shipping troubleshooting guide also covers outdated template overrides, transients, browser errors and conflict testing.
Final launch checklist
Place test orders for each major zone and method. Confirm the customer-visible name, price, tax, delivery estimate, email output and order-admin data. Then verify the charged amount covers carrier, packaging and handling costs.
Re-test after updates to WooCommerce, the theme, tax configuration or shipping extensions. If rates appear but the order cannot complete, continue with WooCommerce Checkout Not Working.
Frequently asked
- The customer address may not match a zone, the matched zone may have no enabled method, products may be virtual, or a cache, extension or outdated template override may be interfering.
- WooCommerce evaluates zones from top to bottom and uses the first customer-matching zone. Put specific postcode or regional zones above broad country zones.
- A shipping class groups products with similar cost rules, such as bulky or fragile items. It does not define customer destinations; zones do that.