Sitemap Generator

9.0.1 · active · verified Wed Apr 22

The `sitemap` package is a high-level, streaming library and CLI tool designed for generating and managing XML sitemap files according to the sitemap.org protocol. It facilitates the creation of sitemaps and sitemap indexes, supporting various content types like images, videos, and multilingual alternatives. The package is actively maintained, with version 9.0.1 being the current stable release, frequently issuing security patches across major versions (e.g., 7.x, 8.x, 9.x) and introducing significant breaking changes in major releases like v9.0.0. Key differentiators include its robust, security-focused architecture (addressing XML injection, memory DoS, and arbitrary file writes), stream-based processing for efficiency with large datasets, and a command-line interface for quick generation and validation. It offers comprehensive TypeScript support for type safety and IntelliSense.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to programmatically generate a gzipped sitemap XML file from a list of `SitemapItem` objects using streams, handling common URL properties and image entries.

import { SitemapStream, streamToPromise, SitemapItem } from 'sitemap';
import { createGzip } from 'node:zlib';
import { Readable } from 'node:stream';
import { writeFile } from 'node:fs/promises';

const hostname = process.env.SITE_HOSTNAME ?? 'https://example.com';
const links: SitemapItem[] = [
  { url: '/', changefreq: 'daily', priority: 1.0 },
  { url: '/about', changefreq: 'monthly', priority: 0.7 },
  { url: '/contact', changefreq: 'weekly', priority: 0.5, lastmod: new Date() },
  {
    url: '/products/widget',
    lastmod: '2023-11-20',
    img: [
      { url: `${hostname}/img/widget.jpg`, caption: 'Awesome Widget' },
    ],
  },
  { url: '/blog/post-1', changefreq: 'weekly' },
  { url: '/blog/post-2', lastmod: '2024-01-15', priority: 0.8 },
];

(async () => {
  try {
    const sitemapStream = new SitemapStream({ hostname });
    const pipeline = Readable.from(links).pipe(sitemapStream).pipe(createGzip());
    const sitemapXml = await streamToPromise(pipeline);

    await writeFile('./public/sitemap.xml.gz', sitemapXml);
    console.log('Sitemap generated successfully to public/sitemap.xml.gz');
  } catch (error) {
    console.error('Error generating sitemap:', error);
  }
})();

view raw JSON →