【发布时间】:2013-07-29 08:55:25
【问题描述】:
使用启用pushState 的页面,通常您使用escaped_fragment 约定重定向搜索引擎优化机器人。您可以阅读更多关于 here 的信息。
约定假定您将在单个页面应用程序上的所有 URI 之前使用 (#!) hashbang 前缀。在发出页面请求时,SEO 机器人将通过将 hashbang 替换为它自己可识别的约定 escaped_fragment 来逃避这些片段。
//Your page
http://example.com/#!home
//Requested by bots as
http://example.com/?_escaped_fragment=home
这允许站点管理员检测机器人,并将它们重定向到缓存的预呈现页面。
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$
RewriteRule ^(.*)$ https://s3.amazonaws.com/mybucket/$1 [P,QSA,L]
问题在于 hashbang 正在被广泛采用的 pushState 支持迅速淘汰。它也很丑陋,对用户来说不是很直观。
如果我们使用 HTML5 模式,pushState 会引导整个用户应用程序呢?
//Your index is using pushState
http://example.com/
//Your category is using pushState (not a folder)
http://example.com/category
//Your category/subcategory is using pushState
http://example.com/category/subcategory
是否可以使用此更新的约定重写规则将机器人引导到您的缓存版本? Related but only accounts for index edge case. Google 还 has an article 建议在页面的 <head> 中使用 <meta name="fragment" content="!"> 对这种单一边缘情况使用 opt-in 方法。同样,这是针对单个边缘情况。在这里,我们正在讨论将每个页面作为 opt-in 场景来处理。
http://example.com/?escaped_fragment=
http://example.com/category?escaped_fragment=
http://example.com/category/subcategory?escaped_fragment=
我认为escaped_fragment 仍然可以用作 SEO 机器人的标识符,并且我可以提取域和此标识符之间的所有内容以附加到我的存储桶位置,例如:
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=$
# (high level example I have no idea how to do this)
# extract "category/subcategory" == $2
# from http://example.com/category/subcategory?escaped_fragment=
RewriteRule ^(.*)$ https://s3.amazonaws.com/mybucket/$2 [P,QSA,L]
处理此问题的最佳方法是什么?
【问题讨论】:
-
嗨@dan-kanze ..我有同样的问题..你有什么解决方案或任何可以帮助我的东西吗..我坚持这个
-
我去过那里,pushState 似乎要求您将这些文件夹放在您的光盘上。这样,那些不支持 pushState 的人将能够看到该页面以及机器人。
标签: javascript .htaccess web-crawler single-page-application