Tordo beffeggiatore, John James Audubon.

Tordo beffeggiatore, John James Audubon.

Photo by Boston Public Library on Unsplash

Introduzione

Questo post nasce dall’esigenza di controllare in modo preciso i contenuti del file sitemap.xml generato da Hugo. Normalmente infatti vengono inserite tutte le pagine nella sitemap ma non sempre questo comportamento è corretto. Nel mio caso, ad esempio, mi serve escludere alcune pagine, pertanto ho dovuto modificare il template di default della sitemap XML.

Per questa modifica ho preso spunto quasi completamente dal post di Dereck Curry che ha riscontrato la stessa necessità.

Modificare il front matter

Per prima cosa va aggiunto un parametro nel “front matter” di Hugo per indicare se la pagina va inserita o meno nella sitemap. Nel caso in cui il parametro non sia presente allora si assume che la pagina debba essere visibile.

Nel mio caso ho aggiunto un parametro chiamato sitemap_exclude e, gestendo il blog tramite un file in formato Org con ox-hugo, il front matter è definito nel seguente modo:

:EXPORT_HUGO_CUSTOM_FRONT_MATTER+: :sitemap_exclude false

Mettendo il valore true la pagina viene esclusa dalla sitemap.

Personalizzare il template sitemap

A questo punto basta aggiornare il template della sitemap che normalmente si trova su:

layouts/
    _default/
        sitemap.xml

Si può aggiungere un if che verifica la presenza ed il valore del parametro sitemap_exclude in modo da mostrare o meno la pagina. Ecco qui un esempio di come si può modificare il template default di Hugo. Nella riga 5 si verifica il parametro definito nel “front matter”.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
{{ 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 ne .Params.sitemap_exclude true -}}
  <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="{{ .Lang }}"
                href="{{ .Permalink }}"
                />{{ end }}
    <xhtml:link
                rel="alternate"
                hreflang="{{ .Lang }}"
                href="{{ .Permalink }}"
                />{{ end }}
  </url>{{- end }}{{ end }}
</urlset>
Leonardo Finetti

Leonardo Finetti
Si occupa di informatica dalla metà degli anni novanta principalmente in ambito web con tecnologie Open Source. Esperto di Drupal e di SEO offre consulenze in tali ambiti e nel tempo libero si diletta scrivendo articoli di informatica ed anche di design, ergonomia, usabilità e sicurezza.

Se ti piace questo sito puoi usare il link di affiliazione Amazon cliccando qui.