Neurological Phenomenon Multiplexer


Does your artifact manager get in the way? Join us on Oct. 8 at 10am PT, to discuss how npm can help.Sign up »


4.0.2 • Public • Published

sitemap.js Build Status

sitemap.js is a high-level sitemap-generating framework that makes creating sitemap XML files easy.


Table of Contents


npm install --save sitemap



Just feed the list of urls into sitemap

npx sitemap < listofurls.txt

Also supports line separated JSON for full configuration

npx sitemap --json < listofurls.txt

Or verify an existing sitemap

npx sitemap --verify sitemap.xml

As a library

The main functions you want to use in the sitemap module are

const { createSitemap } = require('sitemap')
// Creates a sitemap object given the input configuration with URLs
const sitemap = createSitemap({ options });
// Gives you a string containing the XML data
const xml = sitemap.toString();

Example of using sitemap.js with express:

const express = require('express')
const { createSitemap } = require('sitemap');
const app = express()
const sitemap = createSitemap({
  hostname: '',
  cacheTime: 600000,        // 600 sec - cache purge period
  urls: [
    { url: '/page-1/',  changefreq: 'daily', priority: 0.3 },
    { url: '/page-2/',  changefreq: 'monthly',  priority: 0.7 },
    { url: '/page-3/'},    // changefreq: 'weekly',  priority: 0.5
    { url: '/page-4/',   img: "" }
app.get('/sitemap.xml', function(req, res) {
  try {
    const xml = sitemap.toXML()
    res.header('Content-Type', 'application/xml');
    res.send( xml );
  } catch (e) {

Example of dynamic page manipulations into sitemap:

const sitemap = createSitemap ({
  hostname: '',
  cacheTime: 600000
sitemap.add({url: '/page-1/'});
sitemap.add({url: '/page-2/', changefreq: 'monthly', priority: 0.7});
sitemap.del({url: '/page-2/'});

Example of most of the options you can use for sitemap

const { createSitemap } = require('sitemap');
const sitemap = createSitemap({
  hostname: '',
  level: 'warn', // default WARN about bad data
  urls: [
      url: '/page1',
      changefreq: 'weekly',
      priority: 0.8,
      lastmodfile: 'app/assets/page1.html'
      url: '/page2',
      changefreq: 'weekly',
      priority: 0.8,
      /* useful to monitor template content files instead of generated static files */
      lastmodfile: 'app/templates/page2.hbs'
    // each sitemap entry supports many options
    // See [Sitemap Item Options](#sitemap-item-options) below for details
      url: '',
      img: [
          url: '',
          caption: 'An image',
          title: 'The Title of Image One',
          geoLocation: 'London, United Kingdom',
          license: ''
          url: '',
          caption: 'Another image',
          title: 'The Title of Image Two',
          geoLocation: 'London, United Kingdom',
          license: ''
      video: [
          thumbnail_loc: '',
          title: 'A video title',
          description: 'This is a video'
          thumbnail_loc: '',
          title: 'A video with an attribute',
          description: 'This is another video',
          'player_loc': '',
          'player_loc:autoplay': 'ap=1'
      links: [
        { lang: 'en', url: '' },
        { lang: 'ja', url: '' }
      androidLink: 'android-app://',
      news: {
        publication: {
          name: 'The Example Times',
          language: 'en'
        genres: 'PressRelease, Blog',
        publication_date: '2008-12-23',
        title: 'Companies A, B in Merger Talks',
        keywords: 'business, merger, acquisition, A, B',
        stock_tickers: 'NASDAQ:A, NASDAQ:B'

Building just the sitemap index file

The sitemap index file merely points to other sitemaps

const { buildSitemapIndex } = require('sitemap')
const smi = buildSitemapIndex({
  urls: ['', ''],
  xslUrl: '' // optional

Auto creating sitemap and index files from one large list

const { createSitemapIndex } = require('sitemap')
const smi = createSitemapIndex({
  cacheTime: 600000,
  hostname: '',
  sitemapName: 'sm-test',
  sitemapSize: 1,
  targetFolder: require('os').tmpdir(),
  urls: ['', '']
  // optional:
  // callback: function(err, result) {}



const { Sitemap } = require('sitemap')
const sm = new Sitemap({
    urls: [{url: '/path'}],
    hostname: '',
    cacheTime: 0, // default
    level: 'warn' // default warns if it encounters bad data 
sm.toString() // returns the xml as a string


Build a sitemap index file

const { buildSitemapIndex } = require('sitemap')
const index =   buildSitemapIndex({
  urls: [{url: '', lastmod: '2019-07-01'}, ''],
  lastmod: '2019-07-29'


Create several sitemaps and an index automatically from a list of urls

const { createSitemapIndex } = require('sitemap')
  urls: [/* list of urls */],
  targetFolder: 'absolute path to target folder',
  hostname: '',
  cacheTime: 600,
  sitemapName: 'sitemap',
  sitemapSize: 50000, // number of urls to allow in each sitemap
  xslUrl: '',// custom xsl url
  gzip: false, // whether to gzip the files
  callback: // called when complete;

Sitemap Item Options

Option Type eg Description
url string The only required property for every sitemap entry
lastmod string '2019-07-29' or '2019-07-22T05:58:37.037Z' When the page we as last modified use the W3C Datetime ISO8601 subset
changefreq string 'weekly' How frequently the page is likely to change. This value provides general information to search engines and may not correlate exactly to how often they crawl the page. Please note that the value of this tag is considered a hint and not a command. See for the acceptable values
priority number 0.6 The priority of this URL relative to other URLs on your site. Valid values range from 0.0 to 1.0. This value does not affect how your pages are compared to pages on other sites—it only lets the search engines know which pages you deem most important for the crawlers. The default priority of a page is 0.5.
img object[] see #ISitemapImage
video object[] see #IVideoItem
links object[] see #ILinkItem Tell search engines about localized versions
news object see #INewsItem
ampLink string ''
mobile boolean or string
cdata boolean true wrap url in cdata xml escape


Sitemap image

Option Type eg Description
url string '' The URL of the image.
caption string - optional 'Here we did the stuff' The caption of the image.
title string - optional 'Star Wars EP IV' The title of the image.
geoLocation string - optional 'Limerick, Ireland' The geographic location of the image.
license string - optional '' A URL to the license of the image.


Sitemap video.

Option Type eg Description
thumbnail_loc string "" A URL pointing to the video thumbnail image file
title string '2018:E6 - GoldenEye: Source' The title of the video.
description string 'We play gun game in GoldenEye: Source with a good friend of ours. His name is Gruchy. Dan Gruchy.' A description of the video. Maximum 2048 characters.
content_loc string - optional "" A URL pointing to the actual video media file. Should be one of the supported formats.HTML is not a supported format. Flash is allowed, but no longer supported on most mobile platforms, and so may be indexed less well. Must not be the same as the URL.
player_loc string - optional "" A URL pointing to a player for a specific video. Usually this is the information in the src element of an tag. Must not be the same as the URL
'player_loc:autoplay' string - optional 'ap=1' a string the search engine can append as a query param to enable automatic playback
duration number - optional 600 duration of video in seconds
expiration_date string - optional "2012-07-16T19:20:30+08:00" The date after which the video will no longer be available
view_count string - optional '21000000000' The number of times the video has been viewed.
publication_date string - optional "2018-04-27T17:00:00.000Z" The date the video was first published, in W3C format.
category string - optional "Baking" A short description of the broad category that the video belongs to. This is a string no longer than 256 characters.
restriction string - optional "IE GB US CA" Whether to show or hide your video in search results from specific countries.
restriction:relationship string - optional "deny"
gallery_loc string - optional "" Currently not used.
gallery_loc:title string - optional "awhu series page" Currently not used.
price string - optional "1.99" The price to download or view the video. Omit this tag for free videos.
price:resolution string - optional "HD" Specifies the resolution of the purchased version. Supported values are hd and sd.
price:currency string - optional "USD" currency [Required] Specifies the currency in ISO 4217 format.
price:type string - optional "rent" type [Optional] Specifies the purchase option. Supported values are rent and own.
uploader string - optional "GrillyMcGrillerson" The video uploader's name. Only one video:uploader is allowed per video. String value, max 255 charactersc.
platform string - optional "tv" Whether to show or hide your video in search results on specified platform types. This is a list of space-delimited platform types. See for more detail
platform:relationship string 'Allow'|'Deny' - optional 'Allow'
id string - optional
tag string[] - optional ['Baking'] An arbitrary string tag describing the video. Tags are generally very short descriptions of key concepts associated with a video or piece of content.
rating number - optional 2.5 The rating of the video. Supported values are float numbers i
family_friendly string 'YES'|'NO' - optional 'YES'
requires_subscription string 'YES'|'NO' - optional 'YES' Indicates whether a subscription (either paid or free) is required to view the video. Allowed values are yes or no.
live string 'YES'|'NO' - optional 'NO' Indicates whether the video is a live stream. Supported values are yes or no.


Option Type eg Description
lang string 'en'
url string ''


Option Type eg Description
access string - 'Registration' | 'Subscription' 'Registration' - optional
publication object see following options
publication['name'] string 'The Example Times' The is the name of the news publication. It must exactly match the name as it appears on your articles on, except for anything in parentheses.
publication['language'] string 'en' he is the language of your publication. Use an ISO 639 language code (2 or 3 letters).
genres string - optional 'PressRelease, Blog'
publication_date string '2008-12-23' Article publication date in W3C format, using either the "complete date" (YYYY-MM-DD) format or the "complete date plus hours, minutes, and seconds"
title string 'Companies A, B in Merger Talks' The title of the news article.
keywords string - optional "business, merger, acquisition, A, B"
stock_tickers string - optional "NASDAQ:A, NASDAQ:B"


See LICENSE file.


npm i sitemap

Downloadsweekly downloads









last publish


  • avatar
Report a vulnerability