我浏览过 Google 的文档和无数关于这个主题的博客文章,根据日期和来源,似乎有一些相互矛盾的信息。请把你的智慧照耀在这个卑微的农民身上,一切都会好起来的。
我正在免费建立一个网站,其中很大一部分观众来自互联网连接较差的非洲国家,而客户负担不起任何体面的基础设施。因此,我决定将所有内容都作为静态 html 文件提供服务,如果 javascript 可用,我会在用户单击导航链接时将页面内容直接加载到 DOM 中,以防止加载整个页面的开销。
我的客户端路由如下所示:
//domain.tld/#!/page
我的第一个问题是;googlebot 是否将其翻译为:
//domain.tld/_escaped_fragment_/page
还是//domain.tld/?_escaped_fragment_=/page
?
我在 php 中制作了一个简单的服务器端路由器,它为 googlebot 构建请求的页面,我的计划是重定向//d.tld/_escaped_fragment_/page
到//d.tld/router/page
.
但是当使用 Google 的“Fetch as Googlebot”(我可能是第一次添加)时,它似乎无法识别页面上的任何链接。它只是返回“成功”并向我显示主页的 html(更新:当将 Fetch as Googlebot 指向//d.tld/#!/page
它时,它只返回主页的内容,而不做任何 _escaped_fragment_ 魔术)。这引出了我的第二个问题:
使用 hashbang 链接时,我是否需要遵循特定的语法,以便 googlebot 抓取它们?
我的链接在 HTML 中如下所示:
<a href="#!/page">Page Headline</a>
Update1:因此,当我要求 Fetch as Googlebot 将//d.tld/#!/page
其显示在访问日志中时:"GET /_escaped_fragment_/page HTTP/1.1" 301 502 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
但它似乎不遵循我设置的 301,而是显示主页。我应该改用302吗?这是我正在使用的规则:RedirectMatch 301 /_escaped_fragment_/(.*) /router/$1
Update2:我改变了我的计划,并将 googlebot 作为我非 JavaScript 后备策略的一部分。所以现在所有的链接都指向路由器/router/page
,然后/#!/page/
用javascript更改为onLoad。我会暂时保留这个问题,以防有人有一个可以帮助其他人的绝妙解决方案。