2010-04-29

开发爬虫友好的Ajax网站

Views: 33410 | 3 Comments

曾经, Ajax 被当成是 Web 2.0 的全部, 正如 DIV+CSS 被当成是Web标准一样. 到如今, 应用大量 Ajax 技术的网站仍然面临着一个重要问题, 那就是有意义的内容无法被搜索引擎收录. 面对大量 Ajax 网站的产生, 搜索引擎(事实上是爬虫)正在朝着越来越像用户浏览器的方向发展.

很多站长可能发现, 他们利用 JavaScript 脚本来记录网站访问的日志里, 经常能发现来自"美国加利福尼亚州山景市 Google 公司"的访问记录. 别高兴得太早, 可不是 Google 的工程师在看你的网站, 只是他们支持 JavaScript 的爬虫刚刚抓取了你的网站.

当然, 为了能让你的 Ajax 网站能被搜索引擎收录正确的内容, 你的网站必须做到:

每一个不同的内容都能通过一个完整的 URL 来访问!

例如, Google Reader 的 Trends 页面, 可以通过 http://www.google.com/reader/view/#trends-page 来访问. 但是, 仅仅使用锚点(即'#'号后面跟着文本), 并不能让你的 Ajax 内容被爬虫抓取. 因为, 链接中的'#'号和其后面的内容是不被发送到服务器端的! 也就是说, 你在浏览器中输入 http://www.ideawu.net/ 和 http://www.ideawu.net/#ajax, 这对服务器都是一样的.

有一种被称为"Hijax"或"Hijax-links"的技术可以用来保证既使用 Ajax, 网站也能被爬虫抓取. 这项技术的要求是, 你的 Ajax 网站要创建真正的链接:

<a href="http://www.ideawu.net/?p=1">查看文章详细内容</a>

但是, Ajax 在哪呢? 关键在于用 JavaScript 使这个链接的点击失效(不跳转), 转而执行你的 js 代码. 直观的做法是:

<a href="http://www.ideawu.net/?p=1" onclick="ajax_view(1); return false">查看文章详细内容</a>

说句题外话, 我对我公司内部某个新闻系统使用 Ajax, 但不应用"Hijax"感到十分愤怒! 因为 Ajax 降低了查看新闻的效率!

Google 公司更前进了一步, 它制定了一个规范(Ajax Crawling Specification), 希望那些使用 Ajax 同时又想被 Google 正确收录的网站能够遵守. 这个规范对于网站主来说的一个关键点就是, 创建格式符合规范的链接, 并为这些每一个唯一的链接提供一个完整的页面.

对于上面查看文章详细内容的例子, 链接应该改为


http://www.ideawu.net/#!view_1

是的, 就是在'#'号后面跟着一个感叹号. 前面已经说过, '#'号和其后面的内容是不被发往服务器端的, 所以, Google 的爬虫会把这个 URL 链接转成一个原始的链接

http://www.ideawu.net/?_escaped_fragment_=view_1

当你收到这样的一个链接访问请求时, 说明就是 Google 的爬虫来了. 然后, 你给它返回包含1号文章详细内容的完整的HTML, 包括 html, body 等标签. 然后, Google 的索引程序会解析这个 HTML, 提取出关键字等. 当用户在 Google 网站查询该页面包含的关键字, 并且你的页面出现在结果中, 用户就会看到一个"http://www.ideawu.net/#!view_1"的链接.

关于AjaxCrawling的更多内容可以查看: http://code.google.com/web/ajaxcrawling/index.html

Related posts:

  1. 强大的纯JS数据图工具-flot
  2. Nginx 499 错误码以及 AJAX 调用失败
  3. 好看的在线图表制作工具
  4. 安装和使用Google Earth – Linux
  5. HTTP 长连接技术 Comet
Posted by ideawu at 2010-04-29 23:23:21 Tags: , , ,

3 Responses to "开发爬虫友好的Ajax网站"

  • 的确, ajax很多地方并非非用不可,除了作者自我感觉良好以外,优势减少的流量并没有使得访问速度大幅提升。 如果希望良好的收录, 不用ajax是最方便的。 Reply
  • Ajax之所以能够被广泛使用必然有其优势,SEO 和Ajax能够完美结合才是正道。 Reply
  • 我就不明白, 为什么非得用Ajax? 如果真想被Google收录, 那就应该减少Ajax的使用. Reply

Leave a Comment