2020年1月9日木曜日

Hugo で sitemap.xml の changefreq / priority をページ単位で設定する

Hugo で sitemap.xml の priority / changefreq をページ単位で設定する方法をまとめておきます。 みんな使いそうなテクニックだけど、どこにも書かれてなかったので、少し時間が掛かった。 テンプレートを改良したもの (以下) を layouts/sitemap.xml に保存しましょう。
{{ 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 }}
  <url>
    <loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
    <lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Params.changefreq }}
    <changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Params.priority 0.0 }}
    <priority>{{ .Params.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 }}
  </url>
  {{ end }}
</urlset>

content/*.md は以下のように書きます。
---
Title: Hugooo
Lastmod: 2020-01-01
changefreq: weekly
priority: 0.5
---
Hello world!

これで sitemap.xml の changefreq / priority をページ単位で設定できます。 .Params の後ろは小文字じゃないといけないので注意しましょう。

ここまでの説明だと、/tags/, /taxonomies/ の出力が、Google Search Console でエラーが出る時があります。 状況次第では、sitemap.xml の記述の調整が必要です。 タクソノミー自体が不要な場合は config.toml に以下を記述することで回避できます。
disableKinds = ["taxonomy", "taxonomyTerm"]


Googlebot は priority を見ておらず、changefreq や lastmod もそんなに見てないと言われています。 とは言え他の検索エンジンは不明なので、設定できるのであればしても損はないかと思います。 少なくとも何も設定できないデフォルト状態よりは良いかなあ。

0 件のコメント: