Where blocks live
- Block configs: Payload collection fields under
pages,productContent, andcategoryContent. See the Payload blocks field docs. - Renderers: React components inside the Next.js storefront app. A block registry maps each
blockTypeto its component so Payload content resolves at runtime.
Add a new block
1
Define the block in Payload
Add a blocks field to the relevant collection (
pages, productContent, or categoryContent). Give the block a slug and the fields editors need. For example, a hero block might have heading, body, and backgroundImage fields.2
Build the React renderer
Create a React component that accepts the block fields as props and renders the layout you want. Keep it in the storefront app so it can use your design system and shared components.
3
Register the component
Add an entry to the storefront block registry that maps the block
slug (used as blockType) to your React component. The registry is the single source of truth for which blocks the storefront can render.4
Expose the block per collection (optional)
If the block should only appear in certain collections, configure the
blocks field array so the block is listed only where it is relevant. This keeps the editor UI focused.Selection pages
categoryContent supports pseudo categories called selection pages. Create a categoryContent entry with:
kind: "selection"- A custom
routevalue - A
filterQuerythat defines which products to include
/selection/[handle] so shoppers see a curated product grid without a real Medusa category.
Read-only fields for Medusa identity (
title, handle, medusaCategoryId) stay read-only in Payload. Only editorial fields, such as blocks, h1, and seo, are writable.Payload schema
Reference the collections and globals that own blocks and editorial content.
Content management
Learn how editorial content flows from Payload into the storefront.