使用启用的页面,通常您使用约定pushState
重定向 SEO 机器人。escaped_fragment
您可以在此处阅读更多相关信息。
该约定假定您将#!
在单个页面应用程序上的所有 URI 之前使用 () hashbang 前缀。escaped_fragment
在发出页面请求时,SEO 机器人将通过将 hashbang 替换为它自己可识别的约定来逃避这些片段。
//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]
pushState
问题在于,在广泛适应的支持下,hashbang 正在迅速被淘汰。它也很丑陋,对用户来说不是很直观。
那么如果我们使用 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
重写规则是否可以使用这个较新的约定将机器人引导到您的缓存版本?相关但仅考虑索引边缘情况。谷歌还有一篇文章建议在页面中使用这种单一边缘情况的选择加入方法。同样,这是针对单个边缘情况。在这里,我们正在讨论将每个页面作为选择加入的场景来处理。<meta name="fragment" content="!">
<head>
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]
处理这个问题的最佳方法是什么?