Update docs for sitemap

This commit is contained in:
Vincent Prouillet 2019-03-14 21:15:01 +01:00
parent 2a0d0b9b77
commit 7baf08cef2
4 changed files with 24 additions and 15 deletions

View file

@ -8,6 +8,7 @@ a section
- The table of content for a page/section is now only available as the `toc` variable when - The table of content for a page/section is now only available as the `toc` variable when
rendering it and not anymore on the `page`/`section` variable rendering it and not anymore on the `page`/`section` variable
- Default directory for `load_data` is now the root of the site instead of the `content` directory - Default directory for `load_data` is now the root of the site instead of the `content` directory
- Change variable sent to the sitemap template, see documentation for details
### Other ### Other
- Add support for content in multiple languages - Add support for content in multiple languages
@ -17,6 +18,7 @@ rendering it and not anymore on the `page`/`section` variable
- Add Dracula syntax highlighting theme - Add Dracula syntax highlighting theme
- Fix using inline styles in headers - Fix using inline styles in headers
- Fix sections with render=false being shown in sitemap - Fix sections with render=false being shown in sitemap
- Sitemap is now split when there are more than 30 000 links in it
## 0.5.1 (2018-12-14) ## 0.5.1 (2018-12-14)

View file

@ -881,17 +881,17 @@ impl Site {
if total_number < sitemap_limit { if total_number < sitemap_limit {
// Create single sitemap // Create single sitemap
let mut context = Context::new(); let mut context = Context::new();
context.insert("sitemap_entries", &all_sitemap_entries); context.insert("entries", &all_sitemap_entries);
let sitemap = &render_template("sitemap.xml", &self.tera, context, &self.config.theme)?; let sitemap = &render_template("sitemap.xml", &self.tera, context, &self.config.theme)?;
create_file(&self.output_path.join("sitemap.xml"), sitemap)?; create_file(&self.output_path.join("sitemap.xml"), sitemap)?;
return Ok(()) return Ok(())
} }
// Create multiple sitemaps (max 30000 urls each) // Create multiple sitemaps (max 30000 urls each)
let mut sitemap_index = Vec::new(); let mut sitemap_index = Vec::new();
for (i, chunk) in all_sitemap_entries.chunks(sitemap_limit).enumerate() { for (i, chunk) in all_sitemap_entries.chunks(sitemap_limit).enumerate() {
let mut context = Context::new(); let mut context = Context::new();
context.insert("sitemap_entries", &chunk); context.insert("entries", &chunk);
let sitemap = &render_template("sitemap.xml", &self.tera, context, &self.config.theme)?; let sitemap = &render_template("sitemap.xml", &self.tera, context, &self.config.theme)?;
let file_name = format!("sitemap{}.xml", i+1); let file_name = format!("sitemap{}.xml", i+1);
create_file(&self.output_path.join(&file_name), sitemap)?; create_file(&self.output_path.join(&file_name), sitemap)?;
@ -903,8 +903,8 @@ impl Site {
let mut main_context = Context::new(); let mut main_context = Context::new();
main_context.insert("sitemaps", &sitemap_index); main_context.insert("sitemaps", &sitemap_index);
let sitemap = &render_template("split_sitemap_index.xml", &self.tera, main_context, &self.config.theme)?; let sitemap = &render_template("split_sitemap_index.xml", &self.tera, main_context, &self.config.theme)?;
create_file(&self.output_path.join("sitemap.xml"), sitemap)?; create_file(&self.output_path.join("sitemap.xml"), sitemap)?;
Ok(()) Ok(())
} }

View file

@ -1,5 +1,5 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{% for sitemap_entry in sitemap_entries %} {% for sitemap_entry in entries %}
<url> <url>
<loc>{{ sitemap_entry.permalink | safe }}</loc> <loc>{{ sitemap_entry.permalink | safe }}</loc>
{% if sitemap_entry.date %} {% if sitemap_entry.date %}
@ -7,4 +7,4 @@
{% endif %} {% endif %}
</url> </url>
{% endfor %} {% endfor %}
</urlset> </urlset>

View file

@ -6,20 +6,27 @@ weight = 60
Zola will look for a `sitemap.xml` file in the `templates` directory or Zola will look for a `sitemap.xml` file in the `templates` directory or
use the built-in one. use the built-in one.
If your site has more than 30 000 pages, it will automatically split
the links into multiple sitemaps as recommended by [Google](https://support.google.com/webmasters/answer/183668?hl=en):
The sitemap template gets four variables in addition of the config: > All formats limit a single sitemap to 50MB (uncompressed) and 50,000 URLs.
> If you have a larger file or more URLs, you will have to break your list into multiple sitemaps.
> You can optionally create a sitemap index file (a file that points to a list of sitemaps) and submit that single index file to Google.
- `pages`: all pages of the site In such a case, Zola will use a template called `split_sitemap_index.xml` to render the index sitemap.
- `sections`: all sections of the site, including an index section
- `tags`: links the tags page and individual tag page, empty if no tags
- `categories`: links the categories page and individual category page, empty if no categories
As the sitemap only requires a link and an optional date for the `lastmod` field,
all the variables above are arrays of `SitemapEntry` with the following type: The `sitemap.xml` template gets a single variable:
- `entries`: all pages of the site, as a list of `SitemapEntry`
A `SitemapEntry` has the following fields:
```ts ```ts
permalink: String; permalink: String;
date: String?; date: String?;
``` ```
All `SitemapEntry` are sorted in each variable by their permalink. The `split_sitemap_index.xml` also gets a single variable:
- `sitemaps`: a list of permalinks to the sitemaps