2017-08-10 11:18:22 -04:00
---
title: Sitemap Template
# linktitle: Sitemap
description: Hugo ships with a built-in template file observing the v0.9 of the Sitemap Protocol, but you can override this template if needed.
date: 2017-02-01
publishdate: 2017-02-01
lastmod: 2017-02-01
categories: [templates]
2018-01-31 05:07:47 -05:00
keywords: [sitemap, xml, templates]
2017-08-10 11:18:22 -04:00
menu:
docs:
parent: "templates"
weight: 160
weight: 160
sections_weight: 160
draft: false
aliases: [/layout/sitemap/,/templates/sitemap/]
toc: false
---
A single Sitemap template is used to generate the `sitemap.xml` file.
Hugo automatically comes with this template file. *No work is needed on
the users' part unless they want to customize `sitemap.xml` .*
A sitemap is a `Page` and therefore has all the [page variables][pagevars] available to use in this template along with Sitemap-specific ones:
`.Sitemap.ChangeFreq`
: The page change frequency
`.Sitemap.Priority`
: The priority of the page
`.Sitemap.Filename`
: The sitemap filename
If provided, Hugo will use `/layouts/sitemap.xml` instead of the internal `sitemap.xml` template that ships with Hugo.
2018-08-01 04:01:05 -04:00
## Sitemap Templates
Hugo has built-on Sitemap templates, but you can provide your own if needed, in either `layouts/sitemap.xml` or `layouts/_default/sitemap.xml` .
For multilingual sites, we also create a Sitemap index. You can provide a custom layout for that in either `layouts/sitemapindex.xml` or `layouts/_default/sitemapindex.xml` .
2017-08-10 11:18:22 -04:00
## Hugo’ s sitemap.xml
This template respects the version 0.9 of the [Sitemap Protocol ](http://www.sitemaps.org/protocol.html ).
2018-08-01 04:01:05 -04:00
```xml
2019-07-15 17:49:41 -04:00
{{ printf "<?xml version= \"1.0 \" encoding= \"utf-8 \" standalone= \"yes \" ?> " | safeHTML }}
2018-08-01 04:01:05 -04:00
< urlset xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
{{ range .Data.Pages }}
2017-08-10 11:18:22 -04:00
< url >
< loc > {{ .Permalink }}< / loc > {{ if not .Lastmod.IsZero }}
< lastmod > {{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}< / lastmod > {{ end }}{{ with .Sitemap.ChangeFreq }}
< changefreq > {{ . }}< / changefreq > {{ end }}{{ if ge .Sitemap.Priority 0.0 }}
2018-08-01 04:01:05 -04:00
< priority > {{ .Sitemap.Priority }}< / priority > {{ end }}{{ if .IsTranslated }}{{ range .Translations }}
< xhtml:link
rel="alternate"
hreflang="{{ .Lang }}"
href="{{ .Permalink }}"
/>{{ end }}
< xhtml:link
rel="alternate"
hreflang="{{ .Lang }}"
href="{{ .Permalink }}"
/>{{ end }}
2017-08-10 11:18:22 -04:00
< / url >
{{ end }}
< / urlset >
```
2018-08-01 04:01:05 -04:00
## Hugo's sitemapindex.xml
This is used to create a Sitemap index in multilingual mode:
```xml
2019-07-15 17:49:41 -04:00
{{ printf "<?xml version= \"1.0 \" encoding= \"utf-8 \" standalone= \"yes \" ?> " | safeHTML }}
2018-08-01 04:01:05 -04:00
< sitemapindex xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9" >
{{ range . }}
< sitemap >
< loc > {{ .SitemapAbsURL }}< / loc >
{{ if not .LastChange.IsZero }}
< lastmod > {{ .LastChange.Format "2006-01-02T15:04:05-07:00" | safeHTML }}< / lastmod >
{{ end }}
< / sitemap >
{{ end }}
< / sitemapindex >
```
2017-08-10 11:18:22 -04:00
## Configure `sitemap.xml`
Defaults for `<changefreq>` , `<priority>` and `filename` values can be set in the site's config file, e.g.:
2018-04-16 01:43:59 -04:00
{{< code-toggle file = "config" > }}
2017-08-10 11:18:22 -04:00
[sitemap]
changefreq = "monthly"
priority = 0.5
filename = "sitemap.xml"
2018-04-16 01:43:59 -04:00
{{< / code-toggle > }}
2017-08-10 11:18:22 -04:00
The same fields can be specified in an individual content file's front matter in order to override the value assigned to that piece of content at render time.
2018-08-01 04:01:05 -04:00
2018-07-18 05:04:57 -04:00
[pagevars]: /variables/page/