組み込みのサイトマップでは単一ページ以外にもカテゴリーやタグの一覧、アーカイブページなどが含まれてしまうけど、今のところこのブログで含める必要性を感じない……そんなに価値があるコンテンツだろうか?
となったのでサイトマップテンプレートをカスタマイズすることにしました。
sitemap.xml を上書きする
To override the built-in sitemap.xml template, create a new file in either of these locations:
- layouts/sitemap.xml
- layouts/_default/sitemap.xml
とあるので、sitemap.xml
を layouts/_default/
の下に作ります。すると、組み込みのサイトマップではなく作成したテンプレートでサイトマップを生成してくれます。
組み込みのサイトマップテンプレートは hugo/sitemap.xml にあるので、sitemap.xml
にとりあえずコピー。
サイトマップから除外する条件を追加
4行目にある{{ range .Data.Pages }}
の後に条件を追加します。
{{ range .Data.Pages }}{{ if and (ne .Kind "taxonomy") (ne .Kind "term") (ne .Params.sitemap_ignore true) }}
Page Kinds については Section Page Templates | Hugoに説明があった。
taxonomy
term
- frontmatter で
sitemap_ignore: true
を指定したページ
以上を除外するようにした。
そして23行目の反複処理が終わる{{ end }}
を{{ end }}{{ end }}
にしてif文終了。
完成
{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
{{ range .Data.Pages }}{{ if and (ne .Kind "taxonomy") (ne .Kind "term") (ne .Params.sitemap_ignore true) }}
{{- if .Permalink -}}
<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 }}
<priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
<xhtml:link
rel="alternate"
hreflang="{{ .Language.Lang }}"
href="{{ .Permalink }}"
/>{{ end }}
<xhtml:link
rel="alternate"
hreflang="{{ .Language.Lang }}"
href="{{ .Permalink }}"
/>{{ end }}
</url>
{{- end -}}
{{ end }}{{ end }}
</urlset>