我使用 jQuery 通过 json 请求从数据库中检索内容。然后它将 HTML 中的通配符(如 %title%)替换为实际内容。这很好用,这样我就可以在数据库中维护我的多语言文本,但 Googlebot 只能看到通配符,而不是实际内容。我知道 Googlebot 会看到没有 javascript 的页面,但有没有办法解决这个问题?谢谢!
3 回答
在给出这个答案时,谷歌似乎有一个几乎完全或功能齐全的 javascript-crawling 机器人:
2009 年,Google 提出了使 AJAX 可抓取的解决方案:https ://webmasters.googleblog.com/2009/10/proposal-for-making-ajax-crawlable.html
2015 年 Google弃用了上述方法:https ://webmasters.googleblog.com/2015/10/deprecating-our-ajax-crawling-scheme.html
我已经成功构建了多个在 Google 的网站管理员工具中正确呈现的单页应用程序。
如果您想深入了解,网络上有很多资源:
您应该在 Google 上仔细阅读此文档。
它讨论了如何启用 Googlebot 索引:
- 内容根据
#hashfragment
URL 中的值变化而变化的页面。 - 加载后内容立即更改但
#hashfragment
本身没有任何特殊性的页面。
简而言之,您正在考虑添加<meta name="fragment" content="!">
“第 3 步”中讨论的内容,并通过一次性返回所有内容来响应服务器端的特殊请求,否则您的客户端代码将在页面加载后生成。这些特殊请求实际上?_escaped_fragment_=...
是 URL 中的请求,向服务器表明它应该将所有最终呈现(我的话)预烘焙到 Googlebot 的单个响应中。
也就是说,由于您将努力为这种特殊情况输出填充的内容,因此在一般情况下您最好这样做(避免需要处理 Google 的_escaped_fragment_
请求),也许还有一种方法可以如有必要,在页面加载后换掉您的标记(例如,通过使用具有特定class
或id
识别它们的跨度)。
Googlebot 显然不会呈现它下载的页面。这可能与其他搜索机器人采用的行为相同。
您需要使用服务器端脚本或编译解决方案(有很多可供选择,包括 PHP、ASP.NET 等)。这样,您仍然可以保留动态和 i18n 功能,并且 Googlebot 会按照您的预期方式查看您的页面。或者至少对基本页面属性(如您知道 Googlebot 正在评估的标题)执行此操作,并为页面中不那么重要的部分保持 jQuery 更新。
(不过说实话,在页面下载后使用 jQuery 替换标记可能不是最有效的方法,尤其是在服务器端脚本如此简单和免费的情况下)。