Alles dank dem Export von WordPress

Ich habe mich etwas mit der URL-Struktur hier im Blog beschäftigt. Da ich anfänglich fast nur auf Basis der aus WordPress exportierten Blogbeiträgt gearbeitete hatte, gewöhnte ich mir an, im Front Matter immer die Option url: anzugeben. Diese enthält immer den vollen Pfad der URL ab der baseURL. Letztere besteht in meinem Blog aus dem Protokoll (https) und dem Domainnamen.

Für diesen Blogbeitrag hätte ich somit im Front Matter eingetragen:

url: /2022/02/url-struktur-hugo-url-slug-title

Nicht gut

Das ist nicht optimal, denn man verliert die Flexibilität. So kann man nicht einfach mal irgendwann die URL-Struktur anpassen, weil in jedem Blogbeitrag schon die am höchsten priorisierte Option url: angegeben ist.

Außerdem braucht man es auch gar nicht, da es in der Konfiguration von Hugo einen Abschnitt gibt, der festlegt, wie die URL (nach der BaseURL) generiert werden soll.

Gut

Ich habe die Konfiguration von Hugo umgestellt und werde in Zukunft nur noch slug: angeben. Der Slug ist der Teil der URL, der nur das Dokument des Blogbeitrags repräsentiert. Im oberen Beispiel wäre das "url-struktur-hugo-url-slug-title".

Damit die URL-Struktur im Blog weiterhin so bleibt wie bisher ("/jahr/monat/titel-des-beitrags/"), habe ich in die config.toml eingetragen:

[permalinks]
  posts = '/:year/:month/:slug/'

Die Voreinstellung, würde man das nicht einfügen, wäre:

'/:year/:month/:title/'

Die Voreinstellung will ich nicht, da ich teils lange Titel für Blogbeiträge habe, die URLs insgesamt aber relativ kurz halten möchte.

Jetzt verwende ich im Front Matter eines Blogbeitrags nur noch die Option slug: und habe im Endeffekt die selbe URL-Struktur und das ganze ist dadurch weniger fehleranfällig, falls man in der url bei Jahr oder Monat etwas Falsches einträgt.

Im Front Matter sah es früher so aus:

---

title: URL-Struktur in Hugo mit url, slug und title
url: /2022/02/url-struktur-hugo-url-slug-title
[…]

---

Und jetzt so:

title: URL-Struktur in Hugo mit url, slug und title
slug: url-struktur-hugo-url-slug-title
[…]

---

Erreichbar ist der Blogbeitrag in beiden Fällen unter:

blog.natenom.com/2022/02/url-struktur-hugo-url-slug-title

Update: Ich wurde darauf hingewiesen, dass Hugo den Namen des Markdown-Dokuments bzw. den Verzeichnisnamen des Page Bundles automatisch als String für den Slug verwendet, wenn man die Option nicht explizit im Front Matter setzt.

Bestehende Blogbeiträge per Script ändern, irgendwann

Und wenn ich dann irgendwann mal alle Front Matter der Blogbeiträge automatisiert von url: nach slug: ändere, habe ich dann sogar die Möglichkeit, mit einer einzigen Änderung in der config.toml die URL-Struktur für alle Blogbeiträge auf einmal zu verändern. Natürlich sollte man in so einem Fall dann Weiterleitungen einrichten.

Bis dahin gibt es keine Probleme mit der bestehenden URL-Struktur, da die Option url: im Front Matter eines Beitrags immer die höchste Priorität hat.

Dokumentation

Die Dokumentation zu diesem Thema findet sich auf der Projektseite von Hugo.