可悲的是,101%的Angular SEO示例假设使用单页应用程序(SPA)。我的应用不是SPA。目前,我的堆栈是:
Node/Express
- 用于路由和呈现Jade模板。这些URL是真实的,不使用HTML pushstate,hash-bang或类似的东西。 因此,url-escaped-fragment对我不起作用(我不认为) Angular
用于与我的RESTful API进行通信我的问题是我的页面本身只包含包含通过AJAX加载的片段 - 页面的其余部分呈现在服务器端。 Node / Express不对任何此逻辑负责,Angular会提取将在我的第一个h1
中的数据。
Google Bot和类似的人看到:<h1>{{this_unrendered_string}}</h1>
这是不行的。
有没有人想出任何聪明的解决方案来解决这个问题?
FWIW我发现了一个名为SEO.js的服务,它将托管我传递给它的任何页面的渲染版本。如果我可以告诉GoogleBot和类似的“嘿,不要使用此页面,请使用此页面”但是我不完全确定SEO对于提供内容的不同主机的感受。也许一些诡计可以在这里工作..
答案 0 :(得分:3)
Google已经在此处记录了“使AJAX应用程序可抓取”的方法。 https://developers.google.com/webmasters/ajax-crawling/
实现这一点并非完全简单(基本上,您必须运行无头浏览器并返回HTML快照以响应Google特殊格式化的请求)。
当您检测到GoogleBot时,返回快照并不简单,但这样做可能会消除任何受到处罚的风险。
有一些公司提供这项服务 - 我对此很好:https://ajaxsnapshots.com - 他们说Bing和Yandex(俄罗斯搜索引擎)也支持它。
AjaxSnapshots有一个API可用于在页面准备好快照时告诉他们 - 您可以在完成所有客户端渲染后调用它。