SEO优化之sitemap(多语言)

本文介绍了SEO优化中的多语言sitemap.xml的生成,探讨了添加sitemap的原因,参照了google sitemap规范,并推荐了使用sitemap.js库来处理。还分享了参考的sitemap实例,提供了XML格式化工具和自动化流程,包括在构建后更新sitemap并上传到服务器的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章解决了什么问题?

1. 添加新的页面需要从新修改sitemap.xml文件(每次添加新页面都需要修改一遍,如果添加了新页面忘记修改sitemap.xml文件导致的问题)
2. 多语言(国际化)的sitemap.xml应该怎么样编写?
3. 通过node 如何获取某个目录结构下的所有文件夹名称(包含相对路径)
4. 自己官网的语言和sitemap.xml 支持语言的转换
5. build完成后想执行node脚本应该怎么做

1.为什么要添加sitemap?

便于搜索引擎可以更加智能地抓取网站

2.sitemap.xml多语言 参考google sitemap

sitemap.org 文档
google sitemap 文档 需要翻墙

3. node使用的生成sitemap的库

https://github.com/ekalinin/sitemap.js

4.我参考过的sitemap.xml

1.苹果官网sitemap
2.https://trezor.io/sitemap.xml 等等 哈哈

5.sitemap.xml 格式化工具

https://tool.oschina.net/codeformat/xml

接下来我就先上目录结构了
在这里插入图片描述
动态生成的sitemap.xml

上代码啦
上代码啦
上代码啦
重要的事情说三遍

const {
    createWriteStream } = require('fs');
const fs = require('fs');
let  join = require('path').join;
const {
    SitemapStream } = require('sitemap');
//website 支持语言
const supportLanguageList = ['de', 'en', 'es', 'fr', 'jp', 'kr', 'ru', 'cn', 'tc'];
//website 支持页面 default
let pageNameList = ["","404","ambassador","ambassador/ambassador-child","ambassador/ambassador-child/ambassador-grandson","apprentice","apprentice/apprentice-child"]
//website 域名
const hostname = "你们公司的域名"; //例如 https://www.balletcrypto.com
//语言转换sitemap 语言
const languageConversion = (value) => {
   
  let languageChange = value;
  switch (value) {
   
    case "jp":
      languageChange = "ja"
      break;
    case "kr":
      languageChange = "ko"
      break;
    case "cn":
      languageChange = "zh-Hans"
      break;
    case "tc":
      languageChange = "zh-Hant"
      break;
  }
  return languageChange;
}
//读取文件 获取多个文件名称列表
let path = './dist/' //获取此文件夹下的所有文件夹名称列表
let fileNameList = [""]//默认添加根路径

const getAllFolderName = (path,parentFilePath='')=>{
   
  const files = fs.readdirSync(path)
  files.map((item, index) =>{
   
    //console.log(item)
    let fPath = join(path,item)
    let stat = fs.lstatSync(fPath)
    //是否是文件夹
    if (stat.isDirectory() === true) {
   
      if(parentFilePath===''){
   
        fileNameList.push(item)
      }else{
   
        fileNameList.push(`${
     parentFilePath}/${
     item}`)
      }
      //无限级目录
      if(parentFilePath!=''){
   
        item = `${
     parentFilePath}/${
     item}`
      }
      getAllFolderName(fPath,item)
    }
  })
}
getAllFolderName(path)
//console.log(fileNameList)
pageNameList = fileNameList;
// 给定带有url的输入配置,创建一个sitemap对象
const sitemap = new SitemapStream({
    hostname: hostname });

const writeStream = createWriteStream('./dist/sitemap.xml');//你要设置你build后的需要上传服务器的文件目录
//links
const linkContent = (pageNameItem, symbol) => {
   
  let links = [];
  supportLanguageList.map(languageItem => {
   
    links.push({
    lang: languageConversion(languageItem), url: `${
     hostname}/${
     languageItem}/${
     pageNameItem}${
     symbol}` })
  })
  return links;
}
sitemap.pipe(writeStream);
let sitemapContent = [];
pageNameList.map(pageNameItem => {
   
  let symbol = '';
  if (pageNameItem != "") {
   
    symbol = '/'
  }
  supportLanguageList.map(languageItem => {
   
    sitemapContent.push(
      {
   
        url: `${
     hostname}/${
     languageItem}/${
     pageNameItem}${
     symbol}`,
        changefreq: 'daily',
        links: linkContent(pageNameItem, symbol)
      }
    )
  })
})
//遍历 添加
sitemapContent.map(item => {
   
  sitemap.write(item)
})

sitemap.end();

很重要的
如何在build之后 根据生成的文件目录(包含新添加的页面路径)在执行脚本呢?
在build后的文件中添加sitemap.xml

  "scripts": {
   
    "build": "yarn build &&  yarn generatesitemap",
    "generatesitemap": "node sitemap.js"
  },

接下来根据自己的自动化工具把build之后的文件上传服务器

我们公司官网 https://www.balletcrypto.com/
我们公司官网 sitemap.xml文件 https://www.balletcrypto.com/sitemap.xml

欢迎大家观看网站并提出合理建议(留言区哦)
欢迎币圈大佬前来购买balletCrypto钱包 (项目浅谈 留言区哦)

最后生成的sitemap.xml 文件

<?xml version="1.0" encoding="utf-8"?>

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>https://www.balletcrypto.com/de/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/en/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/es/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/fr/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/jp/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/kr/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/ru/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/cn/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/tc/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/de/404/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/404/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/404/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/404/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/404/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/404/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/404/"/>
    <xhtml:link rel="alternate" hreflang="ru" href="https://www.balletcrypto.com/ru/404/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hans" href="https://www.balletcrypto.com/cn/404/"/>
    <xhtml:link rel="alternate" hreflang="zh-Hant" href="https://www.balletcrypto.com/tc/404/"/>
  </url>
  <url>
    <loc>https://www.balletcrypto.com/en/404/</loc>
    <changefreq>daily</changefreq>
    <xhtml:link rel="alternate" hreflang="de" href="https://www.balletcrypto.com/de/404/"/>
    <xhtml:link rel="alternate" hreflang="en" href="https://www.balletcrypto.com/en/404/"/>
    <xhtml:link rel="alternate" hreflang="es" href="https://www.balletcrypto.com/es/404/"/>
    <xhtml:link rel="alternate" hreflang="fr" href="https://www.balletcrypto.com/fr/404/"/>
    <xhtml:link rel="alternate" hreflang="ja" href="https://www.balletcrypto.com/jp/404/"/>
    <xhtml:link rel="alternate" hreflang="ko" href="https://www.balletcrypto.com/kr/404/"/>
    <xhtml:link rel="alternate" 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值