hugo/docs/content/templates/rss.md
Anton Staaf c950699907 hugolib: Populate the taxonomy term Pages list
Previously this was left empty, but it is very handy to have a list
of term pages for a given taxonomy.  This list can now be paginated
like other page lists.  It makes it possible to render summary
content from each terms index page for instance.  It also makes it
possible to sort the term pages in the same way that other page
lists can be sorted.  An RSS feed is now generated for
KindTaxonomyTerm pages as well.

This also fixes a bug in HugoSites.createMissingPages.  Previously
it would only check for existing KindTaxonomyTerm pages if the
taxonomy had any terms defined.  So for a taxonomy with no terms
but a taxonomy terms page it would generate a second empty terms
page.
2017-03-05 21:24:14 +01:00

5.5 KiB
Raw Blame History

aliases lastmod date linktitle menu next notoc prev title weight toc
/layout/rss/
2015-08-04 2015-05-19 RSS
main
parent
layout
/templates/sitemap one /templates/partials RSS (feed) Templates 90 true

Like all other templates, you can use a single RSS template to generate all of your RSS feeds, or you can create a specific template for each individual feed.

Unlike other Hugo templates, Hugo ships with its own RSS 2.0 template. In most cases this will be sufficient, and an RSS template will not need to be provided by the user. But you can provide an rss template if you like, as you can see in the next section.

RSS pages are of the type Page and have all the page variables available to use in the templates.

Which Template will be rendered?

Hugo uses a set of rules to figure out which template to use when rendering a specific page.

Hugo will use the following prioritized list. If a file isnt present, then the next one in the list will be used. This enables you to craft specific layouts when you want to without creating more templates than necessary. For most sites only the \_default file at the end of the list will be needed.

Main RSS

Section RSS

  • /layouts/section/SECTION.rss.xml
  • /layouts/_default/rss.xml
  • /themes/THEME/layouts/section/SECTION.rss.xml
  • /themes/THEME/layouts/_default/rss.xml
  • Embedded rss.xml

Taxonomy RSS

  • /layouts/taxonomy/SINGULAR.rss.xml
  • /layouts/_default/rss.xml
  • /themes/THEME/layouts/taxonomy/SINGULAR.rss.xml
  • /themes/THEME/layouts/_default/rss.xml
  • Embedded rss.xml

Taxonomy Terms RSS

  • /layouts/taxonomy/SINGULAR.terms.rss.xml
  • /layouts/_default/rss.xml
  • /themes/THEME/layouts/taxonomy/SINGULAR.terms.rss.xml
  • /themes/THEME/layouts/_default/rss.xml
  • Embedded rss.xml

Configuring RSS

If the following values are specified in the sites config file (config.toml), then they will be included in the RSS output. Example values are provided.

languageCode = "en-us"
copyright = "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License."

[author]
    name = "My Name Here"
    email = "sample@domain.tld"

Limiting the Number of Items

By default, the RSS feed is limited to 15 items. You may override the default by using the rssLimit site configuration variable.

The Embedded rss.xml

This is the default RSS template that ships with Hugo. It adheres to the RSS 2.0 Specification.

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
    <link>{{ .Permalink }}</link>
    <description>Recent content {{ if ne  .Title  .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
    <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
    <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
    <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
    <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
    <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
    <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
    <atom:link href="{{.Permalink}}" rel="self" type="application/rss+xml" />
    {{ range .Data.Pages }}
    <item>
      <title>{{ .Title }}</title>
      <link>{{ .Permalink }}</link>
      <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
      {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
      <guid>{{ .Permalink }}</guid>
      <description>{{ .Content | html }}</description>
    </item>
    {{ end }}
  </channel>
</rss>

Important: Hugo will automatically add the following header line to this file on render… please don't include this in the template as it's not valid HTML.

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

Referencing your RSS Feed in <head>

In your header.html template, you can specify your RSS feed in your <head></head> tag like this:

{{ if .RSSLink }}
  <link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Site.Title }}" />
  <link href="{{ .RSSLink }}" rel="feed" type="application/rss+xml" title="{{ .Site.Title }}" />
{{ end }}

... with the autodiscovery link specified by the line with rel="alternate".

The .RSSLink will render the appropriate RSS feed URL for the section, whether it's everything, posts in a section, or a taxonomy.

N.b., if you reference your RSS link, be sure to specify the mime type with type="application/rss+xml".

<a href="{{ .URL }}" type="application/rss+xml" target="_blank">{{ .SomeText }}</a>