According to the W3C spec:
Every HTML document must have a TITLE element in the HEAD section.
Therefore, the ASP.Net platform is conforming to standards and adding an empty title tag to your page to help you achieve valid markup - it doesn't know you are about to add one through a content placeholder.
Under classic ASP.Net your options are:
- Use the @page directive Title to set the content of this tag
- Use the Page.Title property from your code behind to set the value programmatically.
If you are using ASP.Net MVC, the default Site.Master file had the following default text:
<title><%= Html.Encode(ViewData["Title"]) %></title>
And the default controller had:
ViewData["Title"] = "Home";
within the action result, again allowing for programmatic access to the page title.
Generally I use the HeadContent content placeholder for adding page specific static scripts and css links.