history.js + Google [关闭]

Posted

技术标签:

【中文标题】history.js + Google [关闭]【英文标题】:history.js + Google [closed] 【发布时间】:2012-11-24 07:40:35 【问题描述】:

让我们谈谈 google 的 AJAX 爬虫:

由于history.js 是丑陋的hashbang 网址的一个很好的替代品,我想知道一个特定的问题: 对于 html5 浏览器,如果加载了 ajax-content 并且应该由 google 索引,则会创建漂亮的 url。对于非 HTML5 浏览器(例如 IE 9 不支持 history.pushState),使用旧的 hashbang。

那么 google 看到的是哪个版本?谷歌看到重复内容是否有任何风险(一次是漂亮的 url,一次是 hashbang)?

感谢您对此的任何想法。

【问题讨论】:

【参考方案1】:

我建议仅对支持该 API 的浏览器(大约 70% 的浏览器)使用 HTML5 History API,同时向不支持该 API 的浏览器提供常规静态页面。这样一来,搜索引擎就不可能看到与完整的规范静态 URL 不同的任何内容。

【讨论】:

【参考方案2】:

HTML

<a href="http://some/other/page/1" data-history='"some":"data"' title="...">link1</a>
<a href="http://some/other/page/2" data-history='"some":"data"' title="...">link2</a>

javascript

$(document).on('click', '[data-history]', function(e)
    e.preventDefault();
    History.pushState($(this).data().history, this.title, this.href);
)

对于启用了 JavaScript 的客户端,hisotory.js 会处理这个 AJAX 请求,对于没有 JavaScript 的客户端,它会请求正常的页面。

【讨论】:

【参考方案3】:

如果 ajax 页面需要通过 google 建立索引,我们需要从服务器提供页面的 html 快照。

例如:xyz.com/page1#!name=john

Google 抓取工具找到了这个 #!标识符和请求http://xyz.com/page1?_escaped_fragment_=name=john 这样我们的服务器就可以提供页面的 html 快照。

现在,当我们的 URL 被美化并附加 #! ajax 页面将被编入索引。

对于仅在 URL 中附加 # 的页面,谷歌爬虫将无法看到通过 ajax 加载的内容,并且不会被编入索引。所以不会有任何重复的可能

我们还可以在页面头部使用链接标签,其中 rel 规范 url 指向邮件 url。参考http://googlewebmastercentral.blogspot.in/2009/02/specify-your-canonical.html。

【讨论】:

以上是关于history.js + Google [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何让浏览器关闭放大弹出窗口

history.js使用方法(来自博客园)

./node_modules/history/esm/history.js Module not found: Can't resolve '@babel/runtime/helper

history.js 一个无刷新就可改变浏览器栏地址的插件(不依赖jquery)

react中——connected-react-router的使用

google vimium插件的一些简单命令