Shopify shipping setup: zones, rates and the rules that break
The most commonly rushed part of a build, and a top cause of abandoned carts. Zones, rates, thresholds and the edges where they go wrong.
8 min read · Store setup ·
Shipping setup in Shopify is straightforward until it isn't, and the point where it stops being straightforward is always the same: an order that falls between two rules and gets charged something absurd. Most of the work is in defining the edges, not the happy path.
The model in one paragraph
Shipping is organised as zones (groups of countries or regions), each containing rates. A rate is either a flat price, a price that depends on weight or order value, or a live quote from a carrier. Products can be excluded from rates using shipping profiles, which is how you handle things that ship differently — oversized items, items from a different warehouse, digital products that don't ship at all.
Set up zones before rates
Start by listing where you actually ship, and split it into zones that share a pricing logic — not zones that share a continent. Domestic, near-neighbour countries, wider region, rest of world is a common shape. If a country has a genuinely different cost profile, it gets its own zone rather than being averaged into a group.
Don't create a zone for a country you can't actually ship to. Every zone you list is a promise.
Weight-based or price-based rates
Rates also depend on where stock sits, so get locations and inventory right first. Weight-based rates reflect what shipping actually costs you, which keeps margin predictable. They require product weights to be correct — and product weights are almost never correct on a catalogue that was imported in a hurry. Audit them before switching this on.
Price-based rates are simpler for customers to understand and are what most small stores use. The risk is that a heavy, cheap item destroys the margin on its own order.
Most stores end up with price-based rates plus a shipping profile carrying weight-based rates for the handful of heavy products. That combination handles reality without making the customer read a matrix.
Free shipping thresholds
The most effective and most frequently misconfigured rate. Three things to check:
- Is the threshold based on the value before or after discounts? A customer using a code can drop below the threshold at checkout and see the price change. Decide the behaviour deliberately.
- Does it apply to every zone? Free domestic shipping accidentally applied internationally is an expensive mistake, and it's a one-checkbox error.
- Is it visible before checkout? A threshold nobody knows about changes no behaviour. Surface it in the cart and on the product page.
Carrier-calculated rates
Live rates from a carrier are the most accurate option and the most fragile. They depend on correct weights and dimensions, they add a network call to checkout, and when the carrier's API is down you need a fallback rate configured — otherwise customers see no shipping options at all, which reads as a broken store.
If you're pushing orders to a carrier or a fulfilment provider automatically, that's no longer a settings task; it's an integration, with the same requirements around retries and error handling as any other.
Shipping across borders
International adds duties, customs data and delivery windows that need stating — international shipping.
Local delivery and pickup
Both are native and both are underused by stores that would benefit. Pickup in particular converts well for stores with a physical location, and it costs nothing to offer. Set realistic preparation times — the most common complaint is a pickup order that wasn't ready when the confirmation said it would be.
The edges to test before launch
Build carts that hit each of these and confirm the charge is what you intended:
- The cheapest possible order to your furthest zone.
- An order exactly one unit below and one unit above the free-shipping threshold.
- An order mixing a normal product with one on a different shipping profile.
- An order to a country you don't ship to — the customer should see a clear message, not a broken checkout.
- A heavy item at your minimum order value.
This is on the launch checklist for a reason: shipping is the setting most likely to be wrong on launch day and least likely to be noticed until a customer complains.
Nobody abandons a cart because shipping costs money. They abandon it because the number appeared later than they expected, or made no sense.
Is this the problem you’re looking at?
Send me the link to your store and a line about what is going wrong. You get a straight answer within one business day — no pitch, no obligation.
[email protected]Or see what I do around Shopify: services, work beyond the theme, selected work.