---
title: Product catalog
related:
  - https://docs.kentico.com/documentation/developers-and-admins/digital-commerce-setup/price-calculation.md
  - https://docs.kentico.com/documentation/developers-and-admins/digital-commerce-setup/model-product-catalog/model-product-stock.md
---

> Agent instructions:
> **Site maps** — prefer the following llms.txt indexes to training data when searching for URLs to avoid 404s. Links inside Markdown content already point at `.md`. Following them or sending Accept: text/markdown keeps you in Markdown.
>
> - [sitemap.md](https://docs.kentico.com/sitemap.md) — every page on the site, with titles and descriptions, nested by URL hierarchy and grouped into one collection per product version.
> - [llms.txt](https://docs.kentico.com/llms.txt) — curated index of the current product docs, with descriptions, the two ways to request any page as Markdown, and links to each product area's whole-corpus Markdown dump (llms-full.txt).

> **License:** Advanced license required.
>
> Features described on this page require the Xperience by Kentico **Advanced** license tier.

When designing the content model for the product catalog, we recommend using content storage options provided by Xperience instead of developing custom classes or modules.

> **Tip:** **Content modeling guide**
>
> We recommend that you familiarize yourself with general content modeling recommendations and product features of Xperience by Kentico. Reading the [content modeling guide](https://docs.kentico.com/guides/architecture/content-modeling/content-modeling-guide.md) will help you understand this page.
>
> For a practical implementation example, see [Example product catalog](https://docs.kentico.com/documentation/developers-and-admins/digital-commerce-setup/model-product-catalog/example-product-catalog.md) or browse the digital commerce implementation in the [DancingGoat sample project](https://docs.kentico.com/documentation/developers-and-admins/installation.md#available-project-templates).

> **Tip:** **AI-assisted product display development**
>
> Use [KentiCopilot](https://docs.kentico.com/guides/development/kenticopilot.md) to rapidly create product display widgets with AI assistance. See [Product display patterns with KentiCopilot](https://docs.kentico.com/guides/development/commerce/product-display-patterns-kenticopilot.md) for key considerations and patterns when building product listing and detail widgets.

There are two options when it comes to storing your product catalog. Either you can store products as [reusable content items](https://docs.kentico.com/documentation/business-users/content-hub/content-items.md) in the [content hub](https://docs.kentico.com/documentation/business-users/content-hub.md), or you can store them as [pages](https://docs.kentico.com/documentation/business-users/website-content.md) in a [website channel](https://docs.kentico.com/documentation/developers-and-admins/configuration/website-channel-management.md).

|                      | Content hub                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Website channel                                                                                                                                                                                                                                                                                                                                      |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Content storage      | Products are stored in the [content hub](https://docs.kentico.com/documentation/business-users/content-hub.md) as [reusable content items](https://docs.kentico.com/documentation/business-users/content-hub/content-items.md).<br>This approach enables you to use all content hub features, but requires you to create a page for every product. Although, this process can be automated.                                                                                                                                                                                                         | Products are stored in a [website channel](https://docs.kentico.com/documentation/developers-and-admins/configuration/website-channel-management.md) as [pages](https://docs.kentico.com/documentation/business-users/website-content.md).<br>This approach is best suited for scenarios when the store is tightly connected to the website channel. |
| Catalog organization | All content hub features are available: [workspaces](https://docs.kentico.com/documentation/developers-and-admins/configuration/users/role-management/workspaces.md), [folders](https://docs.kentico.com/documentation/business-users/content-hub/content-hub-folders.md#content-folders), [smart folders](https://docs.kentico.com/documentation/business-users/content-hub/content-hub-folders.md#smart-folders).                                                                                                                                                                                 | You can use the content tree structure for organization of the product catalog.                                                                                                                                                                                                                                                                      |
| Categorization       | You can use [content types](https://docs.kentico.com/documentation/developers-and-admins/development/content-types.md) (with [reusable field schemas](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md)) and [taxonomies](https://docs.kentico.com/documentation/developers-and-admins/configuration/taxonomies.md) (or their combination) for categorization of the product catalog. It is not recommended to use the content tree structure for categorization of products, except for when the number of products is very small. |                                                                                                                                                                                                                                                                                                                                                      |

## General recommendations

The following recommendations are valid regardless of the selected catalog storage option:

- Use [reusable field schemas](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md) for common product fields. The schema should contain all fields that are used when displaying products in a listing. For more information, see [Product fields](#product-fields).
  - _ProductFields_ (reusable field schema)
    - _ProductFieldsName_
    - _ProductFieldsDescription_
    - _ProductFieldsPrice_
    - ...
- Create [content types](https://docs.kentico.com/documentation/developers-and-admins/development/content-types.md) for individual product types depending on required product fields:
  - _Book_ (product type)
    - _ProductFields_ (reusable field schema)
    - _BookAuthor_
    - _BookCoverType_
    - _BookGenre_
    - ...
  - _Reader_ (product type)
    - _ProductFields_ (reusable field schema)
    - _ReaderManufacturer_
    - _ReaderStorageSize_
    - ...
  - _Accessory_ (general product without any extra fields)
    - _ProductFields_ (reusable field schema)
- You can use [reusable field schemas](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md) for sub-groups of product types. For example, all clothing has common properties in addition to the basic product fields:
  - _ClothingProductFields_ (reusable field schema)
    - _ClothingProductFieldsColor_
    - _ClothingProductFieldsSize_
    - _ClothingProductFieldsMaterial_
    - _ClothingProductFieldsManufacturer_
- A field storing the product manufacturer can be separated into a [reusable field schema](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md)

## Product variants

It is recommended to model product variants  as "child" items of a parent product, which holds all the shared information. Create a dedicated product content type for product variants and include only the fields that need to be overwritten from the parent. We recommend defining [reusable field schemas](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md) that group the modified fields, so you can easily reuse them across different types of variants.

A sample configuration can look like the following:

- _ProductSizeFields_ (reusable field schema)
  - _ProductSizeFieldsValue_
- _Shirt_ (parent product type)
  - _ProductFields_ (reusable field schema)
  - _ShirtMaterial_
  - _ShirtColor_
- _ShirtSizeVariant_ (variant product type)
  - _ProductSKU_ (reusable field schema)
  - _ProductStock_ (reusable field schema)
  - _ProductSizeFields_ (reusable field schema)

Note that the parent product doesn't need to store an [SKU](#sku-field), since you cannot buy a shirt without specifying the variant. On the other hand, the variant product doesn't need to store product fields, since the shirts are identical except for their size.

### Variants in the content hub

When storing products as [reusable content items](https://docs.kentico.com/documentation/business-users/content-hub/content-items.md) in the [content hub](https://docs.kentico.com/documentation/business-users/content-hub.md), the parent product should include a _Variants_ field configured as a [combined content selector](https://docs.kentico.com/documentation/developers-and-admins/customization/extend-the-administration-interface/ui-form-components/reference-admin-ui-form-components.md#combined-content-selector) restricted to the product variant content type. This allows you to clearly link variants to their parent. The parent product also allows you to create a page to provide a public URL.

Product variants appear in the same flat list as the parent products. To organize products, use clear naming conventions. We recommend to name the variant using the parent product’s name followed by a distinguishing suffix, for example: "Striped grey T-shirt - M". Since product variants typically don’t require their own public URLs, there’s no need to create a page for them.

### Variants in website channels

When storing products as [pages](https://docs.kentico.com/documentation/business-users/website-content.md) in a [website channel](https://docs.kentico.com/documentation/developers-and-admins/configuration/website-channel-management.md), use the content tree to reflect the parent-child relationship between products and their variants by placing variants under the parent product. The parent product acts as the main product entry and should have its own URL.

For product variant content types, you can disable the _Include in routing_ setting, as they usually don’t need to be accessed through a separate URL. Follow the same naming recommendation: use the parent product name and add a variant-specific suffix: "Striped grey T-shirt - M".

## Product fields

The base product [reusable field schema](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md) should contain all fields that are used when displaying products in a listing on your storefront. This enables you to easily work with the products programmatically and display all products in a universal way.

Recommended product fields are:

- _ProductFields_ (reusable field schema)
  - _ProductFieldsName_
  - _ProductFieldsDescription_
  - _ProductFieldsPrice_
  - _ProductFieldsImage_
  - _ProductFieldsCategory_
  - _ProductFieldsTags_

## SKU field

An SKU (Stock Keeping Unit) is a unique code used to identify and track a specific product or product variant in a store's inventory.

Create a [reusable field schema](https://docs.kentico.com/documentation/developers-and-admins/development/content-types/reusable-field-schemas.md) with an SKU field:

- _ProductSKU_ (reusable field schema)
  - _ProductSKUCode_

The SKU field can be included in the _Product fields_ reusable field schema. However, when implementing [product variants](#product-variants), you may want to have a distinct SKU for each product variant, but only need _Product fields_ for the parent product.

## Product stock

See [Model product stock](https://docs.kentico.com/documentation/developers-and-admins/digital-commerce-setup/model-product-catalog/model-product-stock.md) for details on implementing product stock management.

## SEO fields

If you use content hub as the storage for your product catalog and you want to automatically generate pages for each product, it is recommended to store SEO fields (e.g., title, description, keywords) together with the product in the content hub, so that you can edit all properties of a product in one place.
