Hugo: Seite verbergen

Während meiner langjährigen Arbeit mit Hugo, einem Static Site Generator zur Erstellung von Webseiten, bin ich auf ein faszinierendes Problem gestoßen. Bei der Erstellung einer Logowand für die Startseite einer Website trat ein unerwartetes Ergebnis auf. Obwohl die Logos erfolgreich auf der Startseite angezeigt wurden, wurden für jedes Partnerunternehmen separate Seiten generiert. Diese unerwünschten Seiten, die auch in den Ergebnisseiten der Suchmaschinen auftauchten, stellten ein Problem dar, das gelöst werden musste.

Weiterlesen: Hugo: Seite verbergen

Ich arbeite seit geraumer Zeit mit Hugo. Für die Erzeugung einer Logowand von Partnern eines Unternehmens habe ich unter content/partners/ für jeden Partner, der angezeigt werden soll, eine Markdown-Datei angelegt. Dort konnte ich dann z.B. das Logo definieren und eine URL als Link hinterlegen. Das hat den großen Vorteil, dass man alle Inhalte sehr strukturiert abgelegt hat.

---
title: "Beispielunternehmen goes brrr"
image: "images/partners/partner-logo.svg"
link: "https://example.com/"
---

Die Logos habe ich dann in das Layout der Startseite integriert:

{{ with .Site.GetPage "/partners" }}
  {{ range .Pages }}
    <a href="{{ .Params.link }}" target="_blank">
      <img
        src="{{ (resources.GetMatch .Params.image).RelPermalink }}"
        alt="{{ .Params.title }}" loading="lazy" />
     </a>
  {{ end }}
{{ end }}

Was mir erst ein paar Tage nach der Veröffentlichung der Website aufgefallen ist, ist, dass ich jetzt zwar alle Logos auf der Startseite angezeigt bekomme, aber jeder Partner jetzt auch eine eigene Seite generiert bekommen hat. So gibt es jetzt für jeden Partner unter https://example.com/partners/beispielunternehmen/ eine Seite, auf der nur das Logo und der Titel angezeigt werden.

Das hätte ich natürlich wissen müssen, aber irgendwie ist es mir entgangen. Die Seiten sind zwar alle nirgendwo auf der Seite verlinkt, können aber trotzdem irgendwann in der Suchmaschine deiner Wahl auftauchen, weil sie in der von Hugo erzeugten sitemap.xml gelistet sind. Und das ist hier nicht erwünscht.

Mein erster Versuch

Ich erstelle zuerst eine index.md. Dadurch werden die Partnerseiten nicht mehr angezeigt.Allerdings habe ich dann immer noch eine Partnerseite, also https://example.com/partners/. Nach einigem Suchen in Hugos Dokumentation habe ich die Build Options gefunden. Das schien genau das zu sein, was ich gesucht hatte. Jetzt musste ich nur noch den folgenden Front Matter in die index.md einfügen:

---
_build:
    list: never
    publishResources: true
    render: never
---

Das funktioniert auch wunderbar. Allerdings habe ich nicht bedacht, dass durch die index.md und die Art und Weise, wie ich derzeit die Logowand im Layout programmiert habe, kein einziges Partnerlogo mehr angezeigt wird. Denn im Layout iteriere ich über alle Unterseiten der /partners-Seite. Und die gibt es nicht mehr.

Mein zweiter Versuch

Aber auch das lässt sich mit wenig Aufwand ändern. Denn die Markdown-Dateien mit den Partnerlogos sind jetzt Ressourcen der Partnerseite. Statt über die Unterseiten iteriere ich jetzt einfach über die Ressourcen der Seite:

{{ with .Site.GetPage "/partners" }}
  {{ range .Pages }}
    <a href="{{ .Params.link }}" target="_blank">
      <img
        src="{{ (resources.GetMatch .Params.image).RelPermalink }}"
        alt="{{ .Params.title }}" loading="lazy" />
     </a>
  {{ end }}
{{ end }}

Fazit

Bei der Suche nach einer Lösung habe ich zunächst versucht, die Partnerseiten durch Erstellung einer index.md zu verbergen. Allerdings führte dies dazu, dass die Partnerlogos nicht mehr angezeigt wurden, da das Layout über die nicht mehr vorhandenen Unterseiten iterierte. Nach etwas Recherche in der Hugo-Dokumentation stieß ich auf die Build Options, die eine Lösung zu bieten schienen. Durch geschickte Nutzung dieser Funktion konnte ich die Datei index.md so konfigurieren, dass sie keine Partnerseiten anzeigt, und gleichzeitig die Partnerlogos erfolgreich auf der Startseite darstellt.

Die Anpassung des Layout-Codes, um über die Ressourcen der Seite zu iterieren, anstatt über die nicht mehr vorhandenen Unterseiten, war der Schlüssel, um die Partnerlogos zurück auf die Startseite zu bringen. Dieser Prozess hat nicht nur das unerwünschte Indexierungsproblem in den Suchmaschinen gelöst, sondern erneut meine Kenntnisse über die Verwendung von Hugo und dessen vielfältigen Funktionen vertieft.