【问题标题】:CouchDB URL Rewriting for SEO用于 SEO 的 CouchDB URL 重写
【发布时间】:2013-09-11 17:02:03
【问题描述】:

我正在尝试使用大量客户端 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": {
       }
   }
]

When optimizing a site for SEO, Google requires you to do a few things:

  • 在您的友好 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 重写创建了这样的规则?

【问题讨论】:

  • 您的第三次尝试是唯一正确的。只需查询/_design/ddoc/_rewrite?_escaped_fragment=foo,它将被重写为/_design/ddoc/_show/escaped_fragment/foo。当然,您需要在这种情况下定义 escaped_fragment 显示函数。
  • @Kxepal 第三个选项的唯一问题是 CouchDB 将其视为与我将“/”发送到“../../static/index.html”的重写规则相同。跨度>
  • 是的,碰撞。可以合并它们吗?在这种情况下,:_escaped_fragment 将是 undefined (_rewrite/ -> _show/escaped_fragment/undefined),但您会注意到他在查询对象中丢失了,因此应该很容易从 show 函数再次重定向到 @ 987654335@(不是很好,但仍然是解决方案)
  • 我曾考虑过使用重定向,但 Google 规范规定它必须是完全相同的 URL 才能使网站可抓取:http://example.com/index.html#!homehttp://example.com/index.html?_escaped_fragment=home。如果我重定向到与http://example.com/index.html 不同的地方,我最终会得到一个新的 URL(追逐我的尾巴)。
  • 顺便说一句,我可能无法找到解决这个问题的方法,但我找到了 SEO 的 hashbang/escaped_fragment 方法的潜在替代方法:moz.com/blog/…

标签: ajax seo couchdb hashbang


【解决方案1】:

我没有这个问题的答案,但我已经为制作托管在 CouchDB 上的可抓取网站这一更大的问题开发了一个解决方案。它是一个利用Facebook's 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/@ 987654329@),服务器可以渲染相关内容。

【讨论】:

  • 感谢您的解决方案。我使用纯客户端 Javascript 开发了一种类似的方法。我在我的个人博客上使用它:pokstad.com 基本上,我在浏览器中渲染页面,然后捕获整个文档,对其进行序列化,并将其保存为附件。当用户/爬虫直接浏览到一个链接时,这个附件会被返回。否则,我使用 HTML5 历史 API 加载/卸载 AJAX 页面。
猜你喜欢
  • 2013-07-04
  • 2013-04-18
  • 2012-07-17
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多