Vercel自定义域名访问Next.js站点返回Not Found问题求助
问题描述
TL;DR:Next.js站点在Vercel分配的所有默认域名(含生产域名、预览域名)上均可正常运行,但使用自定义域名访问时,页面返回「Not Found - Request ID:」错误,错误页面样式如下:
相关信息如下:
- Vercel默认访问域名:
https://tasmto.vercel.app/ - 配置的自定义域名:
http://www.tasmto.com/ - 项目代码仓库:
https://github.com/tasmto/portfolio/
已确认配置
站点代码存放在仓库的web子文件夹下,已在Vercel项目设置中将根目录指定为该子文件夹,且已确认项目框架正确识别为Next.js,配置参考如下:
已尝试排查操作
- 先后通过配置A记录、修改域名Nameserver两种方式完成域名解析指向
- 删除整个Vercel项目后重新创建、完成全流程配置重试
- 放弃配置根域名,仅将www子域名指向Vercel应用
- 多次触发应用重新部署
补充说明:同一套代码部署到Netlify时可完全正常运行,仅在Vercel平台使用自定义域名访问时出现异常,暂无法定位根因。
PS:已知平台存在大量同类问题的相关提问,但要么对应解决方案无法适配当前场景,要么存在未排查到的配置疏漏。
问题根因与解决步骤
注意:你看到的带Request ID的Not Found页面是Vercel边缘网络直接返回的,不是你的Next.js应用返回的,说明请求根本没有转发到你部署的Next.js服务。既然Vercel默认域名访问完全正常,就证明应用部署、子目录配置、框架预设全部没有问题,故障点在域名和Vercel平台的绑定/校验环节。
按以下顺序排查,可覆盖99%的同类场景:
- 校验Vercel后台域名配置状态
打开Vercel项目的Settings-Domains页面,查看已绑定的根域名、www子域名条目,状态必须为绿色的「Valid Configuration」。如果显示配置无效,严格按照页面给出的解析要求修正:- 根域名用A记录绑定的话,解析值必须填
76.76.21.21,不能填其他IP - www子域名用CNAME绑定的话,解析值必须填
cname.vercel-dns.com - 如果域名当前还托管在其他平台(比如之前用过的Netlify),先把其他平台上绑定的该域名全部删除,避免所有权校验冲突。
- 根域名用A记录绑定的话,解析值必须填
- 排查域名所有权冲突
如果之前在其他平台、其他Vercel账号下绑定过这个域名,必须先在对应位置完全删除域名绑定记录,再回到Vercel的Domains页面点击Refresh重新校验。Vercel检测到域名被其他服务占用时,会直接在边缘层返回404,不会把请求转发到你的部署。 - 确认生产部署的域名关联关系
打开项目的Deployments标签,找到标记为Production的最新部署,进入详情页查看关联的Domains列表,确认你的自定义域名在列表中。如果不在,说明之前绑定域名时错误关联到了旧部署/预览部署,生产部署没有绑定该域名,会直接触发边缘层404。 - 清除边缘路由缓存
以上配置确认无误后如果仍报错,直接在Domains页面选中对应自定义域名,选择Remove Domain删除后重新添加绑定。该操作会强制刷新Vercel边缘节点的路由缓存,解决绝大多数因配置变更未同步导致的404问题。
验证修复结果时不要直接在浏览器刷新(浏览器本地DNS缓存会影响结果),可先在终端执行nslookup 你的自定义域名确认解析已指向Vercel地址,再用curl工具访问域名,若返回的响应头包含x-vercel-id字段且状态码为200,说明配置已经生效。
内容的提问来源于stack exchange,提问作者tasmto
相关产品推荐
相关产品推荐

