Fryboyter

Hugo - Inhalt aus Sitemap entfernen

Google Search Console hat herumgemault, dass auf meiner Seite zwei Links durch die robots.txt gesperrt sind obwohl sie in der Sitemap auftauchen. Wie bekomme man diese nun aus der Sitemap heraus die Hugo automatisch erstellt?

Die Lösung ist eigentlich ganz einfach. Als erstes editiert man die betreffenden Artikel und erweitern die Metadaten um sitemap_exclude: true.

---
title: Geheimer Artikel
date: 2019-06-11T19:12:45+0200
sitemap_exclude: true
slug: geheimer-artikel
---

Nun muss noch das Template angepasst werden mit dem die Sitemap erzeugt wird. Hierfür erstellt man im Themeverzeichnis unter layouts/_default die Datei sitemap.xml und füllt diese mit folgendem Inhalt.

{{ 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 }}
  <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 }}
</urlset>

Dies entspricht erst einmal dem Standard-Template für die Sitemap. Nun ändert man Zeile 4 wie folgt ab.

{{ range .Data.Pages }}{{ if ne .Params.sitemap_exclude true }}

Abschließen erweitert man noch die Zeile 21 um ein weiteres {{ end }}.

{{ end }}{{ end }}

Wird nun die Seite neu erzeugt sollten alle Inhalte bei denen sitemap_exclude: true hinterlegt wurde nicht mehr in der Sitemap erscheinen.

Allgemein | OSBN

Manche Artikel werden nun mehrsprachig angeboten

In den letzten Jahren habe ich mir ab und zu überlegt, ob ich zumindest manche Artikel nicht zusätzlich auch auf Englisch veröffentliche. Bisher war mir allerdings die technische Umsetzung zu umständlich. Mit Hugo ist es allerdings schnell gemacht, wie ich heute festgestellt habe.

Als erstes erweitert man die Konfigurationsdatei config.toml um folgende Einträge.

DefaultContentLanguage = "de"

    [languages]
    [languages.de]
        languageName = "Deutsche Version"
        weight = 1
    [languages.en]
        languageName = "English version"
        weight = 2

Mit der ersten Zeile gibt man an, dass de die Standardsprache ist. Der Rest definiert die vorhandenen Sprachen, gibt Ihnen eine Bezeichnung und eine Gewichtung (umso niedriger umso wichtiger).

Nun erzeugt man einen neuen Artikel. Nennen wir die Datei einfach mal manche-artikel-nun-englisch.md. Nehmen wir nun einmal an, der Artikel ist wichtig genug, dass wir ihn nun auch auf Englisch veröffentlichen möchten. Also erzeugen wir einen weiteren Artikel und nennen die Datei manche-artikel-nun-englisch.en.md. Wie man sieht wurde der Titel um ein .en erweitert. Hugo kapiert nun automatisch, dass der Artikel mit .en die englische Version darstellt und die andere die deutsche Version.

Was aber, wenn nun jemand die deutschsprachige Version aufruft, aber kein Deutsch versteht? Hier müsste eine Art Umschalter vorhanden sein. Hierfür kann man zum Beispiel folgenden Code verwenden.

{{ if .IsTranslated }}
    {{ range .Translations }} | {{ .Language.LanguageName }} {{ end}}
{{ end }}

Hiermit wird geprüft, ob der Artikel auch in einer anderen Sprache angeboten wird. Wenn ja wird auf die entsprechenden Versionen verlinkt. Wenn nicht, wird gar nichts angezeigt. Diesen Code habe ich auf fryboyter.de unter die Hauptüberschrift aller Artikel gepackt. Sollte dort nun bei einem Artikel der Link “English version” erscheinen, habe ich mir die Arbeit gemacht und den Artikel auch auf Englisch veröffentlicht. Aktuell wird man diese Verlinkung aber nur bei diesem Artikel finden. Nach und nach werden es aber mehr Artikel werden die ich auf Deutsch und Englisch anbiete (auch ältere).

OSBN | Allgemein

Hugo updaten

Hugo ist auf meine Webspace nicht von Haus aus installiert. Daher muss ich neue Versionen manuell installieren. Um mir dies zu erleichtern habe ich mir ein kleines Script gebaut.

#!/bin/bash
BIN_DIR=$HOME/bin
CUR_VERSION="$("$BIN_DIR"/hugo version 2>/dev/null | cut -d'v' -f2 | cut -c 1-6)"
NEW_VERSION=$(curl --silent "https://api.github.com/repos/gohugoio/hugo/tags" | jq -r '.[0].name' | tr -d v)

echo "Hugo:  Aktuelle Version: $CUR_VERSION => Neue Version: $NEW_VERSION"

if ! [ "$NEW_VERSION" = "$CUR_VERSION" ]; then

  curl -L --output hugo.tar.gz "https://github.com/gohugoio/hugo/releases/download/v${NEW_VERSION}/hugo_${NEW_VERSION}_Linux-64bit.tar.gz"
  tar -C "${BIN_DIR}" -xvzf hugo.tar.gz hugo
  rm hugo.tar.gz
else
    echo "Die aktuelle Version von Hugo ist bereits installiert"
fi

Hiermit wird geprüft, ob die aktuelle Version die auf Github angeboten wird, aktueller ist als die, die auf dem Webspace vorhanden ist. Wenn ja, wird die aktuelle Version von Github heruntergeladen und auf dem Webspace gespeichert.

OSBN | Allgemein

Datum in Sublime Text einfügen

Erstellt man einen Artikel mit Hugo gibt man in der Markdown-Datei das Datum in Form von 2019-04-27T22:18:13+0200 an. Im Gegensatz zu Jörg nervt mich das aber ziemlich.

Daher habe ich mir überlegt, wie ich die Eingabe automatisieren kann. Für meinen bevorzugten Editor Sublime Text gibt es hierfür das Plugin InsertDate. Nach der Installation wählt man die richtige Zeitzone aus. Danach legen man sich am besten noch einen Shortcut an, mit dem man das Datum einfügt. Hierfür wählt man im Menü “Preferences” den Punkt “Key Bindings” aus. Im rechten Fenster trägt man nun folgenden Code zwischen die eckigen Klammern ein und speichert die Datei.

{ "keys": ["shift+f5"], "command": "insert_date", "args": {"format": "%Y-%m-%dT%H:%M:%S%z"} },

Anstelle von shift+f5 kann man auch einen andere Tastenkombination verwenden. Von nun an fügt man mit dem definierten Shortcut das aktuelle Datum inklusive Uhrzeit und der Differenz zu UTC im ISO 8601 Format ein.

OSBN | Allgemein

Auf Kompletten Feed Umgestellt

Vor ein paar Tagen wurde ich gefragt, ob ich den OSBN-Feed nicht so ändern kann, dass dieser den kompletten Artikel anzeigt. Der Wunsch ist mir Befehl.

Hierzu habe ich einfach im Theme-Verzeichnis von Hugo im Unterverzeichnis layouts/_default die Datei rss.xml mit folgendem Inhalt angelegt (dieser entspricht dem Standard-Template des Feeds).

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
    <link>{{ .Permalink }}</link>
    <description>Recent content {{ if ne  .Title  .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
    <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
    <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
    <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
    <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
    <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
    <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
    {{ with .OutputFormats.Get "RSS" }}
        {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
    {{ end }}
    {{ range .Pages }}
    <item>
      <title>{{ .Title }}</title>
      <link>{{ .Permalink }}</link>
      <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
      {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
      <guid>{{ .Permalink }}</guid>
      <description>{{ .Summary | html }}</description>
    </item>
    {{ end }}
  </channel>
</rss>

Damit nun der komplette Artikel angezeigt wird, habe ich die Zeile <description>{{ .Summary | html }}</description> auf <description>{{ .Content | html }}</description> geändert. Das war es schon. Die Änderung gilt für die komplette Seite und nicht nur für die Kategorie OSBN.

OSBN | Allgemein