Next.js SSG国际化配置下defaultLocale出现子路径重复页面是特性还是BUG?
这是Next.js的预设特性,不属于BUG。
设计逻辑说明
Next.js的i18n路由默认对defaultLocale做了双重路径兼容设计,核心是为了保障迁移兼容性和路由容错性:
官方文档中提到的「defaultLocale对应页面渲染在根路径」是默认的首选路由展示规则,但框架本身默认保留了带defaultLocale前缀的路径作为可访问的备用路径,避免老项目接入i18n后,已对外分发的带前缀外链出现404错误。
你在getStaticPaths中仅传入不带locale属性的路径时,框架内部会自动为该路径生成两条对应静态页面:
- 根路径下的
/blog/foo(符合预期的defaultLocale默认路径) - 带defaultLocale前缀的
/sv/blog/foo(兼容备用路径)
两者静态内容完全一致,属于框架预期内的生成逻辑。
禁用该特性的方案
如果不需要保留带defaultLocale前缀的路径,可在next.config.js的i18n配置中新增prefixDefault: false配置项:
i18n: { locales: ['sv', 'en'], defaultLocale: 'sv', prefixDefault: false },
配置后构建时不会再生成带defaultLocale前缀的静态路径,用户访问/sv/blog/foo时会自动308重定向到根路径的/blog/foo。
内容的提问来源于stack exchange,提问作者David Hellsing
相关产品推荐
相关产品推荐

