动态内容与搜索引擎优化的结合

在现代网络应用中,AJAX技术被广泛用于创建动态且用户友好的界面。然而,AJAX加载的内容通常不会被搜索引擎索引,因为它们是通过JavaScript动态生成的。为了解决这个问题,可以使用URL重写技术,让搜索引擎能够索引这些动态内容。本文将详细介绍如何实现这一目标。

目标

目标是实现以下功能:

  • 普通用户访问网站时,能够看到AJAX动态加载的内容。
  • 搜索引擎爬虫访问网站时,能够索引到所有链接。
  • 用户通过搜索引擎访问被索引的链接时,能够看到动态内容,同时保持URL不变。

URL重写示例

假设用户访问网站 http://example.com 并点击了“第一篇博客”链接,那么内容将通过AJAX动态加载。但如果搜索引擎爬虫访问该网站,链接将变为 http://example.com/Articles/FirstArticle,这样搜索引擎就可以爬取并索引该链接。

使用代码实现URL重写

在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的简单示例

下面是一个简单的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 } } }

URL重写作为搜索引擎优化技术

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
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485