Um in Hugo und dem Theme PaperMod einen dedizierten RSS-Feed nur für das Tag “Linux” zu erstellen, der den vollständigen Artikelinhalt enthält, musst du eine Kombination aus Hugo-Konfiguration und einem spezifischen Template anlegen. Hier ist die dafür notwendige Schritt-für-Schritt-Anleitung in 3 Schritten
1. RSS-Feed für Tags aktivieren
Zuerst muss sichergestellt sein, dass Hugo überhaupt RSS-Feeds für einzelne Tags (Term-Seiten) generiert. Dies wird über die outputs-Einstellung in deiner hugo.yaml gesteuert .
Stelle sicher, dass term (für einzelne Begriffe wie Tags) die Ausgabe rss enthält:
outputs:
home: ["html", "rss"]
section: ["html", "rss"]
taxonomy: ["html", "rss"]
term: ["html", "rss"] # Wichtig für einzelne Tags
Mit dieser Konfiguration erstellt Hugo für jedes Tag, z.B. “linux”, einen Feed unter einer Standard-URL wie /tags/linux/index.xml . Dies ist eine wichtige Grundvoraussetzung.
2. Workaround Datei _index.md für das Tag “Linux” erstellen
Es muss im Verzeichnis content/tags/linux/ der layout-Parameter in der Datei _index.md gesetzt werden.
- Erstelle die Inhaltsdatei für das Tag: Lege die Datei
content/tags/linux/_index.mdan. - Setze den
layout-Parameter: Füge in die Frontmatter dieser Datei den Befehllayout = 'linux-tag'ein.
Der Inhalt der Datei könnte so aussehen:
---
title: "Linux"
layout: "linux-tag"
---
<!-- Hier kannst du optional einen beschreibenden Text für die Tag-Seite einfügen, der über der Liste der Artikel angezeigt wird. -->
Willkommen auf der Seite für alle Artikel zum Thema Linux.
3. Das RSS-Template linux-tag.rss.xml für den Volltext anpassen
Nun erstellst du das Template mit dem Namen layouts/tags/linux-tag.rss.xml.
Dieses Template wird dann exklusiv für die Tag-Seite “Linux” verwendet, da du den layout-Parameter entsprechend gesetzt hast .
In deiner neu erstellten Datei layouts/tags/linux-tag.rss.xml kannst du nun den Inhalt anpassen, um den vollständigen Artikel auszugeben.
Der entscheidende Unterschied ist die Verwendung von .Content anstelle von .Summary im <description>-Tag - ganz unten. Dies stellt sicher, dass der gesamte Artikel im Feed erscheint. Die anderen Tags verwenden weiterhin das Standard-Template (z.B. layouts/taxonomy/tag.rss.xml) und bleiben unverändert.
Die Datei kann so aussehen:
{{- $pctx := . -}}
{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
{{- $pages := slice -}}
{{- if or $.IsHome $.IsSection -}}
{{- $pages = $pctx.RegularPages -}}
{{- else -}}
{{- $pages = $pctx.Pages -}}
{{- end -}}
{{- $limit := .Site.Config.Services.RSS.Limit -}}
{{- if ge $limit 1 -}}
{{- $pages = $pages | first $limit -}}
{{- end -}}
{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<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>
{{- with .Site.Params.images }}
<image>
<title>{{ $.Site.Title }}</title>
<url>{{ index . 0 | absURL }}</url>
<link>{{ index . 0 | absURL }}</link>
</image>
{{- end }}
<generator>Hugo -- gohugo.io</generator>
{{ with .Site.LanguageCode }}
<language>{{.}}</language>
{{ 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>
<guid>{{ .Permalink }}</guid>
<!-- ===================================================== -->
<!-- ANPASSUNG FÜR VOLLTEXT: .Content statt .Summary -->
<!-- ===================================================== -->
<description>{{ .Content | html }}</description>
<content:encoded>{{ .Content | html }}</content:encoded>
</item>
{{ end }}
</channel>
</rss>
Zusammenfassung der Lösung
Um nur für das Tag “Linux” einen Volltext-Feed zu erstellen, musst du also die outputs-Konfiguration anpassen, eine _index.md-Datei für das Tag mit einem spezifischen layout-Parameter anlegen und dann ein entsprechendes RSS-Template mit .Content erstellen. So erhältst du einen dedizierten Feed unter der URL https://DEINEWEBSEITE.DE/tags/linux/index.xml (oder einer ähnlichen, von dir konfigurierten URL), der alle Artikel des Tags “Linux” im Volltext enthält.
Bonus URL Umleitung mit Apache und .htaccess
Wenn du eine alte URL auf die neue URL umleiten musst, wie ich das musste, dann muss noch im root Verzeichnisses deines Webspaces die .htaccess Datei verändert und der Apache Webserver neu gestartet werden
Trage folgenden Redirect ein. Das Format lautet mit relativen Pfadangaben
Redirect 301 /alter/pfad/ /neuer/pfad/
Das könnte z.B. so aussehen:
Redirect 301 /hoergen/tag/linux/feed/ /hoergen/categories/linux/index.xml
Nicht vergessen!
systemctl restart apache2.service