2026-04-01

多域名站点里的 metadata 与错误页边界笔记

记录一次博客域与业务域并存时的边界收口:哪些 metadata 应该留在根布局,哪些错误页应该做中性兜底,避免不同入口之间互相串品牌。

Next.jsMetadataArchitecture

多域名站点里的 metadata 与错误页边界笔记\n\n最近在整理一个同时承载博客内容和业务系统入口的 Next.js 项目时,我又碰到一次很典型的问题:主页面都正常,但 404、异常页和少量兜底路径会突然露出另一套品牌信息。\n\n这种问题平时不一定显眼,可一旦给真实用户看到,割裂感会非常强。\n\n## 1. 根布局不应该替所有站点段做品牌决策\n\n一开始最容易做的事情,就是把根布局当成“全站统一 metadata 中心”。如果项目只有一个品牌,这样通常没问题;但只要同一个仓库里开始共存博客域、营销页、后台工作台,这个假设就会失效。\n\n我的结论很直接:\n\n- 根布局只承接真正的默认站点语义\n- 业务域自己在路由段布局里声明 metadata\n- 不要期待一个根 metadata 同时服务所有入口\n\n## 2. 404 页面最怕的不是丑,而是串味\n\n用户访问 404 时,通常已经处在迷路状态了。如果这时候页面标题、文案和实际所在入口不一致,用户更容易怀疑是不是跳错站了。\n\n所以我现在对 404 的要求反而很朴素:\n\n- 标题足够明确\n- 文案不要过度绑定某一条业务线\n- 能快速把人带回已知入口\n\n对多入口项目来说,中性兜底往往比硬塞某个品牌更稳。\n\n## 3. 运行时错误页和 404 页不是同一个层级的问题\n\n404 更多是路由分发的兜底,而 error page 更像运行期故障的恢复提示。两者如果都沿用根布局的默认语义,很容易在细节上出错。\n\n我现在会把它们分开处理:\n\n- not-found.tsx 负责路由级找回入口\n- global-error.tsx 负责全局故障时给出中性恢复路径\n- 具体业务段如果已经有独立 metadata,就继续由该段布局承接品牌\n\n## 4. segment layout 才是业务品牌的正确落点\n\n业务域常见的错误不是“没有 metadata”,而是 metadata 放错层。像 /gym/login/command-center 这种已经明显属于同一个业务系统的入口,更适合在各自路由段布局里定义标题、描述和 robots 策略。\n\n这样即使根站点继续保留博客品牌,也不会互相污染。\n\n## 5. 博客和业务系统共仓时,先接受“分层存在”\n\n很多项目到后期都不是纯博客,也不是纯 SaaS,而是几个不同目标的入口逐步长在了一起。这个阶段最重要的不是追求绝对统一,而是先把边界解释清楚。\n\n对我来说,比较实用的检查方法是:\n\n- 首页和内容页默认属于谁\n- 登录、营销和后台是否各自有独立 metadata\n- 404 和异常页会不会把另一条业务线的品牌露出来\n- 用户迷路时能不能在 1 步内回到可用入口\n\n## 总结\n\n多域名或多入口项目里,metadata 和错误页不是“最后补一下”的装饰层,而是信息边界的一部分。只要根布局、segment layout 和兜底页面各自守住职责,品牌串味的问题通常就会明显减少。