
在 next.js 应用中,可通过 next.config.js 配置服务器端重定向规则,对所有未匹配的路由(如 /nonexistent)执行 301 永久重定向至 /home,避免触发客户端 404 页面,提升 seo 友好性与用户体验。
在 next.js 应用中,可通过 next.config.js 配置服务器端重定向规则,对所有未匹配的路由(如 /nonexistent)执行 301 永久重定向至 /home,避免触发客户端 404 页面,提升 seo 友好性与用户体验。
Next.js 支持在构建时通过 next.config.js 的 redirects 函数式配置实现真正的服务端重定向(HTTP 301),这比客户端跳转更高效、更符合 SEO 最佳实践——尤其适用于您刚接手域名、大量旧 URL 已失效的场景。
✅ 正确做法:使用 next.config.js 中的 redirects 配置(Next.js 13.2+ 推荐方式)
// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
async redirects() {
return [
{
source: '/:path*',
destination: '/home',
permanent: true, // → 发送 301 状态码
has: [
{
type: 'host',
value: '(?<domain>.+)', // 可选:限定域名范围
},
],
},
];
},
};
module.exports = nextConfig;</domain>
⚠️ 注意事项:
- source: '/:path*' 使用通配符捕获所有路径(包括 /, /foo, /api/xyz),但不匹配已定义的静态/动态路由(如 /home、/about、/contact 或 [slug])。Next.js 会优先匹配明确声明的页面,仅对未命中任何页面的请求触发此重定向。
- permanent: true 表示返回 HTTP 301(永久重定向),搜索引擎会更新索引,有效降低 404 率并传递权重。
- 若需排除某些路径(如 API 路由或静态资源),可添加条件 has 或改用更精确的正则(如 source: '/(.+)'),避免干扰 / 或 /favicon.ico 等特殊路径。
❌ 不推荐方案说明:
- 自定义 404.js + useRouter.push() 属于客户端 JavaScript 跳转(HTTP 200 + 前端导航),无法返回 301 状态码,对 SEO 无效,且用户仍会短暂看到 404 页面;
- getServerSideProps 中重定向仅适用于页面级逻辑,无法覆盖全部未定义路由,维护成本高且不可扩展。
? 进阶建议:
配合日志监控:在重定向前记录原始 req.url(需使用中间件 middleware.ts),识别高频 404 来源,逐步修复或补充真实页面;
-
若需区分“不存在页面”和“API 错误”,可在 middleware.ts 中精准拦截并返回不同响应:
// middleware.ts import { NextRequest, NextResponse } from 'next/server'; export function middleware(req: NextRequest) { const { pathname } = req.nextUrl; // 排除 /_next/、/api/、/static 等系统路径 if ( !pathname.startsWith('/_next') && !pathname.startsWith('/api') && !pathname.startsWith('/static') && !['/home', '/about', '/contact'].includes(pathname) ) { return NextResponse.redirect(new URL('/home', req.url), { status: 301 }); } }
综上,直接在 next.config.js 中配置 redirects 是最简洁、可靠、SEO 友好的服务端永久重定向方案,完美解决域名迁移后的历史 URL 失效问题。











