Adjusting the MOSS ROBOTS meta tag for 3rd party search engines
When developing a public facing website using the publishing features of MOSS it might be required to emit a ROBOTS meta tag that prevents internet search engines from indexing specific pages.
The standard RobotsMetaTag control included in WSS generates the following tag:
<META NAME="ROBOTS" CONTENT="NOHTMLINDEX">
Unfortunatelly most search engines do not understand the NOHTMLINDEX content value but a value of NOINDEX. To resolve this it is required to replace the RobotsMetaTag control in the master page with a custom control that emits the correct value.
The following code will do this:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.IO;
using Microsoft.SharePoint;
using System.Web.UI;
namespace StefanG.MossControls
{
public class RobotsMetaTag : Microsoft.SharePoint.WebControls.RobotsMetaTag
{
protected override void Render(HtmlTextWriter writer)
{
SPWeb web = GetContextWeb(HttpContext.Current);
if (web.ASPXPageIndexed == false)
{
writer.Write("<META NAME=\"ROBOTS\" CONTENT=\"NOHTMLINDEX,NOINDEX\"/>");
}
}
}
}
Here are the required steps to implement this:
- compile the above code into a separate DLL (e.g. RobotsMetaTag.dll)
- if signed add the DLL to the GAC - otherwise copy it into the bin directory of your web application
- add the control to the save controls list in the web.config
<SafeControl Assembly="RobotsMetaTag" Namespace="StefanG.MossControls" TypeName="*" Safe="True" />
(if the DLL is in the GAC ensure to add the strong assembly name instead with version and public key token).
- Open the master page in SharePoint designer and register your DLL:
<%@ Register TagPrefix="StefanG" Namespace="StefanG.MossControls" Assembly="RobotsMetaTag" %>
(if the DLL is in the GAC ensure to add the strong assembly name instead with version and public key token).
- replace the following tag:
<SharePoint:RobotsMetaTag runat="server"/>
with this:
<StefanG::RobotsMetaTag runat="server"/>