若是博客是使用Hexo管理的,sitemap能夠使用插件來生成。但對於一個內容管理網站,後端多是express、koa之類的框架,這時sitemap就須要本身來生成了git
Sitemap可方便網站管理員通知搜索引擎他們網站上有哪些可供抓取的網頁。最簡單的Sitemap形式,就是XML文件,在其中列出網站中的網址以及關於每一個網址的其餘元數據(上次更新的時間、更改的頻率以及相對於網站上其餘網址的重要程度爲什麼等),以便搜索引擎能夠更加智能地抓取網站。github
<url> <loc>http://www.jouypub.com/</loc> <lastmod>2019-05-01</lastmod> <changefreq>daily</changefreq> <priority>0.5</priority> </url>
loc:文章連接地址
lastmod:最後更新時間
changefreq:更新頻率,daily/monthly
priority:權重shell
開源包:sitemap,地址: https://github.com/ekalinin/s...express
> npm install --save sitemap
代碼中使用npm
const express = require('express') const sm = require('sitemap'); router.get('/sitemap.xml', function (req, res) { let pageRequest = Object.create({}); pageRequest.pageSize = -1; pageRequest.pageNum = 1; api.post('/article/list', pageRequest, function (result) { let urls = []; for (let article in result) { urls.push({ url: article.url, changefreq: 'daily', lastmodrealtime: true, priority: 1, lastmod: article.updateTime }); } let sitemap = sm.createSitemap({ hostname: 'http://invest.jouypub.com', cacheTime: 600000, // 600sec, cache purge period urls: urls }); sitemap.toXML(function (err, xml) { if (err) { console.log(err); return res.status(500).end(); } res.header('Content-Type', 'application/xml'); res.send(xml); }); }); });
上面那種方法在文章數少時還能使用,若是有幾千甚至幾萬篇文章,一次拉取的方式就不適合了,就須要把返回結果寫入到文件中,一天更新一次。只須要只須要把sitemap.toXML()
改爲fs.writeFileSync("app/assets/sitemap.xml", sitemap.toString());
便可。每次請求sitemap時讀文件便可segmentfault