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

多语言多域名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格式:确保没有未转义的特殊字符(如&需转成&amp;),模板字符串直接使用原生引号即可,无需HTML转义
  • 确认next.config.js语法:避免多余逗号、确保async rewrites()正确返回数组
  • App Router环境下:确认未在配置中禁用App Router(如experimental: { appDir: false })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:13:12