在 nextjs 里多个 sitemap 的问题
在 nextjs 应用里,如果我在 app/sitemap.ts 已经有了实现,但我在 public/sitemap.xml,最终会访问哪个 sitemap?
在 Next.js 应用中,最终访问的 sitemap.xml
取决于 Next.js 的路由优先级 和 public 目录的静态文件规则:
public/sitemap.xml
:Next.js 会优先提供public
目录下的静态文件。因此,如果public/sitemap.xml
存在,访问/sitemap.xml
时会直接返回这个静态文件,而不会执行app/sitemap.ts
中的逻辑。app/sitemap.ts
(动态路由):app/sitemap.ts
只有在public/sitemap.xml
不存在 时才会生效。sitemap.ts
作为 Next.js 的 dynamic route(动态 API),通常用于生成动态的sitemap.xml
,比如基于数据库内容生成最新的站点地图。
结论:
- 如果
public/sitemap.xml
存在,Next.js 会直接返回它,忽略app/sitemap.ts
。 - 如果
public/sitemap.xml
不存在,Next.js 才会运行app/sitemap.ts
生成sitemap.xml
。
解决方案:
如果你希望始终使用 app/sitemap.ts
,可以删除 public/sitemap.xml
,或者使用 动态 robots.txt
来指定正确的 sitemap.xml
位置。