专栏首页jouypubNodeJs生成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/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时读文件即可

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL实现阶段累加的sql写法

      最近有一个需求:统计每日充值/消费之后的余额,对于这种需求,其实也很简单,只需要在每次充值/消费后,计算下余额,然后保存下来就可以了。但是对于这种需求,一条...

    JouyPub
  • Linux下的简易计算器

    在Linux下,当我们要随手计算一些数值,是不是第一反应要打开python交互命令行,其实有更简便的计算方法,下面来一一介绍

    JouyPub
  • MySQL时间格式TIMESTAMP和DATETIME的区别

    简书主页:https://www.jianshu.com/u/756c9c8ae984

    JouyPub
  • 手动生成sitemap

    本来google的插件是很好用的,但无奈我的wordpress主题好像有问题,安装Google XML Sitemaps后,访问sitemap.xml页面会报错...

    尾尾部落
  • Php-Laravel输入站点地图(sitemap)

    站点地图可以帮助搜索引擎更好的收录我们的站点,所以我们建站、建博客都最好有站点地图。

    无道
  • 如何更好地美化Django网站的Sitemap站点地图?

    一般在Web网站开发完成之际,如果对搜索引擎优化(SEO)有一定的要求,我们都会为网站添加一个站点地图sitemap,配合robot.txt的使用,以汇总和索引...

    州的先生
  • 米扑科技的开源项目:sitemap-php 自动生成网站地图

    米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml)

    阳光岛主
  • 黑色星期五|VR厂商又放血,电子产品真的不能再优惠了!

    感恩节一过,万众瞩目的黑色星期五终于到来了!各大商家感恩大回馈,价格一压再压,低到吓人。在这一年一度拼手速的日子里,你的体力还够吗?

    VRPinea
  • 构建自己的Python开源包

    项目地址:https://github.com/shikanon/BaiduMapAPI

    机械视角
  • SpringBoot Whitelabel Error Page This application has no explicit mapping for /error, so you are se

    使用SpringBoot写HelloWorld,当配置好启动类后,再创建新的controller或其它类,启动项目后访问对应的映射名,页面显示:

扫码关注云+社区

领取腾讯云代金券