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
相关产品推荐
相关产品推荐

