我们正在使用Symfony2 + AngularJS的项目。 每个不同的域(symfony2的api.domain和Angular项目的www.domain)。
现在我们专注于SEO部分。 我们使用Prerender.io来创build静态快照,以便为抓取工具提供良好的HTML Raw页面。
但问题是在服务Angular的“404页面”时:
$urlRouterProvider .otherwise('/404');
问题是, 我们所做的是将一个不存在的页面redirect到我们的“404页面”,这个页面带有200个标题状态代码,这对于search引擎优化很不利
由于AngularJS不能生成,我们已经尝试了两件事情:
1.使用htaccess / Apacheredirect:
RedirectMatch 404 "/404"
2.调用一个返回404错误的Web服务:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <title>404 Not Found</title> </head> <body> <h1>Not Found</h1> <p>The requested URL /do-not-access was not found on this server.</p> </body> </html>
而对于AngularJS方面,我们试图抛出头状态代码没有成功:
return $http.get(ENV.apiEndpoint + '/do-not-access');
这一切都不适合我们…
我们也是关于使用第二个“404页面”。 这个想法是通过带有404状态代码的htaccess将我们的第一个404页面redirect到第二个404页面,但是我们认为这不会由于AngularJS内部redirect而工作:
200 -> 301 -> 404
PS:我发现: AngularJS html5mode和硬404表示“我们必须configuration我们的服务器为您的自定义404页面做一个路由例外”,但我们真的不知道如何做到这一点…
我们正在关注一个不好的方面吗?
还有其他的select吗?
我们如何处理?
有任何想法吗?
看来prerender.io提供了一种处理http头状态的方法 。
例如,对于一个404页面,我们只需要将这个元标记添加到我们的头标记中 :
<meta name="prerender-status-code" content="404">
文档: https : //prerender.io/documentation/best-practices