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

Nuxt2 基于Axios接口数据动态生成多语言sitemap站点地图

多语言站点地图生成实现方案

整个实现不需要额外引入复杂的XML处理依赖,直接基于Axios + Node.js原生文件模块就能搞定,步骤如下:

前置准备

如果项目还没安装Axios,先执行安装命令:
npm i axios

核心实现逻辑

接口返回的内容本身就是符合sitemap规范的标准XML,不需要二次解析转换,只要按语言标识分别发起请求,拿到响应内容直接写入对应文件即可,避免解析再转义导致的格式错误。

  1. 新建生成脚本generate-sitemap.js,代码如下:
const axios = require('axios');
const fs = require('fs/promises');
const path = require('path');

// 站点地图接口地址
const SITEMAP_API = 'http://mysite/api/sitemap';
// 输出目录,替换为你项目中存放静态资源、构建后会部署到站点根目录的文件夹,比如常规项目的public目录
const OUTPUT_DIR = path.resolve(__dirname, './public');

// 三个版本站点地图的配置
const sitemapTaskList = [
  {
    outputFileName: 'sitemap.xml',
    // 默认版本不传语言标识,按接口默认返回内容写入
    headers: {}
  },
  {
    outputFileName: 'sitemap-en.xml',
    // 英语版传EN标识,请求头字段名替换为你和后端约定的实际字段,比如Accept-Language、X-Site-Lang等
    headers: {
      'X-Lang': 'EN'
    }
  },
  {
    outputFileName: 'sitemap-fr.xml',
    // 法语版传FR标识
    headers: {
      'X-Lang': 'FR'
    }
  }
]

async function batchGenerateSitemaps() {
  // 自动创建输出目录,目录已存在也不会报错
  await fs.mkdir(OUTPUT_DIR, { recursive: true });

  for (const task of sitemapTaskList) {
    try {
      const response = await axios.get(SITEMAP_API, {
        headers: task.headers,
        // 关键配置:指定响应类型为文本,避免Axios自动把XML内容按JSON解析导致格式错乱
        responseType: 'text'
      });
      const targetFilePath = path.join(OUTPUT_DIR, task.outputFileName);
      // 直接将接口返回的XML内容写入文件
      await fs.writeFile(targetFilePath, response.data, 'utf8');
      console.log(`[sitemap生成成功] ${targetFilePath}`);
    } catch (error) {
      console.error(`[sitemap生成失败] ${task.outputFileName}`, error.message);
      // 如果要求生成失败时中断构建流程,放开下行代码即可
      // process.exit(1);
    }
  }
}

batchGenerateSitemaps();

配置自动执行

把脚本配置到项目的构建流程里,每次构建前自动生成最新的站点地图,不需要手动执行,修改package.json的scripts字段即可,示例:

{
  "scripts": {
    "prebuild": "node generate-sitemap.js",
    "build": "你项目原有的构建命令,比如vite build、next build"
  }
}

注意事项

  • 代码里的请求头字段名不要硬抄,要和后端约定的语言标识传参字段对齐,否则拿不到对应语言的内容
  • 如果接口有缓存,请求时可以拼接时间戳参数绕过缓存,把请求地址改为`${SITEMAP_API}?t=${Date.now()}`即可
  • 输出目录一定要配置正确,要保证生成的三个xml文件构建后会被放到站点根目录,否则搜索引擎抓取不到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 07:27:19