在 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 位置。