Unlike fulfillment constraints which block locations, product routing rules prioritize locations. If the preferred location is out of stock, Shopify automatically falls back to the next available location.
Constraints vs Routing
| Fulfillment Constraints | Order Routing Rules | |
|---|---|---|
| Effect | Blocks locations entirely | Ranks locations by preference |
| If no stock at preferred location | Checkout blocked | Falls back to next priority |
| Configured in | Charlie app | Shopify Order Routing settings |
| Use case | ”Fragile items can NEVER ship from small stores" | "Prefer warehouse for fragile items, but allow stores as backup” |
How product routing rules work
A product routing rule has two parts:- When (condition): Which products trigger the rule
- Then (groups): How to rank locations when triggered
Configure a product routing rule
Access order routing settings
Go to Charlie → Settings → Order routing or Shopify → Settings → Shipping and delivery → Order routing.
Configure the condition (When)
Set up which products trigger this rule:

| Field | Options |
|---|---|
| Condition | Product is |
| Operator | Is one of / Is not one of |
| Value | Enter one or more product IDs |
Configure location groups (Then)
Create ranked groups of locations. Group 1 has highest priority, Group 2 is the fallback, and so on.For each group, click Add selector and choose how to select locations:
| Selector type | Description |
|---|---|
| Specific locations | Choose individual locations manually |
| Location type | All Warehouses or all Stores |
| Location tag | Locations with specific tags |
Condition options
- Is one of
- Is not one of
Rule triggers when the cart contains any of the specified products.Example: Cart contains Product A OR Product B → Apply rankingUse case: Premium products that should prefer flagship stores.
Examples
Premium products prefer flagship stores
A fashion brand wants premium items to be fulfilled from flagship stores when possible, with warehouses as backup.
Result: Premium products prefer flagship stores first. If out of stock, warehouses are tried, then other stores. No checkout blocking.
Heavy items prefer warehouse
A furniture retailer wants heavy items to ship from warehouses with freight capabilities, but allows store fulfillment as backup.
Result: Heavy items prefer freight-capable locations, but can still be fulfilled from stores if needed.
Standard products avoid specialty locations
Keep specialty locations (like those with engraving equipment) available for orders that need them.
Result: Standard products try warehouses and regular stores first, leaving specialty locations available for products that need them.
Combining with constraints
For maximum control, combine routing rules with constraints:| Rule type | Purpose |
|---|---|
| Constraint | Block locations that absolutely cannot fulfill |
| Routing rule | Prioritize among remaining eligible locations |
- Fulfillment Constraint: Exclude locations tagged
no-fragile-handling→ Small stores are blocked - Product Routing Rule: Prefer locations tagged
fragile-certified→ Certified locations are preferred, but others can still fulfill
Best practices
Use routing for optimization
Use routing rules when you have preferences but can accept alternatives. Reserve constraints for hard requirements.
Group products by handling needs
Instead of listing individual products, consider using collections in your constraint rules and product tags for common patterns.
Combine with other rules
Product rules work well with Inventory Rules (prefer locations with more stock of the specific product).
Test before peak seasons
Verify your routing with test orders before high-volume periods.
Troubleshooting
Products not routing to expected locations
Products not routing to expected locations
Check:
- Is the rule enabled?
- Are the product IDs correct? (Check in Shopify Admin → Products)
- Does the preferred location have stock?
- Are there constraint rules blocking the location?
- Is another routing rule with higher priority overriding this one?
Rule not triggering at all
Rule not triggering at all
Check:
- Is the operator correct? (“Is one of” vs “Is not one of”)
- Are the product IDs in the correct format?
- Is the rule placed correctly in the routing order?
Wrong group being selected
Wrong group being selected
Remember: Shopify tries groups in order and uses the first one with available stock. If Group 1 is out of stock, it moves to Group 2 automatically.Verify stock levels at each location for the products in question.