.htaccess 用于 SEO 机器人在没有 hashbang 的情况下抓取单页应用程序

2023-11-25

Using a pushState启用页面,通常您使用重定向 SEO 机器人escaped_fragment习俗。您可以阅读更多相关内容here.

该约定假设您将使用 (#!) hashbang 前缀位于单页应用程序上所有 URI 之前。 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 引导entire用户应用程序?

//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

可以使用这个较新的约定重写规则引导机器人到您的缓存版本吗?相关,但仅说明索引边缘情况。谷歌也有一篇文章这建议使用opt-in对于这种单边缘情况的方法使用<meta name="fragment" content="!"> in the <head>页面的。同样,这是针对单一边缘情况的。这里我们讨论将每个页面作为一个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]

处理这个问题的最佳方法是什么?


在单页网络应用程序上也有类似的问题。

我发现这个问题的唯一解决方案是有效地创建页面的静态版本,以便谷歌(和其他)机器人可以导航。

您可以自己执行此操作,但也有一些服务可以完全执行此操作并为您创建静态缓存(并通过其 CDN 向机器人提供快照)。

我最终使用了 SEO4Ajax,尽管还有其他类似的服务可用!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.htaccess 用于 SEO 机器人在没有 hashbang 的情况下抓取单页应用程序 的相关文章

随机推荐