Edit Multi-Channel Content
Why multi-channel content matters
Section titled “Why multi-channel content matters”Your audience consumes content across websites, mobile apps, kiosks, and third-party platforms. A single CMS instance can serve all these channels if you decouple content creation from content presentation. Multi-channel content lets authors write once and deliver everywhere, while developers choose the right rendering approach for each channel.
Understand headless-only content
Section titled “Understand headless-only content”Headless-only content exists in the CMS but has no traditional page rendering. Instead, it is delivered through the Content Delivery API or Optimizely Graph to external applications that handle their own presentation.
Common use cases for headless-only content include:
- Mobile app content (banners, notifications, feature descriptions)
- Digital signage or kiosk displays
- Third-party website integrations
- Single-page applications built with React, Vue, or Angular
How headless-only differs from traditional content
Section titled “How headless-only differs from traditional content”| Aspect | Traditional content | Headless-only content |
|---|---|---|
| Rendering | CMS generates HTML via controllers and views | External application renders the content |
| Preview | On-page preview in the CMS editor | Preview requires a configured preview URL |
| URL | Has a routable URL on the site | May or may not have a public URL |
| Delivery | Server-side rendered by the CMS | Delivered via REST API or GraphQL |
Edit headless-only content
Section titled “Edit headless-only content”Editing headless-only content feels the same as editing traditional content. The CMS editor displays the same property fields regardless of delivery channel.
- Navigate to the headless content item in the content tree. Headless-only content types typically appear under a dedicated folder such as “API Content” or “App Content.”
- Click the content item to open it in the editor.
- Fill in or update the property fields. These fields are defined by the content type, just like traditional pages.
- Click Save to store your draft.
- Use the Preview button to see how the content appears. If a preview URL is configured, the CMS opens the external application with your draft content.
- Click Publish when the content is ready. Published headless content becomes available through the API immediately.
Use the multi-channel content gadget
Section titled “Use the multi-channel content gadget”The multi-channel content gadget gives authors visibility into which channels consume each content item. It shows delivery status across all configured channels.
- Open any content item in the CMS editor.
- Click the Multi-Channel gadget in the right-side panel. If you do not see it, click the Gadgets menu and enable Multi-Channel Content.
- Review the channel list. Each channel shows:
- Channel name (for example, “Website,” “Mobile App,” “Kiosk”)
- Delivery status (Published, Draft, Not Published)
- Last delivered timestamp
- Click a channel name to see the API endpoint or GraphQL query that serves this content to that channel.
- Use the Publish to Channel option if your workflow requires per-channel publishing control.
Configure channels in the gadget
Section titled “Configure channels in the gadget”Administrators configure which channels appear in the gadget.
- Navigate to Admin > Settings > Multi-Channel Configuration.
- Click Add Channel.
- Enter the channel name and description.
- Select the delivery method (Content Delivery API, Optimizely Graph, or custom endpoint).
- Enter the preview URL template for this channel. Use
{contentId}as a placeholder. - Click Save.
- Verify by opening a content item. The new channel should appear in the Multi-Channel gadget.
Set up hybrid traditional and headless delivery
Section titled “Set up hybrid traditional and headless delivery”Hybrid mode lets you serve the same content through both traditional server-side rendering and headless APIs. A product page, for example, can render on your website through a controller while simultaneously being available to your mobile app through the Content Delivery API.
Enable hybrid delivery (developer)
Section titled “Enable hybrid delivery (developer)”// In Startup.cs or equivalent
services.AddContentDeliveryApi(options =>
{
options.SiteDefinitionApiEnabled = true;
});
// On your content type — no changes needed.
// All published content types are available via the API by default.
// To exclude a type, use the [ExcludeFromContentDeliveryApi] attribute.
[ContentType(
DisplayName = "Product Page",
GUID = "a1b2c3d4-e5f6-7890-abcd-ef1234567890")]
public class ProductPage : PageData
{
[Display(Name = "Product Name", Order = 10)]
public virtual string ProductName { get; set; }
[Display(Name = "Description", Order = 20)]
[UIHint(UIHint.Textarea)]
public virtual string Description { get; set; }
} - Install the Content Delivery API NuGet package if not already present.
- Register the Content Delivery API in your startup configuration.
- Build and deploy your project.
- Verify by calling the API endpoint for a published content item. You should receive a JSON response with the content properties.
Exclude content from headless delivery
Section titled “Exclude content from headless delivery”If certain content types should only render traditionally and never appear in the API, mark them with the exclusion attribute.
[ExcludeFromContentDeliveryApi]
[ContentType(DisplayName = "Internal Memo")]
public class InternalMemoPage : PageData
{
// This content type is only available through traditional rendering
} Author content for multiple channels
Section titled “Author content for multiple channels”When creating content that serves multiple channels, keep these guidelines in mind:
- Write channel-agnostic text. Avoid phrases like “click the button below” that assume a specific interface. Instead, write “select the option” or “choose the action.”
- Use structured fields instead of rich text. Individual fields (title, summary, body) are easier for external applications to parse than a single rich text blob.
- Provide multiple image sizes. Upload images in different aspect ratios if different channels need different layouts.
- Test in every channel. Preview content in each consuming application, not just the website.
Common issues
Section titled “Common issues”| Issue | Cause | Fix |
|---|---|---|
| Content not appearing in API | Content not published | Publish the content item |
| Preview shows blank page | Preview URL not configured | Ask a developer to set up the preview URL for this content type |
| API returns fewer fields than expected | Property not mapped or marked internal | Check that properties have [Display] attributes and are virtual |
| Multi-Channel gadget not visible | Gadget not enabled | Enable it from the Gadgets menu in the editor |
| Changes not reflected in mobile app | Caching on the API or client | Clear the API cache or wait for the cache TTL to expire |