If you're fulfilling orders from more than one location, every order that ships from the wrong warehouse costs you money. Shopify order routing solves this by automatically assigning each order to the best fulfillment location based on rules you define. Local fulfillment cuts delivery costs by up to 37%, according to LocalExpress data — but only if orders actually route to the right place.
Most multi-location merchants still assign fulfillment manually or rely on Shopify's default "first location with stock" behavior. That worked with two locations. It falls apart at three or more. Smart order routing looks at your inventory, your locations, and your customer's address, then picks the best fulfillment point — no manual decisions required.
What Smart Order Routing Actually Does
Smart order routing applies a set of rules to every incoming order and ranks your fulfillment locations based on those rules. The location with the highest priority gets the fulfillment assignment.
You get four built-in rules to work with:
- Ship from closest location — prioritizes the fulfillment center nearest to the customer's shipping address
- Stay within destination market — prioritizes locations in the same country as the customer
- Minimize split fulfillment — prioritizes locations that can ship the entire order in one package
- Ranked locations — lets you manually set a priority order for your locations (e.g., always prefer your main warehouse over retail stores)
These rules stack. You rank them by priority, and Shopify works through them top to bottom. If two locations tie on your first rule, the second rule breaks the tie.
What Do You Need Before Setting Up Order Routing?
Shopify made a critical change in 2025 that affects every multi-location store. As of September 30, 2025, all stores run on "sell only within configured shipping zones" mode. This means a product is only purchasable if it's stocked at a location that serves the customer's shipping zone.
If your Dallas warehouse doesn't have a shipping zone covering California, a California customer can't buy products stocked only in Dallas — even if you have 500 units sitting there. Shopify blocks the checkout entirely.
Before configuring routing rules, make sure every fulfillment location has shipping zones that cover the regions you want to sell to. Go to Settings > Shipping and delivery > Shipping profiles and verify each location's zone coverage. Missing this step is the number one reason merchants see "product unavailable" errors after enabling routing. If you haven't set up your zones yet, start with our guide to zone-based shipping on Shopify.
Step-by-Step Setup
- Confirm you have two or more active locations. Go to Settings > Locations in your Shopify admin. Each location needs to be active and set to fulfill online orders. Deactivated locations or those marked "don't fulfill online orders" won't appear in routing. If you haven't configured your locations yet, follow our multi-location inventory setup guide first.
- Verify inventory is assigned correctly. Every product variant needs inventory quantities at the locations where you actually stock it. Go to Products > Inventory and filter by location. If a product shows zero inventory at a location, routing will skip that location even if physical stock exists there.
- Open the routing settings. Navigate to Settings > Shipping and delivery. Scroll to the Order routing section and click into it.
-
Add your rules. Click Add rule and select the rules that match your fulfillment strategy. For most merchants with locations spread across different regions, start with:
- First priority: Minimize split fulfillment (saves on shipping costs)
- Second priority: Ship from closest location (faster delivery)
- Drag rules into priority order. The rule at the top gets applied first. Reorder by dragging.
- Save and test. Place a test order from an address near your secondary location. Check which location gets assigned in the order details. If it's wrong, revisit your rule priority or check your shipping zone configuration.
Pick the Right Rule Combination for Your Setup
The "right" configuration depends on what you're optimizing for. Here are three common setups:
Speed-first (regional warehouses): Put "ship from closest location" at the top. Best when all locations carry the same products and you want to minimize transit time. Brands that expanded from two to four fulfillment centers cut average delivery times from 5–6 days to 2.5 days, according to ShipBob's 2025 fulfillment report.
Cost-first (mixed inventory): Put "minimize split fulfillment" at the top, followed by "ship from closest location." Best when different locations carry different products and split shipments would double your shipping costs. Average shipping cost per order runs $8–$15, so preventing a single unnecessary split saves real money.
International sellers: Put "stay within destination market" at the top. This keeps orders in-country when possible, avoiding cross-border shipping fees, customs paperwork, and longer transit times. Add "minimize split fulfillment" as the second rule.
How Do You Reduce Split Shipments?
A split shipment happens when no single location has every item in an order. Shopify divides the order across two or more locations, each shipping what they have in stock.
This isn't always bad. If a customer in Toronto orders two items — one stocked in Montreal and one in Vancouver — it might be faster to ship both from their respective locations than to wait for an inter-warehouse transfer. But you're paying for two shipments instead of one.
To reduce splits:
- Stock your bestsellers at every location. Run an ABC analysis — your top 20% of SKUs probably drive 80% of orders. Those need to be everywhere.
- Use the "minimize split fulfillment" rule as your first priority.
- Check your Orders > Fulfillment page weekly for orders that got split. If the same product combination keeps splitting, that's an inventory placement problem, not a routing problem.
Address Quality Makes or Breaks Routing
Proximity-based routing depends entirely on the customer's address being accurate. If a customer enters "New York" but means a suburb 40 miles outside the city, routing might pick the wrong location. Misspelled cities, missing postal codes, and incomplete addresses all degrade routing accuracy.
This matters most for COD stores where customers fill out shipping details on an order form rather than a saved payment profile. There's no card-on-file address to auto-populate. EasySell's order form includes built-in address validation that catches errors before submission — which directly improves routing accuracy for multi-location COD stores.
Testing Your Routing Configuration
Don't assume your routing works after saving the rules. Test it with real scenarios:
- Place orders from different regions. Use addresses near each of your fulfillment locations and verify the closest one gets assigned.
- Order a product only stocked at one location. Confirm routing assigns that specific location regardless of other rules.
- Order multiple products stocked at different locations. Check whether Shopify splits the order or routes everything to one location based on your rule priority.
- Test with an international address (if you sell cross-border). Verify the "stay within destination market" rule keeps the order in-country.
After each test, go to the order detail page and look at the assigned fulfillment location. If routing isn't behaving as expected, the issue is almost always one of three things: a missing shipping zone, zero inventory at the expected location, or rules in the wrong priority order.
When Default Rules Aren't Enough
The four built-in rules cover most multi-location stores. But if you need location-specific logic — like routing all fragile items to a location with specialty packing, or keeping certain SKUs out of a retail store's fulfillment queue — Shopify Plus merchants can use Shopify Functions to build custom routing logic.
For non-Plus stores, you can approximate custom routing with location metafields. Define a boolean metafield like has_capacity on your locations and use it to flag which ones are actively fulfilling. This gives you a manual override without needing custom code.
Start with the built-in rules. If you find yourself manually overriding fulfillment assignments more than a few times per week, that's when it's worth investing in custom logic.
The whole setup takes about 15 minutes. Once it's running, every order automatically routes to the location that ships fastest, cheapest, or both — depending on how you've stacked your rules. That's time you're no longer spending on manual fulfillment decisions, compounding with every order you process.