You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13 App Router 国际化场景下站点地图处理方案咨询

你的实现方式是正确的,同时可优化动态生成逻辑

1. sitemap.js的放置位置没问题

在Next.js 13.4+的App Router中,sitemap.js这类特殊路由文件必须放在app/根目录下,才能被框架自动识别并在/sitemap.xml路径对外提供服务,你的文件结构完全符合要求。

2. 中间件的忽略配置是必要且正确的

因为你的中间件会强制给所有不带locale的URL添加语言前缀,但Next.js只会在根路径(/sitemap.xml)提供站点地图服务,所以把sitemap加入matcher的忽略列表,能避免访问/sitemap.xml时被重定向到带locale的路径(比如/en/sitemap.xml),确保站点地图能正常被搜索引擎抓取。

3. 现有sitemap内容可优化(避免硬编码)

目前你手动编写多语言URL的方式,在页面或语言增多时维护成本会很高,建议动态生成:

  • 先定义支持的语言列表和页面路由
  • 通过遍历自动生成所有多语言URL条目
    示例代码:
const locales = ['en', 'fr'];
const pageRoutes = ['about']; // 可根据实际页面扩展

export default async function sitemap() {
  const lastModified = new Date();
  // 扁平化生成所有多语言页面的sitemap条目
  return pageRoutes.flatMap(route => {
    return locales.map(lang => ({
      url: `https://example.com/${lang}/${route}`,
      lastModified,
      changeFrequency: 'monthly',
    }));
  });
}

4. 验证方法

启动项目后:

  • 访问/sitemap.xml,确认返回的XML包含所有多语言URL
  • 访问不带locale的页面(比如/about),确认被正确重定向到对应语言版本
  • 访问/sitemap.xml,确认不会被重定向

内容的提问来源于stack exchange,提问作者sebap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:35:10