2

我正在尝试使用大量客户端 Jquery/AJAX 魔术创建一个完全托管在 CouchDB 上的整个站点(也没有 nginx 反向代理)。现在我正在使它对 SEO 友好。我正在使用虚拟主机和 URL 重写将流量从根路由到我的 index.html 文件:

虚拟主机:

example.com /dbname/_design/dd/_rewrite/

在我的重写定义中:

rewrites:[
   {
       "from": "/db/*",
       "to": "/../../../*",
       "query": {
       }
   },
   {
       "from": "/",
       "to": "../../static/index.html",
       "query": {
       }
   }
]

在为 SEO 优化网站时,Google 要求您做一些事情

  • 在您的友好 URL 中使用井号 (#!) 告诉网络爬虫您是一个具有网络可爬取材料的 AJAX 站点:http://example.com/index.html#!home
  • 使用 http 查询参数提供该 AJAX 页面的 HTML 转义片段:http://example.com/index.html?_escaped_fragment=home

我尝试了以下没有运气:

rewrites:[
   {
       "from": "/db/*",
       "to": "/../../../*",
       "query": {
       }
   },
   {
       "from": "/",
       "to": "../../static/index.html",
       "query": {
       }
   }, /* FIRST ATTEMPT */
      {
       "from": "/?_escaped_fragment=:_escaped_fragment",
       "to": "/_show/escaped_fragment/:_escaped_fragment",
       "query": {
       }
   }, /* SECOND ATTEMPT */
      {
       "from": "/?_escaped_fragment=*",
       "to": "/_show/escaped_fragment/*",
       "query": {
       }
   }, /* THIRD ATTEMPT */
      {
       "from": "/",
       "to": "/_show/escaped_fragment/:_escaped_fragment",
       "query": {
       }
   }
]

据我所见,CouchDB 的 URL 重写器无法区分带有 args 和没有 args 的 URL。有没有人幸运地通过 CouchDB URL 重写创建了这样的规则?

4

1 回答 1

1

我没有这个问题的答案,但我已经为制作托管在 CouchDB 上的可抓取网站的更大问题开发了一个解决方案。它是一个利用Facebook 的 Reactlistshow函数、客户端上的 ajax 并window.history在 CouchDB 和浏览器上呈现填充数据的相同 HTML 组件的系统:

https://github.com/fiatjaf/reactive-couch

此解决方案不需要 hashbang,因为对于浏览器导航到的每个唯一 URL,使用 ajax 和/window.history或简单链接(无论是_list/listName/viewName/_show/displayKind/c305ee4d-8611-4e08-b9d3-3318835632a9或重写为/name/的东西/kind/c305ee4d-8611-4e08-b9d3-3318835632a9),服务器都可以呈现相关内容。

于 2014-03-11T04:50:03.533 回答