Lerm-IT

Blog traitant de technologies informatiques. Logiciel libre, AdminSys, DevOps et GNU/Linux !

29 Apr 2020

[HUGO] Dates de mise à jour basées sur les commits git

Une information importante pour votre SEO est la date de mise à jours d’un article. Celle-ci informe Google, Bing et consort qu’il doit parcourir de nouveau le contenu de celui-ci pour mettre à jour son index.

Nous allons voir ici comment ceci fonctionne et comment réaliser une mise à jour automatique basée sur les dates des commits git.

Fonctionnement standard

De manière standard Hugo vous permet de configurer la date de mise à jours de votre article via la metadata lastmod. Ainsi vous pouvez configurer les métas descriptions de votre article comme ceci

---
title: "[HUGO] Dates de mise à jour basées sur les commits git"
date: 2020-04-29T06:01:48Z
lastmod: 2020-04-30T06:01:48Z
---

Ici nous spécifions que la date de création du document est le 29 avril 2020 à 06h01 UTC et que nous avons modifié le document le lendemain, le 30 avril.

Cette valeur peut être utilisée dans vos templates à l’aide de la variable .Lastmod1. Par exemple ici j’utilise un gabarit pour les microformats qui ajoute la date de dernière modification si elle est présente.

{{ if gt .Lastmod .PublishDate }}
  "dateModified": "{{ .Lastmod.Format "2016-01-02" }}"{{ end }}

Par défaut la valeur de .Lastmod prend la valeur du champ date de votre metadata. Aussi cette valeur est toujours présente et nous ne pouvons pas faire un test de présence standard comme ceci

# Ne fonctionne pas
{{ if .Lastmod }}

Ainsi pour tester si la date de modification est différente de la date de création nous devons réaliser une comparaison des dates de création et de modifications2

Utiliser les commits git

Maintenir les dates de mise à jours de toutes nos pages peut être rapidement enclin à créer des erreurs ou des oublis. Aussi il existe une méthode de mise à jours des dates de modifications automatiques dans Hugo basé sur la date de vos commits git (car évidement vous tracer les modifications de votre site Hugo via git !).

Hugo propose une variable .GitInfo qui contient l’ensemble des informations du commit git qui a créé un fichier3. Par exemple nous pouvons récupérer l’adresse email de l’auteur comme ceci:

{{ .GitInfo.AuthorEmail }}

Si vous tester cette option sans plus de modification vous constaterez l’erreur suivante

<.GitInfo.AuthorEmail>: nil pointer evaluating *gitmap.GitInfo.AuthorEmail

Il se trouve que la variable .GitInfo n’est mise à jours que si vous avez configuré l’option enableGitInfo dans votre fichier de configuration. Pour mon fichier config.toml la configuration se fait comme ceci

baseURL = "https://romain.therrat.fr/"
languageCode = "fr"
title = "Lerm-IT"
theme = "blog"

enableGitInfo = true
...

Les informations des journaux git sont maintenant accessibles dans nos templates.

Note: Il semblerait que la récupération des informations git depuis un fichier qui comporte un accent dans son nom ne fonctionne pas et retourne une valeur nulle.

La valeur de .Lastmod est maintenant automatiquement mis à jours en fonction de la date du dernier commit sur le fichier de contenu (contents/).

Aller plus loin

Si vous souhaitez aller un peu plus loin voici quelques informations supplémentaires

Les autres variables de temps

Il existe aussi d’autre variable pour la gestion des dates des articles. Par exemple la variable .PublishDate prend la valeur du champ pushlishdate des métas données de votre article. De même la variable .ExpiryDate prend la valeur de expirydate.

Ces options peuvent être utiles si vous souhaitez par exemple afficher un message d’alerte si un visiteur consulte un document expiré.

## Configuration avec les formateurs

Une question que vous avez surement dû vous poser est: Comment Hugo a-t-il récupéré la date de dernière modification de mon fichier dans git.

Pour faire ceci Hugo utilise la section configuration frontmatter. Celle-ci permet de configurer comment les données sont injectées dans les différentes variables de temps. Voici la valeur par défaut

[frontmatter]
date = ["date", "publishDate", "lastmod"]
lastmod = [":git", "lastmod", "date", "publishDate"]
publishDate = ["publishDate", "date"]
expiryDate = ["expiryDate"]

Vous voyez que la valeur par défaut le lastmod qui correspond à la date de dernière modification dans git.

Vous pouvez si vous le souhaiter modifier ces valeurs pour correspondre à vos besoins.

Conclusion

La mise à jours des dates d'édition des articles est une action qui peut rapidement engendrer des erreurs ou des oublis. Aussi la mise à jour automatique par Git nous apporte un vrai confort d’automatisation.


  1. Documentation de .Lastmod ↩︎

  2. Documentation de la fonction gt ↩︎

  3. Docuementation de .GitInfo ↩︎