Merchandising Rules
Overview
Merchandising rules control which products appear first in your collections and search results. The goal is to surface products that are likely to convert — in-stock, popular, high-margin — while giving merchandisers manual control to pin hero products, hide out-of-stock items, and boost seasonal collections. Every major platform has some built-in sorting options; apps like Searchpie, Intelligems, or SearchPie add automated performance-based ranking.
When to Use This Skill
- When building product ranking logic for collection and category pages
- When creating automated (smart) collections based on product attributes, tags, or performance
- When implementing search result boosting and burying for merchandising control
- When adding pinning (manual placement) and slot-based merchandising to collection pages
- When measuring the revenue impact of different product ranking strategies
Core Instructions
Step 1: Determine your platform and choose the right merchandising tool
| Platform |
Recommended Tool |
Why |
| Shopify |
Shopify's built-in collection sorting + Kimonix or SearchPie |
Shopify has built-in sort options; Kimonix and SearchPie add performance-based automated sorting with manual override capability |
| WooCommerce |
WooCommerce's default sort + YITH WooCommerce Catalog Mode or WooCommerce Product Table |
WooCommerce supports basic sorting; YITH and similar plugins add advanced catalog control |
| BigCommerce |
Built-in Collection Sorting + SearchPie or Boost Commerce |
BigCommerce has strong built-in category sorting; Boost Commerce adds advanced search merchandising |
| Custom / Headless |
Algolia or Elasticsearch with a merchandising rules layer |
Algolia has a built-in "Rules" and "Pinning" feature in its dashboard; Elasticsearch needs custom scoring rules |
Step 2: Configure basic collection sorting
Shopify
Built-in sorting options (no app needed):
- Go to Products → Collections → [Collection] → Products
- From the "Sort" dropdown, choose:
- Best Selling — sorts by total units sold historically (most popular first)
- Newest — most recently added products first
- Price (Low to High / High to Low) — price-based sorting
- Manually — lets you drag products to specific positions
- The "Manual" sort lets you pin specific products by dragging them to the top — useful for hero products and new launches
Smart (automated) collections:
- Go to Products → Collections → Create collection
- Set type to Automated
- Add conditions: e.g., "Tag is equal to 'summer'" or "Product price is greater than $50"
- Shopify automatically adds/removes products that meet the conditions
- Set the sort order for the smart collection (Best Selling, Newest, etc.)
Shopify Search & Discovery app (free):
- Install the Shopify Search & Discovery app from the App Store (free, by Shopify)
- This app lets you boost specific products in search results and collection pages
- Go to the app → Collections → [Collection] → Boost products to pin products to the top
- Go to Bury products to push low-priority items (clearance, out-of-season) to the bottom
WooCommerce
Built-in sorting:
- Go to WooCommerce → Settings → Products → Default product sorting
- Options: Default (custom ordering), Popularity, Average Rating, Latest, Price (Low to High)
- "Custom ordering" lets you drag products to specific positions in WooCommerce → Products
- Enable multiple sort options for customers in WooCommerce → Settings → Products → Enable sorting
Category product display (manual control):
- Go to Products → Categories → [Category] → Products tab
- Drag products to reorder them within the category page
- For programmatic control: install WooCommerce Custom Order / Alphabetical Order plugin
BigCommerce
- Go to Products → Product Categories → [Category]
- Click the Sort tab to set the default sort order for the category
- Options: Name, Price, Date, Sales (best selling), Featured, Manual
- "Manual" sort allows dragging products into specific positions
- "Featured" sort shows products marked as "Featured" first, then falls back to the default
BigCommerce Search:
- BigCommerce's search returns results based on relevance by default
- To boost specific products in search: mark them as "Featured" or add keywords in the product SEO fields
- For advanced search merchandising: install Boost Commerce from the BigCommerce App Marketplace
Step 3: Set up performance-based automated ranking
Performance-based ranking automatically promotes products that are selling well and pushes down slow-movers. This typically requires an app.
Shopify — Kimonix
- Install Kimonix from the Shopify App Store (paid, starts ~$30/month)
- Kimonix connects to your Shopify analytics and builds a score for each product based on:
- Sales velocity (recent units sold)
- Conversion rate (add-to-cart rate from collection)
- Inventory level (deprioritize products about to go out of stock)
- Margin (optional, if you've entered cost data)
- Configure the weighting in Kimonix → Strategies: e.g., 50% sales velocity, 30% conversion rate, 20% inventory
- Kimonix re-sorts the collection automatically on a schedule (hourly, daily, or triggered by events)
- Override: manually pin products to specific positions — Kimonix respects manual pins and sorts the rest by algorithm
Using Shopify Search & Discovery (free) for simpler boosts:
- Open the Search & Discovery app
- Under Collections, select a collection and click "Add boost"
- You can boost by product tag (e.g., boost all products tagged "new-arrival"), specific products, or product type
- "Bury" works the same way for clearance items or out-of-season products
WooCommerce
Using YITH WooCommerce Ajax Product Filter + WooCommerce Visual Products Configurator:
- For basic automated sorting based on sales: WooCommerce's built-in "Sort by Popularity" uses a
total_sales meta field that increments with each sale
- For advanced scoring: install Booster for WooCommerce which adds weighted product sorting based on custom criteria
BigCommerce — Boost Commerce
- Install Boost Commerce from the BigCommerce App Marketplace
- Boost Commerce adds smart sorting (by revenue, conversion rate, or custom score) to your category pages
- Create "Merchandising Rules" in Boost Commerce to pin, boost, or bury specific products
- Set up time-limited rules for seasonal campaigns (e.g., boost "winter" tagged products Dec–Feb)
Step 4: Set up search result merchandising
Shopify
Shopify Search & Discovery — search boosts:
- Open the Search & Discovery app → Search
- Under "Boosts", click "Add boost" for specific search queries
- Example: for the query "jacket", boost products tagged "featured-jacket" to the top
- Under "Synonyms": add common spelling variations (e.g., "t-shirt" = "tshirt" = "tee")
- Under "Product filters": configure which filters appear on search results (price, color, size, etc.)
WooCommerce
- WooCommerce Product Search plugin (WooCommerce.com) adds relevance-based search
- Configure search weights: title weight = 5, tag weight = 3, category weight = 2, description weight = 1
- For advanced merchandising: use SearchWP with its WooCommerce integration to create custom search rules
Custom / Headless — Algolia
- Sign up at algolia.com and install the Algolia client in your store
- Push your product catalog to Algolia with a background job
- In Algolia's dashboard → Rules, create merchandising rules:
- Pin a product to position 1 for a specific query
- Boost products with a specific attribute (e.g.,
in_stock: true)
- Bury products with
clearance: true
- Custom ranking: in Algolia → Indices → Ranking → Custom Ranking, add:
desc(sales_30d) — sort by recent sales descending
desc(conversion_rate) — secondary sort by conversion rate
- Algolia updates rankings in real time as you push new product metrics to the index
Step 5: Custom / Headless — scoring engine
// Compute a merchandising score for a set of products
interface ProductMetrics {
productId: string;
unitsSold30d: number;
revenue30d: number;
conversionRatePct: number; // (add-to-carts / page views) × 100
grossMarginPct: number;
daysInStock: number; // 0 = out of stock
daysSinceAdded: number;
}
interface ScoreWeights {
salesVelocity: number; // e.g., 0.35
revenue: number; // e.g., 0.20
conversion: number; // e.g., 0.20
margin: number; // e.g., 0.15
recency: number; // e.g., 0.10 (newer products get a boost)
}
function scoreProducts(metrics: ProductMetrics[], weights: ScoreWeights): { productId: string; score: number }[] {
// Normalize each metric to 0–1 range across the set
const normalize = (values: number[]) => {
const min = Math.min(...values);
const max = Math.max(...values);
return values.map(v => max === min ? 0.5 : (v - min) / (max - min));
};
const salesScores = normalize(metrics.map(m => m.unitsSold30d));
const revenueScores = normalize(metrics.map(m => m.revenue30d));
const conversionScores = normalize(metrics.map(m => m.conversionRatePct));
const marginScores = normalize(metrics.map(m => m.grossMarginPct));
// Recency: newer = higher score (invert daysAdded)
const recencyScores = normalize(metrics.map(m => -m.daysSinceAdded));
return metrics.map((m, i) => {
const score =
salesScores[i] * weights.salesVelocity +
revenueScores[i] * weights.revenue +
conversionScores[i] * weights.conversion +
marginScores[i] * weights.margin +
recencyScores[i] * weights.recency;
// Out-of-stock products get pushed to the bottom
const adjustedScore = m.daysInStock === 0 ? score - 2 : score;
return { productId: m.productId, score: Math.round(adjustedScore * 1000) / 1000 };
}).sort((a, b) => b.score - a.score);
}
Best Practices
- Bury out-of-stock products, don't exclude them — out-of-stock products should still appear in search (for SEO and wishlists) but rank lower; only completely remove discontinued products
- Refresh scores daily, not on every page load — pre-compute and store product scores; computing scores in real time on every collection request is too slow
- Pin hero products and new arrivals manually — automated scoring is good for the long tail; manually pin the 3–5 key products you're actively promoting each season
- Provide a preview mode before applying new rules — the Shopify Search & Discovery app and Kimonix both offer preview functionality; use it to verify the collection order before pushing live
- Cap the number of pinned products — if you pin too many products, the algorithm never gets to show other products; keep manual pins to ≤ 5 per collection
Common Pitfalls
| Problem |
Solution |
| Best-selling products dominate every collection indefinitely |
Add a recency weight and a "new product boost" for items added in the last 14 days; this gives new products a chance to get exposure |
| Merchandising rule conflicts with another rule |
In Shopify Search & Discovery and Kimonix, rules have priority order — define which rules override others and document the priority scheme |
| Smart collection adds products that shouldn't be there |
Review your collection conditions carefully; using "any condition" instead of "all conditions" is the most common cause of unintended inclusions |
| Performance scores skewed by a single viral day |
Use a rolling 30-day window for sales metrics, not all-time totals; cap extreme outliers at the 95th percentile |
Related Skills
- @multi-channel-selling
- @demand-forecasting
1---2name: merchandising-rules3description: Control which products appear first in collections using automated ranking rules, manual overrides, and performance-based sorting algorithms4---56# Merchandising Rules78## Overview910Merchandising rules control which products appear first in your collections and search results. The goal is to surface products that are likely to convert — in-stock, popular, high-margin — while giving merchandisers manual control to pin hero products, hide out-of-stock items, and boost seasonal collections. Every major platform has some built-in sorting options; apps like Searchpie, Intelligems, or SearchPie add automated performance-based ranking.1112## When to Use This Skill1314- When building product ranking logic for collection and category pages15- When creating automated (smart) collections based on product attributes, tags, or performance16- When implementing search result boosting and burying for merchandising control17- When adding pinning (manual placement) and slot-based merchandising to collection pages18- When measuring the revenue impact of different product ranking strategies1920## Core Instructions2122### Step 1: Determine your platform and choose the right merchandising tool2324| Platform | Recommended Tool | Why |25|----------|-----------------|-----|26| **Shopify** | Shopify's built-in collection sorting + Kimonix or SearchPie | Shopify has built-in sort options; Kimonix and SearchPie add performance-based automated sorting with manual override capability |27| **WooCommerce** | WooCommerce's default sort + YITH WooCommerce Catalog Mode or WooCommerce Product Table | WooCommerce supports basic sorting; YITH and similar plugins add advanced catalog control |28| **BigCommerce** | Built-in Collection Sorting + SearchPie or Boost Commerce | BigCommerce has strong built-in category sorting; Boost Commerce adds advanced search merchandising |29| **Custom / Headless** | Algolia or Elasticsearch with a merchandising rules layer | Algolia has a built-in "Rules" and "Pinning" feature in its dashboard; Elasticsearch needs custom scoring rules |3031### Step 2: Configure basic collection sorting3233#### Shopify3435**Built-in sorting options (no app needed):**361. Go to **Products → Collections → [Collection] → Products**372. From the "Sort" dropdown, choose:38 - **Best Selling** — sorts by total units sold historically (most popular first)39 - **Newest** — most recently added products first40 - **Price (Low to High / High to Low)** — price-based sorting41 - **Manually** — lets you drag products to specific positions423. The "Manual" sort lets you pin specific products by dragging them to the top — useful for hero products and new launches4344**Smart (automated) collections:**451. Go to **Products → Collections → Create collection**462. Set type to **Automated**473. Add conditions: e.g., "Tag is equal to 'summer'" or "Product price is greater than $50"484. Shopify automatically adds/removes products that meet the conditions495. Set the sort order for the smart collection (Best Selling, Newest, etc.)5051**Shopify Search & Discovery app (free):**521. Install the **Shopify Search & Discovery** app from the App Store (free, by Shopify)532. This app lets you boost specific products in search results and collection pages543. Go to the app → Collections → [Collection] → Boost products to pin products to the top554. Go to Bury products to push low-priority items (clearance, out-of-season) to the bottom5657#### WooCommerce5859**Built-in sorting:**601. Go to **WooCommerce → Settings → Products → Default product sorting**612. Options: Default (custom ordering), Popularity, Average Rating, Latest, Price (Low to High)623. "Custom ordering" lets you drag products to specific positions in WooCommerce → Products634. Enable multiple sort options for customers in WooCommerce → Settings → Products → Enable sorting6465**Category product display (manual control):**661. Go to **Products → Categories → [Category] → Products tab**672. Drag products to reorder them within the category page683. For programmatic control: install **WooCommerce Custom Order / Alphabetical Order** plugin6970#### BigCommerce71721. Go to **Products → Product Categories → [Category]**732. Click the **Sort** tab to set the default sort order for the category743. Options: Name, Price, Date, Sales (best selling), Featured, Manual754. "Manual" sort allows dragging products into specific positions765. "Featured" sort shows products marked as "Featured" first, then falls back to the default7778**BigCommerce Search:**79- BigCommerce's search returns results based on relevance by default80- To boost specific products in search: mark them as "Featured" or add keywords in the product SEO fields81- For advanced search merchandising: install **Boost Commerce** from the BigCommerce App Marketplace8283### Step 3: Set up performance-based automated ranking8485Performance-based ranking automatically promotes products that are selling well and pushes down slow-movers. This typically requires an app.8687#### Shopify — Kimonix88891. Install **Kimonix** from the Shopify App Store (paid, starts ~$30/month)902. Kimonix connects to your Shopify analytics and builds a score for each product based on:91 - Sales velocity (recent units sold)92 - Conversion rate (add-to-cart rate from collection)93 - Inventory level (deprioritize products about to go out of stock)94 - Margin (optional, if you've entered cost data)953. Configure the weighting in Kimonix → Strategies: e.g., 50% sales velocity, 30% conversion rate, 20% inventory964. Kimonix re-sorts the collection automatically on a schedule (hourly, daily, or triggered by events)975. Override: manually pin products to specific positions — Kimonix respects manual pins and sorts the rest by algorithm9899**Using Shopify Search & Discovery (free) for simpler boosts:**1001. Open the Search & Discovery app1012. Under Collections, select a collection and click "Add boost"1023. You can boost by product tag (e.g., boost all products tagged "new-arrival"), specific products, or product type1034. "Bury" works the same way for clearance items or out-of-season products104105#### WooCommerce106107**Using YITH WooCommerce Ajax Product Filter + WooCommerce Visual Products Configurator:**108- For basic automated sorting based on sales: WooCommerce's built-in "Sort by Popularity" uses a `total_sales` meta field that increments with each sale109- For advanced scoring: install **Booster for WooCommerce** which adds weighted product sorting based on custom criteria110111#### BigCommerce — Boost Commerce1121131. Install **Boost Commerce** from the BigCommerce App Marketplace1142. Boost Commerce adds smart sorting (by revenue, conversion rate, or custom score) to your category pages1153. Create "Merchandising Rules" in Boost Commerce to pin, boost, or bury specific products1164. Set up time-limited rules for seasonal campaigns (e.g., boost "winter" tagged products Dec–Feb)117118### Step 4: Set up search result merchandising119120#### Shopify121122**Shopify Search & Discovery — search boosts:**1231. Open the Search & Discovery app → Search1242. Under "Boosts", click "Add boost" for specific search queries1253. Example: for the query "jacket", boost products tagged "featured-jacket" to the top1264. Under "Synonyms": add common spelling variations (e.g., "t-shirt" = "tshirt" = "tee")1275. Under "Product filters": configure which filters appear on search results (price, color, size, etc.)128129#### WooCommerce130131- **WooCommerce Product Search** plugin (WooCommerce.com) adds relevance-based search132- Configure search weights: title weight = 5, tag weight = 3, category weight = 2, description weight = 1133- For advanced merchandising: use **SearchWP** with its WooCommerce integration to create custom search rules134135#### Custom / Headless — Algolia1361371. Sign up at algolia.com and install the Algolia client in your store1382. Push your product catalog to Algolia with a background job1393. In Algolia's dashboard → Rules, create merchandising rules:140 - Pin a product to position 1 for a specific query141 - Boost products with a specific attribute (e.g., `in_stock: true`)142 - Bury products with `clearance: true`1434. Custom ranking: in Algolia → Indices → Ranking → Custom Ranking, add:144 - `desc(sales_30d)` — sort by recent sales descending145 - `desc(conversion_rate)` — secondary sort by conversion rate1465. Algolia updates rankings in real time as you push new product metrics to the index147148### Step 5: Custom / Headless — scoring engine149150```typescript151// Compute a merchandising score for a set of products152interface ProductMetrics {153 productId: string;154 unitsSold30d: number;155 revenue30d: number;156 conversionRatePct: number; // (add-to-carts / page views) × 100157 grossMarginPct: number;158 daysInStock: number; // 0 = out of stock159 daysSinceAdded: number;160}161162interface ScoreWeights {163 salesVelocity: number; // e.g., 0.35164 revenue: number; // e.g., 0.20165 conversion: number; // e.g., 0.20166 margin: number; // e.g., 0.15167 recency: number; // e.g., 0.10 (newer products get a boost)168}169170function scoreProducts(metrics: ProductMetrics[], weights: ScoreWeights): { productId: string; score: number }[] {171 // Normalize each metric to 0–1 range across the set172 const normalize = (values: number[]) => {173 const min = Math.min(...values);174 const max = Math.max(...values);175 return values.map(v => max === min ? 0.5 : (v - min) / (max - min));176 };177178 const salesScores = normalize(metrics.map(m => m.unitsSold30d));179 const revenueScores = normalize(metrics.map(m => m.revenue30d));180 const conversionScores = normalize(metrics.map(m => m.conversionRatePct));181 const marginScores = normalize(metrics.map(m => m.grossMarginPct));182 // Recency: newer = higher score (invert daysAdded)183 const recencyScores = normalize(metrics.map(m => -m.daysSinceAdded));184185 return metrics.map((m, i) => {186 const score =187 salesScores[i] * weights.salesVelocity +188 revenueScores[i] * weights.revenue +189 conversionScores[i] * weights.conversion +190 marginScores[i] * weights.margin +191 recencyScores[i] * weights.recency;192193 // Out-of-stock products get pushed to the bottom194 const adjustedScore = m.daysInStock === 0 ? score - 2 : score;195 return { productId: m.productId, score: Math.round(adjustedScore * 1000) / 1000 };196 }).sort((a, b) => b.score - a.score);197}198```199200## Best Practices201202- **Bury out-of-stock products, don't exclude them** — out-of-stock products should still appear in search (for SEO and wishlists) but rank lower; only completely remove discontinued products203- **Refresh scores daily, not on every page load** — pre-compute and store product scores; computing scores in real time on every collection request is too slow204- **Pin hero products and new arrivals manually** — automated scoring is good for the long tail; manually pin the 3–5 key products you're actively promoting each season205- **Provide a preview mode before applying new rules** — the Shopify Search & Discovery app and Kimonix both offer preview functionality; use it to verify the collection order before pushing live206- **Cap the number of pinned products** — if you pin too many products, the algorithm never gets to show other products; keep manual pins to ≤ 5 per collection207208## Common Pitfalls209210| Problem | Solution |211|---------|----------|212| Best-selling products dominate every collection indefinitely | Add a recency weight and a "new product boost" for items added in the last 14 days; this gives new products a chance to get exposure |213| Merchandising rule conflicts with another rule | In Shopify Search & Discovery and Kimonix, rules have priority order — define which rules override others and document the priority scheme |214| Smart collection adds products that shouldn't be there | Review your collection conditions carefully; using "any condition" instead of "all conditions" is the most common cause of unintended inclusions |215| Performance scores skewed by a single viral day | Use a rolling 30-day window for sales metrics, not all-time totals; cap extreme outliers at the 95th percentile |216217## Related Skills218219- @multi-channel-selling220- @demand-forecasting