Inconvenient Page Title <title> element

, , ,

During my last Web Content Management (WCM) project built on top of Microsoft Office SharePoint Server (MOSS) 2007 I noticed that SharePoint was rendering two <title> elements on all pages:

HTML source of a Publishing Page with two title elements in the head section

The first title element was the one defined by me in the Master Page. That title element correctly displayed the title of the page using a custom control:

HTML title element wrapped in an ASP.NET ContentPlaceHolder control

For some reason SharePoint was automatically adding the second – empty title element during the rendering process of the page.

Having two title elements in an (X)HTML page is not allowed and results in an error during the markup validation process:

Error in the markup validation process caused by two title elements in the HTML

It is not the first time I have noticed such behavior. I saw it for the first time a while ago, while I was working on the Imtech SharePoint Compliancy Toolkit to improve accessibility of WCM solutions built on top of MOSS 2007. Because the toolkit uses HTML post processing to clean up the markup it allowed me to remove the second title element in the markup cleaning process.

In the project I’m working on at the moment there is no accessibility requirement which requires the use of the Imtech SharePoint Compliancy Toolkit. We were asked though to deliver an XHTML Transitional valid markup. To find out the reason of the doubled title element I did some research on the page rendering process.

One down one to go

During my research I’ve found that rendering two title elements is caused by not including the title element as a child element of the head section of the page. In the Master Page we were using, the title element was wrapped in a ContentPlaceHolder. It seemed like at some point SharePoint is checking whether the page has a title and if it doesn’t, it adds a new title element to the head section of the page.

Looking a bit further in the rendering process I noticed that it’s not SharePoint that is responsible for the check but ASP.NET! If I’m correct the HtmlHead control checks whether a title element has been defined. If not it creates a new title element. Because the title is wrapped in a ContentPlaceHolder it’s not being detected as a child control of the HtmlHead control and thus the check fails resulting in an additional title element.

The fix

Title element added as a child element of head

The solution to this problem was straight-forward. After removing the ContentPlaceHolder from the head section and adding the title element just below the encoding definition, the second title element disappeared from the output:

HTML output of the Publishing Page after including the title as a child control of the head element: only one title element is being rendered

Lessons Learned

Because I was working with MOSS 2007 I suspected it to be the reason of this faulty behavior. It turns out that although SharePoint enriches the rendering process, ASP.NET still has a lot of influence on how the output HTML looks like. Whenever something works not as you would expect it to, it might be helpful to not only look at SharePoint-specific components but those provided with ASP.NET as well.

At some point I compared the Master Page I was using with the Minimal Master Page sample provided on MSDN. Surprisingly the Minimal Master Page has exactly the same issue as it wraps the title element in a ContentPlaceHolder. Understanding the code you are using is a very important part of the troubleshooting process.

Possibly related posts

3 Responses to “Inconvenient Page Title <title> element”

  1. Steve Ruiz Says:

    I've had this same problem, however there is a fix in case you need the title to be placed inside a ContentPlaceHolder:

    place this after your content place holder.

  2. Steve Ruiz Says:

    Looks like my html was scrubbed from the previous comment:

    <title visible="false" runat="server"><%– hack to turn the auto title off –%></title>

    is the code I was trying to show

  3. Sam Says:

    Thanks Steve Ruiz, this is a more acceptable solution for me when trying to get ASP.NET to pass W3C validation, I don't know if title tags in content placeholders is an acceptable way of dynamic titles but seems to work well for me otheriwse, same with dynamic meta tags.

Leave a Reply

Security Code:

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS
Copyright © 2007 - 2009 Waldek Mastykarz

Creative Commons License