这篇文章解决了什么问题?
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"