网站设置 /
页面不存在时:该用重定向还是 404?
当访客打开一个不存在的网址时,你有两种处理方式:跳转(重定向)到另一个页面,或者返回一个「页面不存在」提示页(404)。这两者看起来都能“不让用户看到报错”,但它们的含义完全不同,用错了会伤害 SEO 和用户体验。
这篇教程帮你分清二者的区别,并给出在 Creght 里的正确做法。
一句话结论
具体的旧网址搬到了新网址 → 用重定向。
网址本身就不该存在(打错、已删除、乱猜的链接) → 返回 404,用一个友好的 404 页引导用户。
不要把所有不存在的网址统统重定向到首页 —— 这是搜索引擎明确不推荐的做法。
重定向和 404 到底差在哪
| 重定向(Redirect) | 404 页面 | |
|---|---|---|
| 地址栏 URL | 会变(跳到新地址) | 不变(停留在原地址) |
| HTTP 状态码 | 301 / 308(永久)、302 / 307(临时) | 404 |
| 含义 | “这个内容搬到别处了,去那边看” | “这个内容不存在” |
| 搜索引擎理解 | 把旧网址的权重转移到新网址 | 知道该网址无效,将其从索引中移除 |
| 适用场景 | 已知的、一对一的网址迁移 | 任何未知 / 已失效的网址 |
关键点:重定向是“搬家通知”,404 是“查无此人”。一个不存在的乱猜网址并没有“搬到”任何地方,所以它不该被重定向,而应该老老实实告诉搜索引擎和用户“这里没有内容”。
三种常见场景,分别怎么做
场景一:给访客一个友好的“页面不存在”提示
访客打错网址、或点了一个已经删掉的链接。你希望页面不要太生硬,最好带上返回首页的入口、搜索框、或热门内容推荐。
做法:做一个自定义 404 页。URL 保持不变,状态码返回 404,页面内容由你自己设计。这是绝大多数情况下的正确选择。
场景二:某个旧网址已经搬到新网址
比如你把 /old-blog/hello 换成了 /posts/hello,老链接还在别处被引用、被收藏、被搜索引擎收录。
做法:配置一条重定向规则,用永久重定向(308)把旧网址指向新网址。这样访客和搜索引擎都会被平滑地带到新地址,旧网址积累的 SEO 权重也会转移过去。
场景三:想把所有未知网址都甩到首页
这看起来“很干净”,但强烈不推荐。
对搜索引擎:Google 会把“内容不存在却返回 200 或跳转到首页”判定为 软 404(Soft 404),反而拉低网站质量评分。Google 官方建议不存在的页面应当返回真实的 404。
对用户:访客以为自己点错了,却莫名其妙到了首页,很困惑,也找不到原本想要的内容。
正确做法:返回 404,然后在 404 页面里放一个显眼的“返回首页”按钮。既符合搜索引擎规范,也照顾了用户体验。
在 Creght 里怎么做
1. 自定义 404 页:新建 page/404.tsx
在页面目录下新建一个名为 404 的页面(page/404.tsx)。之后,任何没有匹配到的网址都会自动渲染这个页面,并返回 404 状态码,地址栏保持访客输入的原网址。
// page/404.tsx
export default function NotFound() {
return (
<main style={{ textAlign: 'center', padding: '80px 20px' }}>
<h1>404</h1>
<p>抱歉,你访问的页面不存在。</p>
<a href="/">返回首页</a>
</main>
)
}同理,你也可以新建 page/500.tsx 来自定义“服务器出错”时的页面。
小贴士:404 页也可以像普通页面一样使用组件、样式和
getServerSideProps,比如展示推荐文章或站内搜索框。
2. 配置重定向:在 talizen.config.ts 里写 redirects
对于“已知网址迁移”,在站点根目录的 talizen.config.ts 中配置重定向规则:
// talizen.config.ts
export default {
redirects: [
// 精确匹配:308 永久重定向
{ source: '/old-page', destination: '/new-page', permanent: true },
// 通配符匹配:把 /blog 下的路径整体迁移到 /posts(307 临时)
{ source: '/blog/*', destination: '/posts/*', permanent: false },
],
}permanent: true返回 308(永久重定向),适合内容确实永久搬家、希望转移 SEO 权重的情况。permanent: false返回 307(临时重定向),适合临时性的跳转。source支持精确匹配和结尾/*通配符(*命中的路径段会回填到destination的*)。
重定向规则优先于页面匹配:命中规则的网址会直接跳转,不再进入页面渲染,因此不会触发 404。
决策速查
这个网址曾经有内容、现在搬走了?→ 重定向(
talizen.config.ts的redirects,永久用 308)。这个网址从来就不该存在?→ 404(自定义
page/404.tsx,页内放返回首页入口)。拿不准?→ 默认用 404。它是最安全、对 SEO 最友好的兜底方案。
