Giter Site home page Giter Site logo

bring-shrubbery / nextjs-sitemap-generator Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ilusiondev/nextjs-sitemap-generator

0.0 1.0 0.0 386 KB

Generate sitemap.xml from nextjs pages

License: MIT License

JavaScript 34.90% TypeScript 65.10%

nextjs-sitemap-generator's Introduction

npmv1 All Contributors

We are looking for maintainers because I don't have enough time to maintain the package. Please consider to make a donation for the maintenance of the project. Donate

Simple sitemap.xml mapper for Next.js projects.

Installation

To install the package execute this in your terminal if you are using yarn:

yarn add nextjs-sitemap-generator

And this if you are using npm:

npm i --save-dev nextjs-sitemap-generator

NextJs starts it's own server to serve all created files. But there are another option called Custom server that uses a file to start a next server. If you want use this package you must create the sever file. You can find how to do it here NextJs custom server

This module have been created to be used at node custom server side of NextJs. It is meant to be used in index.js/server.js so that when the server is initialized it will only run once. If you place it in any of the request handler of the node server performance may be affected.

For those people who deploy in Vercel:

A custom server can not be deployed on Vercel, the platform Next.js was made for.

For example: If you have this example server file

// server.js
const sitemap = require('nextjs-sitemap-generator'); // Import the package
const { createServer } = require('http')
const { parse } = require('url')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

/* 
  Here you is you have to use the sitemap function.
  Using it here you are allowing to generate the sitemap file
  only once, just when the server starts.
*/
sitemap({
  alternateUrls: {
    en: 'https://example.en',
    es: 'https://example.es',
    ja: 'https://example.jp',
    fr: 'https://example.fr',
  },
  baseUrl: 'https://example.com',
  ignoredPaths: ['admin'],
  extraPaths: ['/extraPath'],
  pagesDirectory: __dirname + "\\pages",
  targetDirectory : 'static/',
  sitemapFilename: 'sitemap.xml',
  nextConfigPath: __dirname + "\\next.config.js",
  ]
});

app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url, true)
    const { pathname, query } = parsedUrl

    if (pathname === '/a') {
      app.render(req, res, '/a', query)
    } else if (pathname === '/b') {
      app.render(req, res, '/b', query)
    } else {
      handle(req, res, parsedUrl)
    }
  }).listen(3000, (err) => {
    if (err) throw err
    console.log('> Ready on http://localhost:3000')
  })
})

Usage for static HTML apps

If you are exporting the next project as a static HTML app, create a next-sitemap-generator script file in the base directory. The option pagesDirectory should point to the static files output folder. After generating the output files, run node your_nextjs_sitemap_generator.js to generate the sitemap.

Usage with getStaticPaths

If you are using next@^9.4.0, you may have your site configured with getStaticPaths to pregenerate pages on dynamic routes. To add those to your sitemap, you need to load the BUILD_ID file into your config whilst excluding fallback pages:

const sitemap = require("nextjs-sitemap-generator");
const fs = require("fs");

const BUILD_ID = fs.readFileSync(".next/BUILD_ID").toString();

sitemap({
  baseUrl: "https://example.com",
  pagesDirectory: __dirname + "/.next/serverless/pages",
  targetDirectory: "public/",
  ignoredExtensions: ["js", "map"],
  ignoredPaths: ["[fallback]"],
});

OPTIONS

// your_nextjs_sitemap_generator.js

const sitemap = require('nextjs-sitemap-generator');

sitemap({
  alternateUrls: {
    en: 'https://example.en',
    es: 'https://example.es',
    ja: 'https://example.jp',
    fr: 'https://example.fr',
  },
  baseUrl: 'https://example.com',
  ignoredPaths: ['admin'],
  extraPaths: ['/extraPath'],
  pagesDirectory: __dirname + "\\pages",
  targetDirectory : 'static/',
  sitemapFilename: 'sitemap.xml',
  nextConfigPath: __dirname + "\\next.config.js",
  ignoredExtensions: [
        'png',
        'jpg'
  ],
  pagesConfig: {
    '/login': {
      priority: '0.5',
      changefreq: 'daily'
    }
  },
  sitemapStylesheet: [
    {
      type: "text/css",
      styleFile: "/test/styles.css"
    },
    {
      type: "text/xsl",
      styleFile: "test/test/styles.xls"
    }
  ]
});

console.log(`โœ… sitemap.xml generated!`);

OPTIONS description

  • alternateUrls: You can add the alternate domains corresponding to the available language. (OPTIONAL)
  • baseUrl: The url that it's going to be used at the beginning of each page.
  • ignoreIndexFiles: Whether index file should be in URL or just directory ending with the slash (OPTIONAL)
  • ignoredPaths: File or directory to not map (like admin routes).(OPTIONAL)
  • extraPaths: Array of extra paths to include in the sitemap (even if not present in pagesDirectory) (OPTIONAL)
  • ignoredExtensions: Ignore files by extension.(OPTIONAL)
  • pagesDirectory: The directory where Nextjs pages live. You can use another directory while they are nextjs pages. It must to be an absolute path.
  • targetDirectory: The directory where sitemap.xml going to be written.
  • sitemapFilename: The filename for the sitemap. Defaults to sitemap.xml. (OPTIONAL)
  • pagesConfig: Object configuration of priority and changefreq per route.(OPTIONAL) Path keys must be lowercase
  • sitemapStylesheet: Array of style objects that will be applied to sitemap.(OPTIONAL)
  • nextConfigPath(Used for dynamic routes): Calls exportPathMap if exported from nextConfigPath js file. See this to understand how to do it (https://nextjs.org/docs/api-reference/next.config.js/exportPathMap) (OPTIONAL)

Considerations

For now the ignoredPaths matches whatever cointaning the thing you put, ignoring if there are files or directories. In the next versions this going to be fixed.

Contributors

Thanks goes to these wonderful people (emoji key):


Daniele Simeone

๐Ÿ’ป

illiteratewriter

๐Ÿ“–

Goran Zdjelar

๐Ÿ’ป

jlaramie

๐Ÿ’ป

Stewart McGown

๐Ÿ“–

Jordan Andree

๐Ÿ’ป

sakamossan

๐Ÿ’ป

This project follows the all-contributors specification. Contributions of any kind welcome!

nextjs-sitemap-generator's People

Contributors

allcontributors[bot] avatar beardcoder avatar dependabot[bot] avatar flexbox avatar getriot avatar illiteratewriter avatar ilusiondev avatar j-mendez avatar jlaramie avatar jordanandree avatar sakamossan avatar sandiprb avatar stewartmcgown avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.