错误博客( cuowu.com )发布于 2019-06-12 21:45:20

Google Ajax增强网站

设计AJAX支持的网站以提高可访问性

许多网站站长发现了利用AJAX改善其网站的用户体验的优势,它可以创建动态网页作为强大的网络应用。但是就像Flash一样,如果没有仔细实施该技术,AJAX会使搜索引擎难以将网站编入索引。与AJAX有关的搜索引擎问题主要有两个:确保搜索引擎漫游器能够看到您的内容和确保它们可以看到并跟踪您的导航。

尽管Googlebot非常理解HTML链接的结构,但是它在使用JavaScript进行导航的网站中还是会遇到寻找路径方面的问题。我们正在努力使其更好地理解JavaScript,但是要创建Google和其他搜索引擎可抓取的网站,最好还是提供指向内容的HTML链接。

以易于访问为目的进行设计

我们鼓励网站站长针对用户(而不仅仅针对搜索引擎)创建网页。您在设计AJAX网站时要考虑用户的需求,包括那些使用不支持JavaScript功能的浏览器的用户(例如使用屏幕阅读器或移动设备的用户)。测试网站可访问性的其中一种最简单的方法是:在停用JavaScript后通过浏览器预览网站,或在纯文本浏览器(例如Lynx)中查看网站。以纯文本形式查看网站还可帮助您找出Googlebot难以看到的其他内容,例如图片或Flash中嵌入的文字。

避免使用iframe或分别指向其内容的链接

通过iframe显示的内容可能不会被编入索引,也不会在Google的搜索结果中显示。我们建议您避免使用iframe显示内容。如果您的网站中使用了iframe,请务必额外提供基于文本的链接以指向iframe所显示的内容,以便Googlebot能够抓取这些内容并将其编入索引。

以渐进增强的方式进行开发

如果您是从头开始,那么仅使用HTML构建网站结构和导航是一个不错的方法。然后,在网站的网页、链接和内容就绪后,您可以使用AJAX对外观和界面进行修饰。Googlebot可以很轻松地查看HTML,而使用新式浏览器的用户也可以享受AJAX的优势。

当然,您的有些链接很可能需要JavaScript,以实现AJAX功能。网络开发者杰里米·基思(Jeremy Keith)将此技术叫做Hijax,它是帮助AJAX和静态链接共存的一种方法。

创建一定格式的链接,以便它们既能提供静态链接又能调用JavaScript功能。通过这种方法,您的JavaScrip用户可以使用AJAX功能,而您的非JavaScrip用户可以忽略此脚本并点击此链接。例如:

<a href=”ajax.htm?foo=32″ onClick=”navigate(‘ajax.html#foo=32’);return false”>foo 32</a>

请注意,静态链接网址含有参数(?foo=32),而不是AJAX代码所使用的片段(#foo=32)。这一点非常重要,因为搜索引擎能理解网址参数,但经常会忽略片段。由于您现在提供的是静态链接,因此用户和搜索引擎可以链接到想要分享或参考的准确内容。

尽管我们在不断改善我们的抓取功能,但使用HTML链接仍不失为一个很好的方法,它可以帮助我们(以及其他搜索引擎、移动设备和用户)更好地理解您网站的结构。

遵从指南

除了上面提到的技巧之外,我们还建议您查看我们的网站站长指南,以详细了解如何使网站便于Google和用户访问。该指南还指出了一些需要避免的做法,例如欺骗性的JavaScript重定向。要遵从的通用原则是:尽管您可以根据用户的能力为用户提供不同体验,但是内容应该相同。例如,设想我们为王燕的仓鼠商店创建了网页。网页顶部是“王燕的仓鼠商店”标题,下面是由AJAX技术驱动的最新仓鼠到货消息的幻灯演示。在同一网页上停用JavaScript后,不会应出现其他文本消息而令用户感到奇怪:

王燕的仓鼠商店 – 仓鼠、最好的仓鼠、低价仓鼠、免费仓鼠、宠物、商店、仓鼠商店、会跳舞的仓鼠、啮齿动物、苍鼠、沧鼠、最好的仓鼠资源、宠物玩具、舞蹈课、可爱、仓鼠的小把戏、宠物食品、仓鼠习性、仓鼠旅馆、仓鼠生日礼物创意,以及更多内容!

较好的实施方法是:无论是否启用JavaScript,都应该显示相同的文字内容;最佳方案是:为非JavaScript用户提供HTML版本的幻灯演示。

AJAX:常见问题解答

在 AJAX 网址中何时应使用 _escaped_fragment_ 以及何时应使用 #!?

您的网站应该对所有采用 AJAX 抓取机制的网址使用 #! 语法。Googlebot 不会跟踪 _escaped_fragment_ 格式的超链接。

哪里有此机制的使用示例?

http://gwt.google.com/samples/Showcase/Showcase.html 上提供了 AJAX 应用示例。点击左侧的任意链接后,您都会看到相应网址包含一个 #! 哈希代码段,并且该应用会转到此哈希代码段对应的状态。如果您将 #!(例如http://gwt.google.com/samples/Showcase/Showcase.html#!CwRadioButton)更改为 ?_escaped_fragment_=(例如 http://gwt.google.com/samples/Showcase/Showcase.html?_escaped_fragment_=CwRadioButton),网站将返回 HTML 快照。

如果我选择不在我的 AJAX 网站上使用 #!,会怎样?

如果您这样做,则在近期内,您的网页便可能无法在 Google 搜索结果页中正常显示。不过,我们一直在不断改进 Googlebot,设法使其运行方式更像浏览器。届时,当您在自己的网站上实施所需的功能后,Googlebot 可能会自动将您的网页正确编入索引。但是,对于已使用 AJAX 且希望现在可以确保将内容正确编入索引的网站而言,此 AJAX 抓取机制是一个非常实用的解决方案。我们期望此解决方案可以有效解决其网页已有 HTML 快照的用户的问题,或者解决那些使用无头浏览器获取此类 HTML 快照的用户的问题。

内容应多久更新一次?

这完全取决于应用内容的更新频率。如果更新很频繁,您始终应该及时构建最新的 HTML 快照以响应抓取工具请求。如果不频繁,可以考虑创建内容不进行定期更新的库存档。为了避免让服务器不断产生相同的 HTML 快照,您可以一次性创建所有相关 HTML 快照(可能离线),然后保存以备将来参考。您还可以使用 304(未修改)HTTP 状态代码来响应 Googlebot。

如果我的应用没有使用哈希代码段,会怎样?

我们建议您使用!使用哈希代码段,可以明显地加快应用响应速度,因为哈希代码段由客户端的浏览器进行处理,不会导致整个网页都需要刷新。此外,哈希代码段还支持在应用中提供历史记录(也就是备受诟病的“浏览器后退按钮”)。各种 AJAX 框架都支持哈希代码段。例如,请参阅 Really Simple History、jQuery 的历史记录插件、Google Web Toolkit 的历史记录机制,或 ASP.NET AJAX 对历史记录管理的支持。

不过,如果无法构建应用来使用哈希代码段,您可以执行以下操作,在哈希代码段(即网址中 # 标记之后的所有内容)中使用特殊令牌。代表唯一页面状态的哈希代码段必须以感叹号开头。例如,如果您的 AJAX 应用包含类似以下的网址:

www.example.com/ajax.html#mystate

现在它应变为如下形式:

www.example.com/ajax.html#!mystate

如果您的网站采用该架构,将被视为“AJAX 可抓取”。这意味着,如果您的网站提供 HTML 快照,抓取工具将看到您的应用的内容。

这种方法会导致“不美观的”_escaped_fragment_ 网址越来越多吗?

网址的 _escaped_fragment_ 语法对应的是临时网址,绝不应该被最终用户看到。在用户可看到的所有环境中,都应该使用“美观的网址”(带有 #! 而不是 _escaped_fragment_):常规应用交互、网站地图、超链接、重定向,以及用户可能会看到网址的其他任何情况。出于相同的原因,搜索结果均为“美观的网址”,而不是“不美观的网址”。

使用此机制会导致隐藏真实内容吗?

隐藏真实内容指为用户提供的内容与为搜索引擎提供的内容不同,通常是为了提高网页在搜索结果中的排名。隐藏真实内容过去一直是(将来也会一直是)一个重要的搜索引擎问题,因此请务必注意,将 AJAX 应用设置为可抓取,绝不是为了给隐藏真实内容提供方便。因此,HTML 快照包含的内容必须与最终用户在浏览器中看到的内容相同。如果不相同,则可能会被视为隐藏真实内容。请参阅具体解答以了解详细信息。

可以使用此机制来让我的 Flash 或其他富媒体文件更容易抓取吗?

Google 确实能将许多富媒体文件类型编入索引,而且在持续努力改进抓取和索引编制。但是,Googlebot 可能并不能看到 Flash 或其他富媒体应用的所有内容(正如它无法抓取您网站上的所有动态内容一样),因此,使用此机制可以向 Googlebot 提供更多内容。,HTML 快照包含的内容必须与最终用户在浏览器中看到的内容相同。Google 有权从索引中排除被视为隐藏真实内容的网站。

如果我的网站包含一些不想被抓取的哈希代码段网址,该怎么办?

如果您的网站采用 AJAX 抓取机制,Google 抓取工具会抓取它遇到的每个哈希代码段网址。如果您不想让某些哈希代码段网址被抓取,建议您在 robots.txt 文件中添加一个正则表达式指令。例如,您可以在您不希望被抓取的哈希代码段中使用一种惯例,然后在 robots.txt 文件中排除符合该惯例的所有网址。假设所有指示不可编入索引的声明都采取以下形式:#DONOTCRAWLmyfragment,那么您可以向 robots.txt 中添加以下代码,阻止 Googlebot 抓取这些网页:

Disallow: /*_escaped_fragment_=DONOTCRAWL

如何处理哈希代码段中已有的 #!?

#! 是现有哈希代码段中不常用的令牌;但是网址规范并没有规定不能使用它。如果您的应用使用了 #!, 但是不想采用新的 AJAX 抓取机制,该怎么办?有一种方法是在 robots.txt 中添加以下指令,以指示抓取工具如何处理。

Disallow: /*_escaped_fragment_

请注意,这表示,如果您的应用只包含此网址 www.example.com/index.html#!mystate,则该网址不会被抓取。如果您的应用还包含纯网址 www.example.com/ajax.html,则该网址会被抓取。

辅助功能是怎么回事?

为搜索引擎提供静态内容的现行方法有一个附带的作用,即网站站长可以让残障用户更方便地访问其应用。此新协议进一步完善了辅助功能:网站站长不再需要手动干预,即可使用无头浏览器创建 HTML 快照,其中包含所有相关内容并可供屏幕阅读器使用。这意味着,现在可以更轻松地提供最新的静态内容,手动工作越来越少。也就是说,网站站长现在会有更大的动力来构建方便残障用户使用的应用。

应该如何使用 rel=”canonical”?

请使用 <link rel=”canonical” href=”http://example.com/ajax.html#!foo=123″ />(不要使用 <link rel=”canonical” href=”http://example.com/ajax.html?_escaped_fragment_=foo=123″ />)。

我应该将哪个网址添加到站点地图中?

您应该在站点地图中添加您希望显示在搜索结果中的网址,因此应添加 http://example.com/ajax.html#!foo=123。

带 #! 的网址会对产品 Feed 产生什么影响?

对于网站而言,它们通常希望在 Google 购物和网页搜索中显示相同的网址。通常,应将带 #! 的网址视为可用于任何环境的“规范”版本,而将 _escaped_fragment_ 网址视为最终用户始终都不会看到的临时网址。

我使用 HtmlUnit 作为无头浏览器,它却不起作用。这是为什么?

如果“不起作用”表示 HtmlUnit 没有返回您希望看到的快照,则很可能是由于您未给予足够的时间供它执行 JavaScript 和/或 XHR 请求。要解决这个问题,请尝试执行以下任意或全部操作:

  • 使用 NicelyResynchronizingAjaxController。这样可以指示 HtmlUnit 等待所有未完成的 XHR 调用执行完毕。
  • 增加 waitForBackgroundJavaScript 和/或 waitForBackgroundJavaScriptStartingBefore 的等待时间。

这在大多数情况下都可以解决问题。但如果问题仍然存在,您还可以查阅有关 HtmlUnit 的常见问题解答,网址为:http://htmlunit.sourceforge.net/faq.html。HtmlUnit 还提供了用户论坛。

原文地址1:https://support.google.com/webmasters/answer/81766?hl=zh-Hans&ref_topic=6003039

原文地址2:https://support.google.com/webmasters/answer/174993?hl=zh-Hans&ref_topic=6003039


2020年错误博客亲测项目系列

错误教程( cuowu.com )专注网推培训、SEO培训和网赚培训,微信/电话:13722793092

关注微信公众号:第一时间获得错误博客最新教程,让我们一起成长!

公众号二维码