多语言多域名Next.js 13.5站点的站点地图生成问题
解决Next.js 13.5中通过Rewrites+API接口生成多语言站点地图的构建错误问题
核心问题排查与修复步骤
1. 确认API路由目录结构(关键)
Next.js 13.5默认启用App Router,API路由的目录规则和旧版Pages Router完全不同,这是最常见的构建报错原因:
- App Router(默认):API路由必须放在
app/api/[路由名]/route.ts路径下,而非根目录的/api文件夹 - Pages Router:API路由需放在
pages/api/[文件名].ts路径下
2. 适配App Router的实现方案
步骤1:创建多语言API路由
创建通用语言站点地图接口,支持动态语言参数:
// app/api/sitemap/[lang]/route.ts export async function GET(_request: Request, { params }: { params: { lang: string } }) { const { lang } = params; // 生成对应语言的XML内容(可后续扩展页面抓取逻辑) const xmlContent = `<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://your-domain.com/${lang}</loc> <lastmod>${new Date().toISOString()}</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url> </urlset>`; return new Response(xmlContent, { headers: { "Content-Type": "text/xml; charset=utf-8", "Cache-Control": "public, s-maxage=86400, stale-while-revalidate=43200" } }); }
步骤2:配置Rewrites规则
在next.config.js中添加两个站点地图的重写规则:
// next.config.js const nextConfig = { async rewrites() { return [ { source: '/sitemap-en.xml', destination: '/api/sitemap/en', }, { source: '/sitemap-de.xml', destination: '/api/sitemap/de', }, ]; }, }; module.exports = nextConfig;
3. 适配Pages Router的实现方案
步骤1:创建独立语言API路由
// pages/api/sitemap-en.ts export default async function handler(_req, res) { const xmlContent = `<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>https://your-domain.com/en</loc> <lastmod>${new Date().toISOString()}</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url> </urlset>`; res.setHeader('Content-Type', 'text/xml'); res.setHeader('Cache-Control', 'public, s-maxage=86400, stale-while-revalidate=43200'); res.status(200).send(xmlContent); }
同理创建pages/api/sitemap-de.ts替换语言内容即可。
步骤2:配置Rewrites规则
// next.config.js const nextConfig = { async rewrites() { return [ { source: '/sitemap-en.xml', destination: '/api/sitemap-en', }, { source: '/sitemap-de.xml', destination: '/api/sitemap-de', }, ]; }, }; module.exports = nextConfig;
4. 额外排查点
- 检查XML格式:确保没有未转义的特殊字符(如
&需转成&),模板字符串直接使用原生引号即可,无需HTML转义 - 确认
next.config.js语法:避免多余逗号、确保async rewrites()正确返回数组 - App Router环境下:确认未在配置中禁用App Router(如
experimental: { appDir: false })
内容的提问来源于stack exchange,提问作者okonik
相关产品推荐
相关产品推荐

