| Server IP : 185.208.173.17 / Your IP : 87.236.161.98 Web Server : Microsoft-IIS/10.0 System : Windows NT SRV8576125506 10.0 build 26100 (Windows Server 2016) AMD64 User : IUSR ( 0) PHP Version : 7.4.13 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/parsmega.nuxt/node_modules/@nuxtjs/sitemap/ |
Upload File : |
# Sitemap Module
[](https://npmjs.com/package/@nuxtjs/sitemap)
[](https://npmjs.com/package/@nuxtjs/sitemap)
[](https://app.circleci.com/pipelines/github/nuxt-community/sitemap-module)
[](https://codecov.io/gh/nuxt-community/sitemap-module)
[](http://standardjs.com)
> Automatically generate or serve dynamic [sitemap.xml](https://www.sitemaps.org/protocol.html) for Nuxt.js projects!
[📖 **Release Notes**](./CHANGELOG.md)
## Features
- Module based on the awesome **[sitemap.js](https://github.com/ekalinin/sitemap.js) package** ❤️
- Create **sitemap** or **sitemap index**
- Automatically add the static routes to each sitemap
- Support **i18n** routes from **nuxt-i18n** (latest version)
- Works with **all modes** (SSR, SPA, generate)
- For **Nuxt 2.x** and higher
---
## Table of Contents
- [Install](#installation)
- [Setup](#setup)
- [Usage](#usage)
- [Sitemap Options](#sitemap-options)
- [Sitemap Index Options](#sitemap-index-options)
- [Routes Declaration](#routes-declaration)
- [Hooks](#hooks)
## Installation
```shell
npm install @nuxtjs/sitemap
```
or
```shell
yarn add @nuxtjs/sitemap
```
## Setup
Add `@nuxtjs/sitemap` to the `modules` section of your `nuxt.config.js` file:
```js
{
modules: [
'@nuxtjs/sitemap'
],
}
```
> **notice:**
> If you use other modules (eg. `nuxt-i18n`), always declare the sitemap module at end of array
> eg. `modules: ['nuxt-i18n', '@nuxtjs/sitemap']`
### Configuration
Add a custom configuration with the `sitemap` property:
```js
// nuxt.config.js
{
modules: [
'@nuxtjs/sitemap'
],
sitemap: {
// options
},
}
```
The module option parameter can be:
### `Object`
A single item of [sitemap](#sitemap-options) or [sitemap index](#sitemap-index-options):
```js
{
sitemap: {
// ...
},
}
```
### `Array`
A list of [sitemap](#sitemap-options) or [sitemap index](#sitemap-index-options) items:
```js
{
sitemap: [
{
// ...
},
{
// ...
},
],
}
```
### `Function`
A function that returns a valid sitemap configuration:
```js
{
sitemap: function () {
return {
// ...
}
},
}
```
### `Boolean`
You can disable the sitemap module with a boolean value at `false`:
```js
{
sitemap: false
}
```
## Usage
### Setup a Sitemap
By default, the sitemap is setup to the following path: `/sitemap.xml`
All static routes (eg. `/pages/about.vue`) are automatically add to the sitemap, but you can exclude each of them with the [`exclude`](#exclude-optional---string-array) property.
For dynamic routes (eg. `/pages/_id.vue`), you have to declare them with the [`routes`](#routes-optional---array--function) property. This option can be an array or a function. In addition, the routes defined in `generate.routes` will be automatically used for the sitemap.
```js
// nuxt.config.js
{
sitemap: {
hostname: 'https://example.com',
gzip: true,
exclude: [
'/secret',
'/admin/**'
],
routes: [
'/page/1',
'/page/2',
{
url: '/page/3',
changefreq: 'daily',
priority: 1,
lastmod: '2017-06-30T13:30:00.000Z'
}
]
}
}
```
### Setup a Sitemap Index
To declare a sitemap index and its linked sitemaps, use the [`sitemaps`](#sitemaps---array-of-object) property.
By default, the sitemap index is setup to the following path: `/sitemapindex.xml`
Each item of the `sitemaps` array can be setup with its own [sitemap options](#sitemap-options).
```js
// nuxt.config.js
{
sitemap: {
hostname: 'https://example.com',
lastmod: '2017-06-30',
sitemaps: [
{
path: '/sitemap-foo.xml',
routes: ['foo/1', 'foo/2'],
gzip: true
}, {
path: '/folder/sitemap-bar.xml',
routes: ['bar/1', 'bar/2'],
exclude: ['/**']
}
]
}
}
```
### Setup a list of sitemaps
To declare a list of sitemaps, use an `array` to setup each sitemap with its own configuration.
You can combine sitemap and sitemap index configurations.
```js
// nuxt.config.js
{
sitemap: [
{
path: '/sitemap-products.xml',
routes: [
// array of URL
]
}, {
path: '/sitemap-news.xml',
routes: () => // promise or function
}, {
path: '/sitemapindex.xml',
sitemaps: [{
// array of Sitemap configuration
}]
}
}
}
```
## Sitemap Options
### `routes` (optional) - array | function
- Default: `[]` or [`generate.routes`](https://nuxtjs.org/api/configuration-generate#routes) value from your `nuxt.config.js`
The `routes` parameter follows the same way than the `generate` [configuration](https://nuxtjs.org/api/configuration-generate#routes).
See as well the [routes declaration](#routes-declaration) examples below.
### `path` (optional) - string
- Default: `/sitemap.xml`
The URL path of the generated sitemap.
### `hostname` (optional) - string
- Default:
1. `sitemap.hostname` value from your `nuxt.config.js`
2. [`build.publicPath`](https://nuxtjs.org/api/configuration-build/#publicpath) value from your `nuxt.config.js` (⚠️ **deprecated**)
3. [`os.hostname()`](https://nodejs.org/api/os.html#os_os_hostname) in **generate** or **spa** mode, or dynamically based on request URL (`headers.host`) in **ssr** mode
This value is **mandatory** for generation sitemap file, and you should explicitly provide it in **generate** or **spa** mode.
⚠️ The usage of `build.publicPath` as default value is deprecated and will be removed on release v3.0.
To disable it on the current release, set a falsy value (eg. `hostname: false`).
### `cacheTime` (optional) - number
- Default: `1000 * 60 * 15` (15 Minutes)
Defines how frequently sitemap **routes** should be updated (value in milliseconds).
Setting a negative value will disable the cache.
Please note that after each invalidation, `routes` will be evaluated again (see [routes declaration](#routes-declaration) section).
This option is only available in **ssr** mode.
### `etag` (optional) - object
- Default: [`render.etag`](https://nuxtjs.org/api/configuration-render#etag) value from your `nuxt.config.js`
Enable the etag cache header on sitemap (see [etag](https://nuxtjs.org/api/configuration-render#etag) docs for possible options).
To disable etag for sitemap set `etag: false`
This option is only available in **ssr** mode.
### `exclude` (optional) - string array
- Default: `[]`
The `exclude` parameter is an array of [glob patterns](https://github.com/isaacs/minimatch#features) to exclude static routes from the generated sitemap.
### `filter` (optional) - function
- Default: `undefined`
If the `filter` option is set as a function, all routes will be filtered through it.
This option is useful to customize or extend the features of the module, before the sitemap generation.
Examples:
```js
// nuxt.config.js
// Filter routes by language
{
sitemap: {
filter ({ routes, options }) {
if (options.hostname === 'example.com') {
return routes.filter(route => route.locale === 'en')
}
return routes.filter(route => route.locale === 'fr')
}
}
}
// Add a trailing slash to each route
{
sitemap: {
filter ({ routes }) {
return routes.map(route => {
route.url = `${route.url}/`
return route
})
}
}
}
```
### `gzip` (optional) - boolean
- Default: `false`
Enable the creation of the `.xml.gz` sitemap compressed with gzip.
### `xmlNs` (optional) - string
- Default: `undefined`
Set the XML namespaces by override all default `xmlns` attributes in `<urlset>` element.
```js
// nuxt.config.js
{
sitemap: {
xmlNs: 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"'
}
}
```
### `xslUrl` (optional) - string
- Default: `undefined`
The URL path of the XSL file to style the sitemap.
### `trailingSlash` (optional) - boolean
- Default: `false`
Add a trailing slash to each route URL (eg. `/page/1` => `/page/1/`)
> **notice:** To avoid [duplicate content](https://support.google.com/webmasters/answer/66359) detection from crawlers, you have to configure an HTTP 301 redirect between the 2 URLs (see [redirect-module](https://github.com/nuxt-community/redirect-module) or [nuxt-trailingslash-module](https://github.com/WilliamDASILVA/nuxt-trailingslash-module)).
### `i18n` (optional) - string | object
- Default: `undefined`
Configure the support of localized routes from **[nuxt-i18n](https://www.npmjs.com/package/nuxt-i18n)** module.
If the `i18n` option is configured, the sitemap module will automatically add the default locale URL of each page in a `<loc>` element, with child `<xhtml:link>` entries listing every language/locale variant of the page including itself (see [Google sitemap guidelines](https://support.google.com/webmasters/answer/189077)).
Example:
```js
// nuxt.config.js
{
modules: [
'nuxt-i18n',
'@nuxtjs/sitemap'
],
i18n: {
locales: ['en', 'es', 'fr'],
defaultLocale: 'en'
},
sitemap: {
hostname: 'https://example.com',
// shortcut notation (basic)
i18n: true,
// nuxt-i18n notation (advanced)
i18n: {
locales: ['en', 'es', 'fr'],
routesNameSeparator: '___'
}
}
}
```
```xml
<url>
<loc>https://example.com/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/"/>
</url>
<url>
<loc>https://example.com/es/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/"/>
</url>
<url>
<loc>https://example.com/fr/</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/"/>
<xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/"/>
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/"/>
</url>
```
### `defaults` (optional) - object
- Default: `{}`
The `defaults` parameter set the default options for all routes.
```js
// nuxt.config.js
{
sitemap: {
defaults: {
changefreq: 'daily',
priority: 1,
lastmod: new Date()
}
}
}
```
See available options: https://github.com/ekalinin/sitemap.js/blob/4.1.1/README.md#sitemap-item-options
## Sitemap Index Options
### `path` (optional) - string
- Default: `/sitemapindex.xml`
The URL path of the generated sitemap index.
### `hostname` (optional) - string
Set the `hostname` value to each sitemap linked to its sitemap index.
### `sitemaps` - array of object
- Default: `[]`
Array of [sitemap configuration](#sitemap-options]) linked to the sitemap index.
```js
// nuxt.config.js
{
sitemap: {
path: '/sitemapindex.xml',
hostname: 'https://example.com',
sitemaps: [
{
path: '/sitemap-foo.xml',
// ...
}, {
path: '/folder/sitemap-bar.xml',
// ...
}
]
}
}
```
```xml
<!-- generated sitemapindex.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-foo.xml</loc>
</sitemap>
<sitemap>
<loc>https://example.com/folder/sitemap-bar.xml</loc>
</sitemap>
</sitemapindex>
```
See more [examples](#usage) above.
### `lastmod` (optional) - string
Set the `lastmod` value to each sitemap linked to its sitemap index.
In addition, the `lastmod` can be defined for each linked sitemap.
```js
// nuxt.config.js
{
sitemap: {
lastmod: "2020-01-01",
sitemaps: [
{
path: '/sitemap-foo.xml',
lastmod: "2020-01-02"
}, {
path: '/sitemap-bar.xml'
}
]
}
}
```
### `etag` (optional) - object
- Default: [`render.etag`](https://nuxtjs.org/api/configuration-render#etag) value from your `nuxt.config.js`
Enable the etag cache header on sitemap index (See [etag](https://nuxtjs.org/api/configuration-render#etag) docs for possible options).
To disable etag for sitemap index set `etag: false`
This option is only available in **ssr** mode.
### `gzip` (optional) - boolean
- Default: `false`
Enable the creation of the `.xml.gz` sitemap index compressed with gzip.
### `xmlNs` (optional) - string
- Default: `undefined`
Set the XML namespaces by override all default `xmlns` attributes in `<sitemapindex>` element.
```js
// nuxt.config.js
{
sitemap: {
xmlNs: 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"',
sitemaps: [...]
}
}
```
### `xslUrl` (optional) - string
- Default: `undefined`
The URL path of the XSL file to style the sitemap index.
## Routes Declaration
By default, the dynamic routes are ignored by the sitemap module.
Nuxt cannot automatically provide this type of complex routes.
Example:
```
-| pages/
---| index.vue --> static route
---| about.vue --> static route
---| users/
-----| _id.vue --> dynamic route
```
If you want the module to add any route with dynamic parameters, you have to set an array of dynamic routes.
eg. add routes for `/users/:id` in the configuration:
### From a static list
```js
// nuxt.config.js
{
sitemap: {
routes: ['/users/1', '/users/2', '/users/3']
}
}
```
### From a function which returns a Promise
```js
// nuxt.config.js
const axios = require('axios')
{
sitemap: {
routes: async () => {
const { data } = await axios.get('https://jsonplaceholder.typicode.com/users')
return data.map((user) => `/users/${user.username}`)
}
}
}
```
## Hooks
Hooks are listeners to Nuxt events. [Learn more](https://nuxtjs.org/api/configuration-hooks)
You can register hooks on certain life cycle events.
| Hook | Arguments | When |
|---|---|---|
| sitemap:generate:before | (nuxt, sitemapOptions) | Hook on before site generation |
| sitemap:generate:done | (nuxt) | Hook on sitemap generation finished |
## License
[MIT License](./LICENSE)
## Contributors
- [Nicolas Pennec](https://github.com/NicoPennec)
- [Pooya Parsa](https://github.com/pi0)