我目前正在使用angularjs编写一个Web应用程序,但我认为这个问题适用于在客户端进行路由的任何客户端javascript框架(如角度所做).
在单页面应用中,处理错误网址的正确方法是什么?
查看几个主要网站,如果您在https://mail.google.com/mail/下面输入任意随机网址,我会看到Gmail会重定向到收件箱.这发生在服务器端(使用http 300代码)或客户端,具体取决于错误路径是在#字符之前还是之后.另一方面,twitter显示任何无效URL的真实HTTP 404.第三种选择是显示"软"404,纯粹的客户端错误页面.
这些解决方案似乎适合不同的情况.Twitter希望Twitter用户和推文的链接是真实的链接,因此人们可以分享它们,在新闻文章中发布它们等,因此无效链接被识别是非常重要的(如果我的推文链接断开了)我的网站,一个简单的爬行会告诉我).另一方面,在gmail中,您不应该将链接分享到您的收件箱中,我甚至不确定链接是否真的是永久性/持久性的:似乎网址更新主要用于浏览器历史记录导航的目的.单页应用.给出软错误的第三种方法可能适用于类似于gmail的情况,但是没有合理的"默认"页面.
经过这么长时间的介绍,这里有一些具体的问题:
javascript singlepage http-status-code-404 angularjs single-page-application
可能重复问题在角度SPA中设置404页面的最佳方法?但我没有找到可靠的答案.
我很想知道是否有办法告诉googlebot关于404页面?有一个标签用于此目的称为prerender-status-code但是我没有找到Google Seo Team的任何官方文章来确认他们尊重这个元标记.
这足以遵循这里指定的最佳实践吗?
或者我应该做些什么?(也许与Google网站管理员工具有关?)
我对一些众所周知的SPA进行了研究,我注意到SoundCloud在其404页面上添加了一个nofollow标签,如下所示:
<meta content="noindex, nofollow" name="robots">
Run Code Online (Sandbox Code Playgroud)
googlebot是否尊重后来由js添加的元标记?
我在SPA中已经有一个404处理程序,可以正常工作。这里的问题是,例如Google链接到不再存在的旧页面。当用户看到自定义的404组件时,我想Google会获得200的确定,并继续认为该页面有效。
{
path: '*',
name: 'not-found',
component: NotFound // 404
}Run Code Online (Sandbox Code Playgroud)
我让服务器重新路由到/,并让vue使用历史记录处理路由:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>Run Code Online (Sandbox Code Playgroud)
这是带有php后端的标准Vue CLI安装。PHP当前仅用于API调用。
在这种情况下,是否可以让服务器返回404状态代码?
建议的解决方案? 服务器对前端发生的路由一无所知,但是我可以让webpack输出一个站点地图或类似的内容(可以由服务器验证),在标头中设置404,并让其加载显示404的SPA。可以,还是有更好的解决方案?
请注意, 我最终自动创建了一个站点地图,然后根据该站点地图检查了路线。如果路由不匹配,则将其重新路由到自定义404。这工作得很好,但是Google仍然有些困惑。
angularjs ×2
javascript ×2
.htaccess ×1
googlebot ×1
php ×1
seo ×1
singlepage ×1
vue-router ×1
vuejs2 ×1