I recently had a conversation with a client concerning a typical feature that all content management systems should have. The conversation started with a simple question about the Sitecore content management system. The client asked “Why doesn’t Sitecore enable its auto publishing feature by default?” I pondered this for about 2 minutes prior to giving my response. Two minutes was a long time for me to ponder a question I knew the technical answer to. However, the more I thought of how simple it was, the more perplexed I mentally became. After my pondering experience came to an end, the light bulb went off on how to answer this question from a business user perspective.
Before I reveal my answer, I would like to take a moment to explain how Sitecore handles content publishing out of the box.
The Sitecore product has a unique concept of how it stores content that is not ready for site visitors to see. For example, if a content manager creates a new page within a CMS, the content manager does not want that page available to site visitors as SOON as it is created. A content manager wants and needs the ability to change the viewing state of content so that content is flagged when it is ready for users outside of the CMS to view. In Sitecore as well as other content management systems this action is called a "publish" event. "Publish" is the action or process by which one makes content that is not currently able to be seen by site visitors visible. In Sitecore, when a content manager creates content it is stored in a database called “Master”. When the content manager decides to make that content available for site visitors, they would click the “Publish” button.
In its uniqueness, Sitecore will “copy” the content being published from the “master” database to the “web” database. This means that the content is duplicated into another database rather than just being flagged as “Published”. Other content management systems just change the state of content, but Sitecore copies it so that the rendering engine only needs to be concerned about published content. This is a bug plug for Sitecore in terms of product performance and website performance for sites with a lot of content. Nevertheless, this also means that if a content manager chooses to publish the entire website, any item created in the master database will also get published if not explicitly marked for “Do Not Publish”.
As a result, if Sitecore decided to turn on the auto-publishing feature out of the box, it would cause any content that was created to automatically get published after a creation action occurred. It would not properly stage content and would remove the content manager’s ability to publish content when it is ready.
As a best practice, I will continue to recommend that all implementations of Sitecore usage utilize the workflow feature. Sitecore workflow allows you to put content in a state that even if a publishing event occurs, it will not publish the content items until it is completed in the content workflow. This will allow a Sitecore system to have auto-publishing enabled without fear that it will automatically publish unapproved content.