1. 程式人生 > 實用技巧 >NodeJs生成sitemap站點地圖

NodeJs生成sitemap站點地圖

如果部落格是使用Hexo管理的,sitemap可以使用外掛來生成。但對於一個內容管理網站,後端可能是express、koa之類的框架,這時sitemap就需要自己來生成了

什麼是sitemap

Sitemap可方便網站管理員通知搜尋引擎他們網站上有哪些可供抓取的網頁。最簡單的Sitemap形式,就是XML檔案,在其中列出網站中的網址以及關於每個網址的其他元資料(上次更新的時間、更改的頻率以及相對於網站上其他網址的重要程度為何等),以便搜尋引擎可以更加智慧地抓取網站。

sitemap結構

<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:權重

生成sitemap,基於express專案

開源包:sitemap,地址:https://github.com/ekalinin/

npm install --save sitemap

程式碼中使用

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);
        });
    });
});

廣州VI設計公司https://www.houdianzi.com

sitemap優化

上面那種方法在文章數少時還能使用,如果有幾千甚至幾萬篇文章,一次拉取的方式就不適合了,就需要把返回結果寫入到檔案中,一天更新一次。只需要只需要把

sitemap.toXML()

改成

fs.writeFileSync("app/assets/sitemap.xml", sitemap.toString());

即可。每次請求sitemap時讀檔案即可