【问题标题】:AngularJS html5mode and hard 404AngularJS html5mode 和硬 404
【发布时间】:2015-02-16 00:22:11
【问题描述】:

我有一个使用 html5mode 设置为 true 的 AngularJS 应用程序。

目前,该应用显示一个软 404 页面,并在路由器中设置了.otherwise

有没有一种方法可以在使用 html5mode 时为 SEO 提供实际的 404 HTTP 响应?

【问题讨论】:

  • 您想为每个 404 响应重定向到该页面吗?
  • 我想在使用包罗万象时获得实际的 404 HTTP 请求,以获得更好的 SEO。我知道 html5mode 使用来自浏览器的 History API,并且通过使用它,我实际上并没有向服务器发出请求。这就是问题所在。
  • 我不太明白您在什么情况下需要额外处理
  • 当用户被重定向到 404 页面时,我希望 HTTP 请求是 404,而不是我现在得到的 200。

标签: javascript angularjs seo http-status-code-404


【解决方案1】:

如果我正确理解您想要的内容,您必须执行以下操作:

  1. 在其他路径上硬重定向浏览器(绕过角度路由),如下所示:

    $routeProvider
        .otherwise({
            controller: function () {
                window.location.replace('/404'); // your custom 404 page
                                                 // or a non existing page
            }
        });
    
  2. 1234563也应该以 404 状态提供服务。

否则,如果没有外部请求,我看不出您将如何仅使用 History API 来做到这一点,因为角度路由的重点是绕过外部请求。

如果您只想让不存在的路由返回 404,那么您必须配置服务器以匹配您的所有角度路由,否则返回 404。

【讨论】:

    【解决方案2】:

    搜索引擎使用 _escaped_fragment_ 通过预渲染页面与 SPA 应用程序一起工作。您可以使用 Prerender.io(或简单的 PhantomJS)为搜索引擎生成任何状态代码,例如 https://prerender.io/documentation/best-practices

    但此架构已被 Google 弃用:http://googlewebmastercentral.blogspot.ru/2015/10/deprecating-our-ajax-crawling-scheme.html 目前 Google 尝试使用通常的抓取架构来理解您的 JS。

    硬重定向到 404.html 页面不是一个好习惯:url 必须保持不变,例如 https://stackoverflow.com/somepage

    您可以尝试 Angular2 的服务器渲染功能:https://docs.google.com/document/d/1q6g9UlmEZDXgrkY88AJZ6MUrUxcnwhBGS0EXbVlYicY/edit

    【讨论】:

      【解决方案3】:

      您必须让您的服务器发出 404 问题。 Angular 在这里无论如何都帮不上忙。

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 2015-08-21
        • 1970-01-01
        • 2014-09-10
        • 2015-04-21
        • 2015-10-04
        • 2013-11-06
        • 2014-12-21
        • 1970-01-01
        相关资源
        最近更新 更多