Angular 和 SEO 索引

Angular and SEO indexing

我正在努力寻找 Angular SEO 问题的完整、明确且 up-to-date 的答案。

我有一个 Angular 应用程序,它有一个带有多个视图的主模板 index.html。视图的处理方式如下:

app.config(["$routeProvider", function($routeProvider) {

  $routeProvider

  .when("/", {
    templateUrl : "views/home.html",
    controller  : "HomeController",
    title: "Home"
  })

  .when("/about", {
    templateUrl : "views/about.html",
    controller  : "AboutController",
    title: "About"
  });

}]);

现在,当我转到 www.example.com/#/about 时,我会看到关于页面。

问题: Google 似乎没有索引视图中的链接或内容。

我看过教程解释 Google 现在如何执行 javascript,所以它应该呈现视图,但是当它爬行时,它用 ?_escaped_fragment_=[=18 替换了 hashbang =]

1: 我应该启用 hashbangs 而不仅仅是 URL 中的哈希吗?这对 Google 抓取我的网站有帮助吗? Angular 解释如下:$locationProvider.hashPrefix('!');

2: 我应该在 HTML5 模式下以干净的 URL 为目标吗?例如 www.example.com/about

3: URL hashbang/HTML5 模式是我唯一需要担心的事情吗? Google真的会执行加载视图和更新页面标题所需的javascript,然后读取渲染结果吗?

对于您希望 Google 抓取的带有 hashbang 的每个页面,您应该提供相应的 'escaped_fragment'(快照)页面,Google 将实际访问该页面。 该页面应该只是 HTML.

据我所知,Google 不会解释 javascript 和加载您的观点。

我建议您访问此页面:Serious Angular SEO

所以,回答你的问题:

1:是;

2:否;

3:您需要提供 Google 的快照,这是实际的 SEO 工作所在;涉及服务器端工作,当在 url

中检测到 _escaped_fragment_ 时呈现快照

更新:我们不再推荐我们在 2009 年提出的 AJAX 抓取建议。

2009 年,我们提议使 AJAX 个页面可抓取。当时,我们的系统无法呈现和理解使用 JavaScript 向用户呈现内容的页面。因为 "crawlers … [were] not able to see any content … created dynamically," 我们提出了一组网站管理员可以遵循的实践,以确保他们基于 AJAX 的应用程序被搜索引擎索引。

时代变了。今天,只要您不阻止 Googlebot 抓取您的 JavaScript 或 CSS 文件,我们通常能够像现代浏览器一样呈现和理解您的网页。为反映这一改进,我们最近更新了技术网站站长指南,建议不要禁止 Googlebot 抓取您网站的 CSS 或 JS 文件。

由于我们 2009 年提案的假设不再有效,我们建议遵循渐进增强的原则。例如,您可以使用 History API pushState() 来确保更广泛的浏览器(和我们的系统)的可访问性。

http://googlewebmastercentral.blogspot.com/2015/10/deprecating-our-ajax-crawling-scheme.html