Skip to content

Catalog Architecture

intermediate
πŸ“œCorecommerce

A flat list of products breaks down the moment your store grows past a few dozen items. Customers cannot browse efficiently, marketers cannot merchandise by season or audience, and developers cannot build faceted navigation or dynamic landing pages. Without a deliberate hierarchy, every team improvises, and the storefront becomes inconsistent.

Optimizely Commerce solves this with a four-level catalog hierarchy that separates organizational concerns from sellable concerns. The structure gives marketers browsable categories, gives developers predictable data shapes, and gives operations teams clear SKU-level tracking.

Commerce organizes sellable items into four distinct levels, each with a specific role.

LevelPurposeExample
CatalogTop-level container that groups an entire product line or storefront”B2B Industrial Supplies”, β€œConsumer Storefront 2026”
CategoryOrganizational node for navigation and merchandising”Power Tools”, β€œSafety Equipment”, β€œFasteners”
ProductA conceptual item that represents what you sell”Cordless Drill Model X200”
VariantThe specific purchasable SKU with unique price and inventory”X200 - Blue, 18V”, β€œX200 - Red, 24V”

Categories can nest to any depth. A β€œPower Tools” category might contain β€œDrills”, β€œSaws”, and β€œSanders” as subcategories. Products sit at the leaf level and always contain at least one variant.

Customers think in terms of products. They want β€œthat drill.” But your warehouse, pricing engine, and order system think in terms of SKUs. A single product might have dozens of variants across size, color, voltage, or region. Separating the two lets marketing describe the product once while operations tracks each variant independently.

This separation also prevents combinatorial explosion in your catalog UI. Instead of creating a separate product entry for every color-size combination, you define variation axes on the product and let Commerce generate the variant matrix.

Every level in the hierarchy carries metadata. Categories have descriptions and images for navigation pages. Products carry marketing copy, specification sheets, and SEO fields. Variants hold SKU codes, weight, dimensions, and any attribute that differs between purchasable options.

The two editions handle catalog extensibility differently.

CapabilityConfiguredCustomized
Adding fields to productsAdmin UI property editorCode-defined content types
Custom product typesPredefined templates with optional fieldsUnlimited custom types inheriting from base classes
Category nestingUnlimited depth via UIUnlimited depth via UI or API
Variant generationAutomatic from defined axesManual or automatic via custom logic
Import/exportBuilt-in CSV and feed supportAPI-driven with custom transform pipelines

Choose Configured when your catalog follows standard retail patterns. Move to Customized when you need computed properties, cross-variant logic, or catalog structures that do not map to the built-in templates.

Commerce supports multiple catalogs within a single site. Common patterns include:

  • Regional catalogs β€” Separate product lines for different markets, each with localized content and currency-specific pricing
  • Channel catalogs β€” One catalog for the public storefront, another for the B2B portal, sharing some products but with different visibility rules
  • Seasonal catalogs β€” Time-bound collections that activate and deactivate on schedule without disrupting the main catalog

Products can belong to categories across catalogs, which avoids duplicating product data when the same item appears in multiple storefronts.

The catalog is not just a database. It feeds into search indexing, pricing resolution, inventory checks, and content rendering. When a product changes, Commerce publishes events that downstream systems consume. Search indexes rebuild, cached pages invalidate, and pricing recalculates.

This event-driven approach means catalog updates propagate without manual cache clearing or redeployment. It also means you should design your custom properties with indexing in mind β€” every field you add to a product potentially becomes a searchable facet or a filter in your navigation.

  • Too-flat hierarchies β€” Putting all products in one category defeats browsing and merchandising. Use at least two levels of categorization.
  • Variant overuse β€” If two items share nothing but a brand name, they are separate products, not variants. Variants should differ only in purchasable attributes like size or color.
  • Ignoring the product level β€” Skipping straight from category to variant loses the grouping that powers product comparison, cross-sell, and search result clustering.