Skip to main content
Product rules let you prioritize locations based on what’s in the cart. When a customer orders specific products, you can control which locations should be preferred for fulfillment.
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 ConstraintsOrder Routing Rules
EffectBlocks locations entirelyRanks locations by preference
If no stock at preferred locationCheckout blockedFalls back to next priority
Configured inCharlie appShopify 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:
  1. When (condition): Which products trigger the rule
  2. Then (groups): How to rank locations when triggered

Configure a product routing rule

1

Access order routing settings

Go to Charlie → Settings → Order routing or Shopify → Settings → Shipping and delivery → Order routing.
2

Add the Product Rules rule

Find Charlie’s Product Rules and add it to your routing strategy.
3

Configure the condition (When)

Set up which products trigger this rule:
Product rule condition configuration with Product is and Is one of dropdowns
FieldOptions
ConditionProduct is
OperatorIs one of / Is not one of
ValueEnter one or more product IDs
4

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 typeDescription
Specific locationsChoose individual locations manually
Location typeAll Warehouses or all Stores
Location tagLocations with specific tags
Locations that don’t match any group will be ranked last, as shown in the interface: “All locations that do not match any of the groups will be ranked last.”
5

Enable the rule

Toggle the rule to Enabled when you’re ready to apply it to live orders.

Condition options

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.
1

Identify premium product IDs

Get the product IDs for your premium items from Shopify.
2

Create the rule

  • Condition: Product is
  • Operator: Is one of
  • Value: [Premium product IDs]
3

Configure groups (Then)

  • Group 1: Location tag = flagship
  • Group 2: Location type = Warehouse
  • Group 3: Location type = Store
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.
1

Tag your warehouses

Add the tag freight-capable to warehouses with shipping equipment.
2

Create the rule

  • Condition: Product is
  • Operator: Is one of
  • Value: [Heavy furniture product IDs]
3

Configure groups (Then)

  • Group 1: Location tag = freight-capable
  • Group 2: Location type = Warehouse
  • Group 3: Location type = Store
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.
1

Identify specialty products

Get the product IDs for items that require specialty equipment.
2

Create the rule

  • Condition: Product is
  • Operator: Is not one of
  • Value: [Specialty product IDs]
3

Configure groups (Then)

  • Group 1: Location type = Warehouse
  • Group 2: Location tag = standard-store
  • Group 3: Location tag = specialty
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 typePurpose
ConstraintBlock locations that absolutely cannot fulfill
Routing rulePrioritize among remaining eligible locations
Example: Fragile items strategy
  1. Fulfillment Constraint: Exclude locations tagged no-fragile-handling → Small stores are blocked
  2. Product Routing Rule: Prefer locations tagged fragile-certified → Certified locations are preferred, but others can still fulfill
Result: Fragile items never ship from incapable locations (constraint), and prefer specialized locations when available (routing).

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

Check:
  1. Is the rule enabled?
  2. Are the product IDs correct? (Check in Shopify Admin → Products)
  3. Does the preferred location have stock?
  4. Are there constraint rules blocking the location?
  5. Is another routing rule with higher priority overriding this one?
Check:
  1. Is the operator correct? (“Is one of” vs “Is not one of”)
  2. Are the product IDs in the correct format?
  3. Is the rule placed correctly in the routing order?
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.