在 nextjs 里多个 sitemap 的问题

在 nextjs 应用里,如果我在 app/sitemap.ts 已经有了实现,但我在 public/sitemap.xml,最终会访问哪个 sitemap?

在 Next.js 应用中,最终访问的 sitemap.xml 取决于 Next.js 的路由优先级public 目录的静态文件规则

  1. public/sitemap.xml:Next.js 会优先提供 public 目录下的静态文件。因此,如果 public/sitemap.xml 存在,访问 /sitemap.xml 时会直接返回这个静态文件,而不会执行 app/sitemap.ts 中的逻辑。

  2. 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 位置。