fix: Produkt ohne Geschmacksnoten bekam "Waldhonig — . 500 g" als Beschreibung
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 3m5s

Die Beschreibung der Produktseite setzt Name, Geschmacksnoten und Fuellmenge
zusammen und rechnet dabei fest damit, dass Noten gepflegt sind. Sind sie es
nicht — ein freiwilliges Admin-Feld —, blieb zwischen Gedankenstrich und
Fuellmenge ein einzelner Punkt ohne Inhalt stehen.

Auf wabenhain.com an "Waldhonig" beobachtet: description und og:description
lauteten "Waldhonig — . 500 g aus eigener Imkerei in Altenmünster." Das ist
genau der Text, den Google als Snippet anzeigt und den jede geteilte Vorschau
uebernimmt.

Derselbe Fall liess unter der Ueberschrift einen leeren Absatz stehen, der
nur Abstand zwischen Produktnamen und Bewertung erzeugte.

Beides faellt jetzt weg, wenn keine Noten gepflegt sind; mit Noten bleibt die
Ausgabe unveraendert.

tsc: 0 Fehler. vitest: 359/359 gruen. eslint: 0 Warnungen.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5 committed 2026-09-20 03:31:35 +02:00
1 parent 7dd42e35bc
commit c5e4978fad
1 file changed
+10 -1
+10 -1
View File
@@ -39,7 +39,12 @@ export async function generateMetadata(
const product = await getProductBySlug(slug);
if (!product) return {};
const description = `${product.name} — ${product.tasteTags.join(", ")}. ${product.weightGrams} g aus eigener Imkerei in Altenmünster.`;
// Geschmacksnoten sind ein freiwilliges Admin-Feld. Ohne die Pruefung
// stand bei einem Produkt ohne Eintraege "Waldhonig — . 500 g aus eigener
// Imkerei" in der Google-Beschreibung und in jeder geteilten Vorschau —
// Gedankenstrich und einzelner Punkt ohne Inhalt dazwischen.
const tasteNote = product.tasteTags.length > 0 ? `${product.tasteTags.join(", ")}. ` : "";
const description = `${product.name} — ${tasteNote}${product.weightGrams} g aus eigener Imkerei in Altenmünster.`;
return {
title: product.name,
@@ -242,7 +247,11 @@ export default async function ProductDetailPage(
{company.name} · {t.common.categories[product.category]}
</p>
<h1 className="text-4xl text-forest">{product.name}</h1>
{/* Ohne gepflegte Noten sonst ein leerer Absatz, der nur Abstand
zwischen Ueberschrift und Bewertung erzeugt. */}
{product.tasteTags.length > 0 ? (
<p className="mt-2 text-ink/70">{product.tasteTags.join(" · ")}</p>
) : null}
{reviewSummary.count > 0 ? (
<Link href="#bewertungen" className="mt-4 flex items-center gap-2 text-sm">
<StarRating value={reviewSummary.average ?? 0} size={16} />