graphical user interface, application

Last updated: April 2023 

The idea of "separating content and presentation" is sacrosanct in content management. It's considered one of the core benefits of using a content management system at all. It's as close to a universal principle as we have in this industry.

Peer-reviewed white papers have been written about this. The one linked here even traces this concept back to Aristotle's ideas of logo and lexis – the content of a speech and the style of rhetoric used to deliver it – proving this idea has literally been with us since the dawn of civilization.

The implied benefit is that your content can stay "pure," meaning free of any applied presentation layer. Your content is stored as pure data in the back end, completely ignorant of how it might be presented.

When you want to deliver something from your content repository to a channel, you apply some presentation, rendering, or template, and transform it into a form that's easy to consume in that channel:

  • Content bound for a web site gets turned into HTML via some templating language (Razor is common in .NET)
  • Content bound for print gets turned into a PDF, via XSL-FO or PrinceXML
  • Content bound for SMS might get truncated and concatenated with a URL

The possible channels are endless, and still growing with omnichannel digital experiences across web, mobile apps, social, email, and more becoming the new norm.

The most common use of a traditional CMS for the last couple decades has been to manage and maintain a website (think WordPress). The idea of content is universal and enduring, but for a long while, websites and web pages were pretty much all anyone did. We all talked a big game about "content re-use" and "multi-channel publishing," but for many years, the web was the only thing we were concerned with.

Lots of "web CMSs" (WCM or WCMS) popped up to meet this need in the late 90s and early 2000s. They qualified their names with "web" or "W" to differentiate themselves from the enterprise content management systems (ECM, commonly use for internal company content) and document management systems (an outdated term) that dominated the market prior to that time.

Some systems embraced this role with lots of web-specific functionality. They provided pre-built HTML widgets and built-in web navigation management systems and all sorts of things that were very specific to publishing HTML. Lots of them baked these features in so deep that they became inextricable from the web channel. They didn't manage "pure" content anymore – all stored content was saturated with web-specific features, so you couldn't reuse it elsewhere.

Optimizely never did this.

Since its founding, and to this day, Optimizely manages pure content. It makes no assumptions about what you want to do with that content. Optimizely has always believed in the separation of concerns. Optimizely's repository can be said to be "abstracted" away from web delivery.

The relationship between Optimizely content and HTML published to the web is loose. In an Optimizely instance, content is pure until literally the last moment it goes out the door. Only at that point does Optimizely apply a template to turn it into HTML, and this process can be easily side-stepped.

This was true long before we had a Content Delivery API, or any explicit headless CMS functionality. Almost a decade ago, I was working on Optimizely projects that would be called "headless" today, long before that word was on anyone's lips or feature checklists.

(Some nostalgia: back in the Web Forms days, we translated Optimizely content into XML from Generic Handlers. This was before MVC, before WebAPI, and even before JSON got heavy adoption. Good times.)

So, if you don't want to render HTML...don't. If not HTML, how would you render the content? CSS? Javascript? Well, that's up to you and your requirements. Use Optimizely as a headless content management system, go API-first (we already offer RESTful APIs), build your own front-end frameworks, make it composable if you’d like. If the use case fits, wear it – the sky's the limit.

Of course, layered on top of this content foundation are lots of tools and workflows (built with user experience in mind) to make it easy for content creators and content editors to create and deliver a website. In a sense, our core content management features are "wrapped" in website management tools. You can work with your content at the pure level, or take advantage of things like URL management, page composition, and other things that only make sense on the web.

To prove this, I wrote some code. I've made it available on GitHub here:

Managing Non-Web Content in Optimizely

This is some sample code showing how to use Optimizely's API to manage content that might never see the inside of a browser. There's a README file that explains the technical specifics. It's anti-climactic, by design. It looks a lot like the code used to manage all other Optimizely content. This is not a coincidence.

From the README:

Optimizely content is based on a hierarchy of classes. The traditional "web" content is actually built on a foundation of more pure content representations.

These objects will never appear in Edit Mode, nor will they have URL – and they shouldn't, because they're not web content.

They're just...well, content.

Not only are these objects easily manipulated with Optimizely's API, we offer a UI to edit them: Content Manager. It's quite simple to configure Content Manager to show you a simple grid or table view of this non-web content, and allow you to create, edit, and delete objects. Additionally, this content is fully available over our Content Delivery API.

Put another way: there's a fully featured headless CMS living inside a more fully-featured web CMS. If you want the best of both worlds, here you go: use the web tools when you want, and when you need something more generic, well, we've always done that.

As I note in the README:

This is not a new feature. It's not even new code. This functionality has been in the product for years.

In Optimizely CMS, not all content is web content. The fact that we use content to generate a website is almost incidental.

It's your content. You decide what you want to do with it.