主要讲一下如何用Nodejs + express + sitemap.js 来动态生成 sitemap.xml
。 自己的博客前端动态生成 sitemap.xml
来让搜索引擎(google_site:diamondfsd.com)抓取,生成了 sitemap.xml
过后,果然自己博客的收录速度快了很多。
下面就简单的介绍一下 sitemap.xml
的作用以及 一个简单的例子。
sitemap 介绍
sitemap,翻译过来就是站点地图。是告诉搜索引擎这个网站上有那些页面可以抓取。
sitemap最简单的格式 txt
格式, 只需要每行列出一个链接就可以: sitemap.txt
https://diamondfsd.com/xxx/xxx
https://diamondfsd.com/xxx/xxx
.......
另外一种比较丰富的格式就是xml格式,xml格式由
作为根元素,内嵌多个
https://diamondfsd.com/sitemap.xml
http://diamondfsd.com/article/0514fe5c-3925-4175-9486-940c0ee9c054
2017-01-14
daily
http://diamondfsd.com/article/35caae5b-78f5-4728-9170-92144570c7a3
2017-01-22
daily
[Sitemap] XML格式标签定义
标签 | 参数 | 描述 |
---|---|---|
|
必须 | 属性内写了当前使用的协议标准 |
|
必须 | 每个url条目的父标签,内包含了url的一些其他信息描述 |
|
必须 | 网页的网址(网址以协议开头 http:// [https://] ) |
|
可选 | 网页的最后一次修改时间,使用W3C的时间标准,例如 YYYY-MM-DD |
|
可选 | 网页的更新频率,可以供搜索引擎参考抓取频率 always, hourly, daily, weekly, monthly, yearly, never (搜索引擎的会有自己的抓取策略,所以这个值仅供搜索引擎参考) |
|
可选 | 优先级取值范围 0.1 至 1。 ----- 也是一个供搜索引擎参考的值 |
如何动态生成sitemap.xml 文件
毫无疑问,sitemap.xml 拥有更丰富的语义,可以更好的让搜索引擎抓取。本博客使用的sitemap.js 来生成 sitemap.xml
文件。
import express from 'express'
import sm from 'sitemap'
import service from './service/ArticleService'
const app = express()
const host = 'https://diamondfsd.com'
/* service.allNames 获取一个文章list 结构如下
* {
title: String,
id: String,
updateTime: Long
}
*/
app.get('/sitemap.xml', (req, res) => {
service.allNames().then(data => {
let smOption = {
hostname: host,
cacheTime: 600000,
urls: [host]
}
data.forEach(art => {
smOption.urls.push({
url: `/article/${art.id}`,
changefreq: 'daily',
lastmod: new Date(art.updateTime)
})
})
let xml = sm.createSitemap(smOption).toString()
res.header('Content-Type', 'application/xml')
res.send(xml)
}).catch(e => {
res.send(e)
})
})
具体的文档,可以去 ekalinin/sitemap.js 去看,这里只说一下本博客中的实际使用。 我将所有的文章的id以及更新时间获取到,然后生成 url 对象
{
url: `/article/${article.id}`,
changefreq: 'daily',
lastmod: new Date(art.updateTime)
}
然后构成 创建sitemap.xml 所需要的 对象
{
hostname: host,
cacheTime: 600000,
urls: [url, url, url, url...]
}
最后用 sitemap
的 createSitemap(opt).toString()
方法获得 xml
字符串 然后发送到客户端。
每次搜索引擎请求https://diamondfsd.com/sitemap.xml的时候,就会获取最新的文章列表,然后生成最新的sitemap.xml。 这样能够让搜索引擎更快,跟全面的获取到网站想要被抓取的网页地图。