---
title: Design content using Page Builder
---

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

## Design content using Page Builder

[Page Builder](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder.md) is a user-friendly interface where non-technical users manage the content and layout of pages using configurable components.

Editors work with _Page Builder_ in [website channels](https://docs.kentico.com/documentation/developers-and-admins/configuration/website-channel-management.md). They can build entire pages (or their sections), experiment with different layouts and page designs, and immediately see the results. Equipped with widgets and sections, editors can lay out content without asking developers for help whenever they want to build a new page or adjust the design of an existing page. Given the flexibility it provides to marketers, _Page Builder_ is well-suited for frequently updated or campaign-focused pages.

[Page Builder](https://docs.kentico.com/guides/development/page-builder.md)  allows content editors to design parts or whole pages wherever developers enable it (by defining [editable areas](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/create-pages-with-editable-areas.md)). Editors can use two types of components to format content using _Page Builder_: [sections](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/sections-for-page-builder.md) and [widgets](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/widgets-for-page-builder.md).

**Sections** specify the visual layout for widgets. They represent reusable pieces of markup that can store an arbitrary number of **widget zones** – areas where content editors place _widgets_.

**Widgets** are reusable components that content editors and non-technical users can quickly work with. Widgets give users more power and flexibility when adjusting page content and basic editing of text and images. By working with widgets, users decide which components are placed where on the page.

### How Page Builder stores content

Developers prepare _Page Builder_ components based on project requirements.

_Page Builder_ stores widget content per instance, not as reusable structured data. Before choosing it to store specific content, ask whether this content will ever need to appear in more than one place, for example, in a listing, a search result, another page, or a different channel. If yes, _Page Builder_ is the wrong storage approach. Store the content in the _Content hub_ instead, and give editors a display widget to render this piece of content where they need. You can also provide editors with [widget properties](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/widgets-for-page-builder/widget-properties.md) to override values retrieved from the _Content hub_.

If content reuse is not a requirement for a given page or section, the per-instance model is a reasonable fit.

When you are deciding how to use _Page Builder_ in your project, also consider the following:

- Layout vs. content control. Does this content type require editors to control the layout, or only the content? For many webpage content types, especially in enterprise-size projects, layout is a developer concern and should be defined in code to ensure consistency. Introducing _Page Builder_ widgets to store content adds flexibility that editors might not need.
- Scope of enablement. Consider webpages where editors should be able to change layout without creating formatting issues or introducing design inconsistencies. The larger the number of _Page Builder_ pages, the harder this risk becomes to manage. One approach is to enable _Page Builder_ only for specific page areas. This gives marketers control on-page engagement and guide visitors through the [customer journey](https://docs.kentico.com/guides/customer-journeys.md), while keeping the overall content design consistent.
- Content governance and longevity. Widget instances store content independently. The more instances that duplicate the same content, the more difficult content audits and bulk updates become.

### Understand how Page Builder stores content

All content added directly to a Page Builder widget is stored in a single database field (`CMS\_ContentItemCommonData → ContentItemCommonDataVisualBuilderWidgets`), making it difficult to reuse. On the other hand, widgets that add design to structured content store only a reference to the linked content (using the GUID value).

Sometimes, projects require WYSIWYG editing through widgets that also store content. While specifying the project requirements, we recommend considering the implications of this design decision. Storing content directly in widgets significantly impacts **content reusability** or the **project's upgradeability**.

### See the different types of Page Builder widgets

Developers can prepare widgets to handle content in three ways:

- [Widgets that present structured content](#widgets-that-present-structured-content)
- [Widgets that store and design the content at the same time](#widgets-that-store-and-design-the-content-at-the-same-time)
- [Widgets that combine both inline editing and structured content](#widgets-that-combine-both-inline-editing-and-structured-content)

### Widgets that present structured content

Editors add these widgets into appropriate _Page Builder_ sections and select the content to display. Xperience can store the content itself in one of the following locations:

- **As content items in the Content hub**.
  The widget serves only as a design container for the content stored in the _Content hub_. For example, a _Promotion_ widget displays data stored in the _Promotion_ content type. The editor either selects an existing promotion item, or creates a new one through widget properties:

  ![Selecting content items from Page Builder widgets](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/image-2023-8-16_14-44-13.png "Selecting content items from Page Builder widgets")
- **Elsewhere in Xperience website channel application.** The widgets serve only as design containers for the content stored (and presented) elsewhere. For example, as shown below, editors can add a widget to a page and configure its source page using the _Combined content item_ selector. The widget displays only several properties of the _Article_ content type:

  🎬 [Video](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/Xkb-Adding-A-Structured-Widget.mp4)

#### What does working with the reusable content look like?

For example, imagine editors are building a campaign landing page.

The page will contain a _Hero_ element. From the design perspective, editors should select only the _Hero banner_ content type from the _Content hub_ to populate a **Banner widget**. From the editor's perspective, adding reusable content to the page and displaying the structured data might look like the following video:

🎬 [Video](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/xbyk-content-modeling-addding-banner-widget.mp4)

An editor adds a banner widget to the page. Instead of using the page data as source for the _Banner_ widget, editor selects a custom hero banner content item from the Content hub.

When modeling the content storage, always consider the editor's workflow. Help them understand what type of content they're supposed to select.

For example, you can use instructions next to the selectors in the widget [properties](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/widgets-for-page-builder.md) and your project documentation to ensure editors receive enough guidance. As you can see in the image below, editor instruction explains that editor needs to select only one café from the content tree, and a note that the selected café item should include a photo for the best visual experience.

![Widget with a selector and an explanation text](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/xperience-by-kentico-cafe-widget-properties-explanation-text.png "Widget with a selector and an explanation text")

Similarly, ensure that editors will not unintentionally break the page experience by selecting content that doesn't belong.

- Developers can restrict the selection to pages of specific _webpage types_ that fulfill required conditions (e.g., have the URL feature enabled). See samples of the Xperience selectors in [Reference - Admin UI form components](https://docs.kentico.com/documentation/developers-and-admins/customization/extend-the-administration-interface/ui-form-components/reference-admin-ui-form-components.md). For example, the pages that editors cannot select are grayed out in the _Page selector_ component.

  ![Page selector component with filtered selection](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/xperience-by-kentico-selector-widget-properties.png "Page selector component with filtered selection")
- Similarly, developers define which type editors select into the widget properties, such as the _Benefits_ widget in the Kbank demo site. First, editors use radio buttons to choose between a _Product_ benefit or a _Company_ benefit. Then, they decide whether benefits appear with a dot, a number, or an image. Finally, they select specific benefit content items from the _Content hub_.

  ![Selector content type selection](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/cm-guide-selecting-one-type-of-content-type.png "Selector content type selection")

### Widgets that store and design the content at the same time

With these _single-purpose content widgets_, editors can manage the content in a WYSIWYG manner using [inline editors](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/widgets-for-page-builder/inline-editors-for-widget-properties.md), use the widget's properties and add content through the widget's configuration dialog, or combine both. The out-of-the-box _Rich text_ widget is an example of a widget with advanced text styling capabilities.

The _Banner_ widget on the Dancing Goat [sample site](https://devnet.kentico.com/articles/kentico-xperience-sample-sites-and-their-differences)  shows both _inline editors_ and _widget configuration properties_ where all the input data is stored within one database field.

![Widgets that store and design the content at the same time](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/xperience-by-kentico-banner-widget-editing-properties.png "Widgets that store and design the content at the same time")

Similarly, the _Page heading_ widget on [Kbank demo site](https://docs.kentico.com/modules/content-modeling-guide/what-is-a-content-type.md#best-practices-in-kbank-demo-site) allows editors to add content, such as a title, decide on the heading type, and adjust its margin using dropdown selectors in widget properties.

![Add formatting metadata to content using a widget](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/cm-guide-page-heading-properties.png "Add formatting metadata to content using a widget")

### Widgets that combine both inline editing and structured content

_Mixed-content widgets_ allow editors to reuse structured content, e.g., by providing a selector to pick content from the content tree. At the same time, editors can use the widget’s editable properties to overwrite some of the content pulled from the selected page or create brand-new content. Editors can also provide additional information or behavior to their content, such as ensuring that hyperlinks to external websites open in a new tab.

![Mixed-content widget example](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/xperience-by-kentico-card-widget-properties.png "Mixed-content widget example")

The image above shows _Card_ widget properties where editors can customize all content and the content to which the widget links to. Editors can also:

- Link the card to a page either by entering a URL or selecting a page from the content tree, and using the target page as the source of the data for the widget, or providing custom values to override this data.
- Add a custom title and a formatted summary using a rich‑text editor.
- Assign a different card image by selecting an existing asset or creating a new one.
- Define button label text, link text for a call‑to‑action, and an optional external link, and use a checkbox that ensures the link opens in a new tab.

> **Tip:** We recommend limiting the use of mixed-content widgets to specific pages (sections), as content stored in these widgets can be more difficult to reuse in other channels.

### Drive displaying data using taxonomy

Design dedicated widgets to consume [taxonomy terms](https://docs.kentico.com/documentation/developers-and-admins/configuration/taxonomies.md) as input and dynamically display content based on those terms to support taxonomy-driven content. For example, a _content listing widget_ should allow editors to select a [taxonomy tag](https://docs.kentico.com/guides/digital-marketing/work-with-taxonomies/taxonomies.md) or [smart folder](https://docs.kentico.com/documentation/business-users/content-hub/content-hub-folders.md#smart-folders) as a filter. The widget then queries and displays only the matching items. It should also offer options to exclude certain content, such as by listing available tags or applying an "exclude from display" tag in article itself, to give editors more control over the final output. Ideally, the widget will allow editors to wrap the listed content with additional content (e.g., text or visuals) to ensure that content remains reusable and manageable directly from the _Page Builder_.

![A listing widget with taxonomy filtering](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/cm-news-listing-article-with-filtering-via-taxonomy-tags.png "A listing widget with taxonomy filtering")

### Recommendations – Page Builder

> **Tip:** **Combine structured content and widgets**
>
> To make the website’s content both reusable and future-proof, we recommend storing the content of the widgets using the structured content format. Developers should prepare widget properties that allow editors to format content using WYSIWYG editing capabilities.
>
> Based on the project requirements, the structured content of widgets can be stored in a dedicated section in the content tree or directly in a hierarchy under the page as child items.

> **Tip:** **Limit using widgets for single-purpose content**
>
> Xperience stores the content input directly into widgets within one database field for the whole page. We recommend storing content in widgets only when the content is not going (or doesn’t have the potential) to be reused on the website. This content can work on one-off pages, such as campaign landing pages.

> **Tip:** **Create sections with designing capabilities**
>
> We recommend creating sections with properties to let editors define how the content they add via widgets displays on the website. Some examples of section properties are a field for a URL parameter (Anchor tag) for deep linking, a property to define the number of columns within the section, a property to adjust the margin or padding of widgets, and changing the color of the section, and similar properties.

> **Tip:** **Set restrictions on editable areas**
>
> Use editable area restrictions to ensure editors can add only desired widgets or sections to specific areas. This ensures page designs do not break (e.g., in different browsers) and creates boundaries for data predictability (when considering future upgrades). Find out more in [Create pages with editable areas](https://docs.kentico.com/documentation/developers-and-admins/development/builders/page-builder/create-pages-with-editable-areas.md).

> **Tip:** **Create custom widgets to add markup to pages**
>
> Typically, in the early stages of a live project, editors might need to add custom HTML markup or include scripts to embed 3rd party applications. Project owners sometimes need to remember this or similar scenarios when detailing project requirements, so ensure your project gets this low-hanging fruit to make editors happy.
>
> We recommend creating custom widgets that allow editors to add scripts or HTML markup to the page's _head_ or _body_. For example, editors might use an  _Anchor widget_  to enable linking to a section of the page or a  _Script widget_ to add JavaScript that runs a custom-built mortgage calculator.
>
> If editors will reuse these scripts or markup on different pages, developers can prepare a custom _Script_ content type or widget.

> **Tip:** **Add instructions to selectors in Page Builder components**
>
> When building widgets that display structured content, provide editors with clear instructions describing what content items they should select.  You can use the **ExplanationText** [widget property](https://docs.kentico.com/documentation/developers-and-admins/customization/extend-the-administration-interface/ui-form-components/editing-components.md) and provide contextual information specific to the selected widget. Providing additional guidance ensures that editors don't break the visual experience of the website by mistake. Also, include clear instructions about how editors should use every widget on the website in your project documentation.

> **Tip:** **Make designing content generic**
>
> Though you might want to store design-specific information, like exact color codes or sizes, inside the channel-specific or reusable content types in the _Content hub_, we do not recommend doing this.
>
> From a content longevity perspective, you want to have your design information as agnostic to the visual design as possible. When you decide to, for example, redesign your brand, it's easier to remap the generic class name to new colors than change the specific _#F05A22_ brand color code in hundreds of different places. The following screenshot shows styling options in the Kbank demo site, allowing editors to only use predefined background styles, such as Default, Primary, Secodary, or Card using a dropdown selector.
>
> ![Styling options](https://docs.kentico.com/docsassets/modules/design-content-using-page-builder/cm-guide-section-properties.png "Styling options")

> **Info:** In typical Xperience projects, **these three approaches are combined together** to create an effective content management experience that supports reusing the content as necessary. Stakeholders must decide how they'll work with the content when defining the project requirements. However, to make your content future-friendly, we recommend storing it in a structured format.
