我一直在阅读Googles文档以及关于此主题的无数博客文章,并且根据日期和来源,似乎存在一些相互矛盾的信息。请把你的智慧照耀在这个卑微的农民身上,一切都会好的。
我正在建立一个无偿网站,其中大部分受众来自非洲国家,互联网连接较差,而且客户无法负担任何体面的基础设施。因此我决定将所有内容作为静态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的“抓取Googlebot”时(我可能会第一次添加),它似乎无法识别页面上的任何链接。它只返回“Success”并显示主页面的html(更新:当将Fetch指向Googlebot到//d.tld/#!/page
时,它只返回主页面的内容,而不执行任何_escaped_fragment_魔法)。这引出了我的第二个问题:
使用hashbang链接时,我是否需要遵循特定的语法,googlebot才能抓取它们?
我的链接在HTML中显示如下:
<a href="#!/page">Page Headline</a>
Update1:所以,当我要求抓取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
,然后使用javascript更改为/#!/page/
onLoad。我保持这个问题有点开放,以防有人有一个可以帮助他人的出色解决方案。