视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
NodeJs生成sitemap站点地图的方法示例
2020-11-27 21:55:10 责编:小采
文档


如果博客是使用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/sitemap.js

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

    sitemap优化

    上面那种方法在文章数少时还能使用,如果有几千甚至几万篇文章,一次拉取的方式就不适合了,就需要把返回结果写入到文件中,一天更新一次。只需要只需要把

    sitemap.toXML()

    改成

    fs.writeFileSync("app/assets/sitemap.xml", sitemap.toString());即可。每次请求sitemap时读文件即可

    下载本文
    显示全文
    专题