发表者: Pawel Aleksander Fedorynski 索引团队软件工程师;Maile Ohye 开发人员项目技术指导 随着网络的发展,谷歌的抓取和索引能力也需要与时俱进。我们改善了flash索引,建立了一个更加强大的Caffeine系统, 我们甚至绘制了抓取表单。现在,特别当JavaScript和AJAX日渐普及后,我们发现越来越多的网页需要POST请求——因为网页的全部内容或因为有些网页信息缺失以及/或者POST无法返回资源而使网页无法显示。对于谷歌搜索来说,出现这一现象并不理想,因为如果我们没有正确地搜寻和索引内容,便无法呈现最全面、准确的结果。 通常情况下,我们建议使用GET来抓取网页所需资源,这是至今为止我们找到的最好的抓取方法。我们做过一些实验,将POST请求重新写入GET,在某些情形下,这是一种有效策略。一般说来,网络服务器从GET和POST返回的结果是完全不同的。另外,使用POST还有一些合理的原因(比如使用过程中,比起GET,在POST请求中可以附加的数据更多)。因此,虽然GET请求仍然更普遍,但为了从网页上获取更多内容,Googlebot会执行POST请求,因为我们认为它既安全又合适。 为了避免在网站上执行任务而导致用户任何意想不到的操作,我们采取了一定的措施。POST主要是用来抓取与网页自动请求相关的资源,模仿一个普通用户在浏览器中打开网址所看到的内容。随着时间推移,我们会逐步发现更好的模式,但目前我们还是用这一方法。 下面我们来看一些POST请求脚本,来说明我们如何随着网络的发展而改进信息抓取和索引功能的。 Googlebot的POST请求范例 通过POST重新定位抓取一个网页信息 <html> <body onload="document.foo.submit();"> <form name="foo" action="request.php" method="post"> <input type="hidden" name="bar" value="234"/> </form> </body> </html> 通过POST XMLHttp请求抓取一条资源 在这个逐步进行的例子中,我们按照page renders产生的自动XMLHttp请求,既改善了页面索引又改善了其即时预览效果。 1. 谷歌抓取到网址,yummy-sundae.html. 2. 谷歌开始索引yummy-sundae.html,在此过程中,尝试渲染页面以便更好地理解内容以及/或者产生即时预览。 3. 在渲染过程中,yummy-sundae.html使用POST方法,自动发送一条XMLHttp请求资源,hot-fudge-info.html. <html> <head> <title>Yummy Sundae</title> <script src="jquery.js"></script> </head> <body> This page is about a yummy sundae. <div id="content"></div> <script type="text/javascript"> $(document).ready(function() { $.post('hot-fudge-info.html', function(data) {$('#content').html(data);}); }); </script> </body> </html> 4. 通过POST请求得到的网址 hot-fudge-info.html,和其数据负载一起添加到Googlebot的抓取队列里。 5. Googlebot执行一个POST请求抓取hot-fudge-info.html网页信息。 6. 现在谷歌准确地呈现出一个可供即时预览的yummy-sundae.html网址。在某些情形下,我们还可以将 hot-fudge-info.htm网址内容合并在 yummy-sundae.html网址中。 7. 谷歌完成yummy-sundae.html网址的索引。 8. 用户搜索 [hot fudge sundae]。 9. 现在谷歌算法能够更好地确定yummy-sundae.html与此请求的相关度,我们能够恰当地呈现网页快照来提供即时预览。 提高您网站的抓取和索引能力 在我们的网站站长工具帮助可以找到建立可抓取网页的常规建议。对于那些想帮助谷歌抓取和索引他们的网站内容以及/或者产生即时预览的网络管理员,以下建议可供参考: 要获取资源,首选GET,除非有特殊原因需要使用POST。 确保我们可以抓取所需资源来渲染你的页面。在上面的例子中,如果hot-fudge-info.html无法获得robots.txt的允许,Googlebot便不能获取资源。更微妙的是,如果发出XMLHttp请求的JavaScript代码位于外部.js文件,无法获得robots.txt的允许,我们便不能看到 yummy-sundae.html 和hot-fudge-info.html两个网址的关联,所以即使hot-fudge-info.html网址本身不能获得允许,对我们也没有多大帮助。我们在纷繁的网络中甚至见到过更加复杂的相关性链接,允许Googlebot收集所有需要的信息有助于谷歌更好地理解您的网站。 您可以通过网站管理员工具“实验室 -> 即时预览.”来检测资源是否被锁定。 确保返回给Googlebot的内容和返回到用户浏览器的内容相同。隐藏真实内容(发给Googlebot的内容与发给用户的不同)违反了网站站长指南,因为,这会使我们向搜索者提供一个无关结果——用户在浏览器中看到的内容很可能与我们抓取和索引的内容完全不符。我们看到过许多POST请求的案例,网站管理员并无恶意的隐藏真实内容(这仍然是违反条例的),哪怕是最微小的改变,都会引起JavaScript错误,阻碍精确索引,且完全违背了最初隐藏真实内容的初衷。总的来说,如果你想让你的网站能够顺利索引,最好避免这种会引起麻烦的隐藏行为。 为了核实你没有不经意地隐藏真实内容,你可以使用网站管理员工具中的即时预览,或者在浏览器中将你的用户-代理字符串设置成如下: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 如此改动后,网页应该没有任何变化。如果你看到一个空白页,JavaScript错误,或者如果页面有一部分消失或者出现变化,就存在问题了。 切记将重要内容(比如你要索引的内容)记录在文本中,在页面上能一眼看到,不需要用户操作就能显示。大部分搜索引擎都是基于文本的,这样与基于文本的页面内容配合都能起到最好的效果。虽然我们一直在改进对各种格式的内容进行抓取和索引的能力,但是对于重要的信息来说,最好还是使用文本格式。 控制你的内容 如果你想要阻止网页内容被谷歌网络搜索抓取或索引到,最好的办法是用传统的robots.txt 文件指令。 本文由单人操作扑克分析仪整理发布