# NextJS sitemap generator ### Install The current setup has been tested on Next Js `7.0.0`. You need to install Axios. ``` $ npm install axios ``` Add a `server.js` and `sitemap.js` files into the root of your NextJs app. If they are already present, update them accordingly. If you wan you can also install [Dotenv](https://www.npmjs.com/package/dotenv). ``` $ npm install dotenv ``` If you have installed Dotenv you can now set `SITE_ROOT`, `SOURCE`, `API_SOURCE` and `DESTINATION` in your `.env` file and uncomment `require("dotenv").config();` in `sitemap.js`. #### IMPORTANT: if you don't use Dotenv and you haven't set a `SITE_ROOT` and `API_SOURCE` please update `https://example.com` urls in `sitemap.js`. --- ### Dynamic routes In case you use dynamic routes in you next.js application you can map them using the `axios` request in `sitemap.js`. Example: Your app list some product this way: - `http://your.domain/products/product-slug-1` - `http://your.domain/products/product-slug-2` - `http://your.domain/products/product-slug-3` In the current file we are using a POST request that retrieves all products slugs. It something like: ```javascript axios .post(API_SOURCE, { query: `{ productList: { product: { slug } } }` }) .then( /*...*/ ) .catch( /*...*/ ); ``` You need to update also the url following your preferences. See the following line ``` xml += `${SITE_ROOT}/products/${product.slug}`; ``` --- ### Build In order to create a sitemap, simply visit `http://your.domain/sitemap.xml`. A XML file with your sitemap will also be created in `path/to/yourApp/.next/static/sitemap.xml` unless you set a custom `DESTINATION` in your .env file.