How would you structure shared content across multiple channels in Xperience by Kentico?

Technical / Architecture Question

How would you structure shared content across multiple channels in Xperience by Kentico?

We have hundreds of user profile pages with real URL slugs accessible on public sites. Each channel must render the profile page template, so the content should come from a single source of truth. However, each channel also needs its own aliases for the same profiles.

My current idea:

  • Create a shared content type in the Content Hub for user profiles.

  • In each channel, create profile pages that reference the shared content via a selector.

  • The challenge: this duplicates management effort. For example, deleting a profile in the hub requires deleting it in every channel.

  • It gets more complex as we plan to add a third channel, which will also need to display the same profiles with its own templates and slugs.


Question:
What architecture would you recommend to avoid duplication while keeping profiles reusable across channels with unique aliases and templates?


Environment

  • Xperience by Kentico version: [31.7.0]

  • .NET version: [10]

  • Execution environment: [Private cloud (Azure/AWS/Virtual machine)]

Tags:
Channels Content modeling Project strategy Content hub

Answers

I would ask the question "Can this page be completely rendered through CONTENT (no widgets)?"

If the answer is yes, I would push to have a set URL route (/profiles/{user-profile-url-segment}) that renders the template from the uniform content item(s). The content item should contain a unique url-segment taht acts as the lookup code, and what I did for SEO stuff is i had a "Content Item SEO Metadata" reusable content type that contained the normal stuff (Page title, description, keywords, OG image, etc) that can be attached to Reusable content.

If it requires widgets, then indeed keeping as much in a uniform location, and having 'pages' pull that in (along with then allowing widgets and other content) to be set. Perhaps some sort of global even that if the profile content item gets deleted, the related profile webitem pages also get deleted?

A LOT of my site (physicsclassroom.com) is actually structure reusable content and hard-set templates and routes.

Thanks @Trevor for the response.

Answering your question: It can be fully rendered through content, however, the template should support widgets, since the editor can eventually go to a page and add a custom widget to a particular profile.

But I got your point and it makes sense. I think we can also set a field on the shared content type within the content hub for the profile, so editors to set:

Url Slugs per Channel [A]:

  • /profile/last-name-first-name
  • /profile/two

Url Slugs per Channel [B]:

  • /member/first-name-last-name
  • /member/two


Maybe that is not possible. Actually, I have been thinking if there is a way to share content cross-channels, like for example: Channel [A] has the original content pages, then on Channel [B], There is a reference to that page with their own url slugs, or maybe we don't need a reference, but just see if the API is able to retrieve content from one channel to another and hard code the routes as you mentioned.


Thanks again for the reponse

I'd take a slightly different approach NOW. Prior in Portal Engine I'd do exactly what Trevor mentions. However, with the way things are now, we tend to use a combination of Page Builder and Templates to give the user the flexibility they need/want.

What I'd suggest would be the following:

  1. Define your "<profile>/<member page>" in a setting or content type or in the widget definition for the channel.
  2. Add a custom route that would handle your / path on the controller action you want to execute.
  3. Add a page in the content tree for the member's "profile" to be displayed on.
  4. Build a profile widget that references that setting value per channel from #1 above.
  5. Place the widget on the profile page.

Maybe in your custom settings for the channel, you define your profile page AND the view name or some css classes that get applied when the view is rendered so you can make them somewhat "custom" looking per channel.

To response this discussion, you have to login first.