Beim täglichen Schreiben mit hugo-cms.nvim sind ein paar Bausteine immer dabei. Eine kurze SEO-Checkliste vor dem Veröffentlichen, der Publishing-Loop und ein paar Stellen, an denen man sich verheddern kann.

SEO-Check vor dem Veröffentlichen

Bevor ich :Hugo draft von true auf false schalte, gehe ich kurz durch:

  • title, beschreibend und scanbar, unter ~60 Zeichen
  • description als Meta-Description, 120–160 Zeichen, nutzenorientiert
  • slug pro Sprache gesetzt bei mehrsprachigen Posts, URL-sicher, klein, mit Bindestrichen
  • cover.image und cover.alt, der Alt-Text in der jeweiligen Sprache passend
  • Mindestens ein tag und eine category, falls die Site Taxonomien nutzt
  • Interne Links über {{< ref >}} oder {{< relref >}}, weil Hugo sie beim Build prüft und gebrochene Refs den Build sprengen
  • Bilder mit alt versorgt, nicht nur das Cover

Das Plugin hilft bei vielem davon, daran erinnern muss ich mich aber selbst.

Mein Publishing-Loop

Der typische Ablauf bis zum veröffentlichten Beitrag:

  1. :Hugo new oder :Hugo resume, schreiben.
  2. :Hugo preview für hugo server mit Browser auf der aktuellen Seite, baut bei jeder Änderung neu.
  3. SEO-Check durchgehen, gegebenenfalls korrigieren.
  4. :Hugo draft schaltet das Flag um, in allen Sprach-Files gleichzeitig.
  5. :Hugo publish für Build und Deployment.

Stolperstellen

Ein paar Dinge, an denen ich anfangs hängen geblieben bin.

:help hugo-cms findet erstmal nichts. lazy.nvim mit cmd = "Hugo" lädt das Plugin lazy, also ist es vor dem ersten :Hugo-Aufruf nicht im runtimepath. Einmal :Hugo aufrufen oder :Lazy load hugo-cms.nvim, dann geht auch :help.

Geöffneter Buffer und Frontmatter-Änderung. Wenn ein Buffer offen und modified ist, schreibt hugo-cms.nvim seine Frontmatter-Änderung in den Buffer, nicht direkt auf die Platte. Vims „Datei wurde extern geändert"-Dialog feuert deshalb nicht. Speichern, wenn Du fertig bist.

Terminal-Split-Trenner. Die Splits für :Hugo preview und :Hugo publish nutzen die winbar als optische Trennung und Statuszeile. Mit laststatus=3 siehst Du eine klare Grenze zwischen Editor und Terminal, ohne winbar würde die globale Statusline drüberlaufen.

Abgeschnittene Pfade in :Hugo open. Die Picker-Spalte mit dem Pfad ist gekappt, lange Slugs werden mit abgeschnitten. Was hinter den drei Punkten steht, ist nicht fuzzy-matchbar. Such nach dem, was Du siehst, oder pass PATH_COL_CAP in commands/open.lua an, wenn Du regelmäßig mehr Pfad brauchst.

Shortcode-Syntax im Beitrag darstellen. Wenn Du {{< ref >}} oder einen anderen Shortcode als Text im Markdown zeigen willst, reicht es nicht, ihn in Backticks zu setzen. Hugo wertet Shortcodes auch in Inline-Code aus und bricht beim Build mit „invalid number of arguments". Korrekt mit Escape-Syntax {{< ... >}} schreiben (das Plugin selbst fügt sie automatisch ein, wenn Du :Hugo media insert shortcode benutzt).