在现代网络应用中,AJAX技术被广泛用于创建动态且用户友好的界面。然而,AJAX加载的内容通常不会被搜索引擎索引,因为它们是通过JavaScript动态生成的。为了解决这个问题,可以使用URL重写技术,让搜索引擎能够索引这些动态内容。本文将详细介绍如何实现这一目标。
目标是实现以下功能:
假设用户访问网站 http://example.com
并点击了“第一篇博客”链接,那么内容将通过AJAX动态加载。但如果搜索引擎爬虫访问该网站,链接将变为 http://example.com/Articles/FirstArticle
,这样搜索引擎就可以爬取并索引该链接。
在HTML中,可以这样写锚点标签:
<a href="http://www.example.com/Aditya/Bhave/">Aditya Bhave</a>
当用户点击这个链接时,浏览器会发送一个请求到上述URL。这个URL将由自定义的HttpModule处理。HttpModule会将这个URL转换为应用程序所需的URL,例如:
http://www.example.com/alllinks.aspx?firstname=Aditya&lastname=Bhave
请求被处理,就好像是请求了 http://www.example.com/alllinks.aspx?firstname=Aditya&lastname=Bhave
,响应被发送回浏览器,同时URL保持不变。
下面是一个简单的HttpModule示例,用于重写URL:
public class SimpleRewriter : IHttpModule
{
HttpApplication _application = null;
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += new System.EventHandler(context_BeginRequest);
_application = context;
}
void context_BeginRequest(object sender, EventArgs e)
{
try
{
string requestUrl = _application.Context.Request.Path.Substring(0, _application.Context.Request.Path.LastIndexOf("/"));
string[] parameters = requestUrl.Split(new char[] { '/' });
if (parameters.Length > 2)
{
int paramLength = parameters.Length;
string firstname = parameters[paramLength - 2];
string lastname = parameters[paramLength - 1];
_application.Context.RewritePath(string.Format("~/alllinks.aspx?firstname={0}&lastname={1}", firstname, lastname));
}
}
catch (Exception ee)
{
//Redirect to error page
//Or throw custom exception
}
}
}
AJAX网站通常包含JavaScript链接。如果使用LinkButton,那么链接将呈现为:
<a href="javascript:__doPostback(‘….’,’…..’);">Aditya Bhave</a>
如果搜索引擎爬虫遇到JavaScript链接,它将被跳过(不被索引)。如果希望链接“Aditya Bhave”被爬虫索引并在搜索引擎中可搜索,那么链接应该在锚点标签中,例如:
<a href="http://www.example.com/Aditya/Bhave/">Aditya Bhave</a>
大多数爬虫不支持JavaScript。当爬虫访问网站时,用户代理会随请求发送,告诉这是一个爬虫而不是普通用户。可以检查浏览器是否支持JavaScript。如果不支持JavaScript,那么应该在运行时隐藏LinkButton并添加锚点标签。因此应该有两个链接:
<asp:LinkButton ID="lnkLink" runat="server" Text="Some Text" OnClick="lnkLink_Click"></asp:LinkButton>
<a href="" runat="server" id="htmlLnkLink"></a>
如果浏览器不支持JavaScript,那么隐藏LinkButton并更改锚点链接的href属性并使其可见。
使用Mozilla Firefox的插件'PrefBar'。选择用户代理为Lynx。(这将像Lynx浏览器一样浏览页面。Lynx是一个文本浏览器,不支持JavaScript。)禁用颜色、图像、JavaScript、Flash并浏览网站。在Internet Explorer中浏览相同的网站。比较两个网站。在Mozilla(Lynx)中链接是正常的锚点链接,如果点击它,将执行完整的回发。但如果在Internet Explorer中点击链接,那么将使用AJAX并动态加载内容。从Firefox中复制链接,例如:
http://localhost:1234/alllinks.aspx/Aditya/Bhave/
并在Internet Explorer中浏览。在Internet Explorer中,它应该显示URL为:
http://localhost:1234/alllinks.aspx