Veroeffentlicht: 14.04.2026 | Lesedauer: 2 min read
Klickbare Blog-Tags
Heute habe ich den Blog-Flow etwas runder gemacht: Im Artikel stehen jetzt Veroeffentlichungsdatum und Lesedauer zusammen, und die Tags sind direkt klickbar.
Ausgangspunkt
Im Blog-Layout wurde bisher nur die Lesedauer angezeigt. Tags waren zwar sichtbar, aber nicht als Navigation nutzbar. Dadurch gab es keine schnelle Moeglichkeit, zu aehnlichen Artikeln zu springen.
Was ich geaendert habe
-
Metadaten im Artikelkopf erweitert
- Vor der Lesedauer wird jetzt das Datum angezeigt.
- Ausgabe:
Veroeffentlicht: DD.MM.YYYY | Lesedauer: 2 min read
-
Tags im Artikel klickbar gemacht
- Die Tag-Chips verlinken jetzt auf
/blog/tag/<tag>. - Damit wird aus der reinen Anzeige eine echte Navigation.
- Die Tag-Chips verlinken jetzt auf
-
Tag-Filterseite eingefuehrt
- Neue Route:
src/pages/blog/tag/[tag].astro - Die Seite listet nur Artikel mit passendem Keyword.
- Neue Route:
-
Blog-Listenkomponente erweitert
BlogEntriesakzeptiert jetzt optionaltag.- Wenn ein Tag gesetzt ist, werden Eintraege case-insensitive gefiltert.
-
Collection-Schema robuster gemacht
- Bei Datumsfeldern nutze ich jetzt
z.coerce.date()stattz.date(). - Das ist fuer Frontmatter-Werte als String stabiler.
- Bei Datumsfeldern nutze ich jetzt
Technische Details
Die Filterlogik in der Blog-Liste bleibt bewusst klein:
const normalizedTag = tag?.toLowerCase().trim();
const filteredEntries = normalizedTag ? blogEntries.filter((entry) => entry.data.keywords.some((keyword) => keyword.toLowerCase() === normalizedTag) ) : blogEntries;Und die Tag-Seiten werden statisch aus vorhandenen Keywords gebaut:
const tags = [...new Set(blogEntries.flatMap((entry) => entry.data.keywords))] .map((tag) => tag.trim()) .filter(Boolean) .sort((a, b) => a.localeCompare(b));Ergebnis
Der Blog fuehlt sich jetzt deutlich besser vernetzt an. Leser koennen direkt ueber Tags weiterklicken, und die Metadaten am Artikelanfang sind informativer ohne unruhig zu wirken.
Kleinere UI-Verbesserung, aber mit spuerbar besserer Navigation.
