import type { Metadata } from "next"; import { notFound } from "next/navigation"; import Link from "next/link"; import { Container } from "@/components/ui"; import { BackLink } from "@/components/back-link"; import { wissenSlugs } from "@/lib/site-config"; import { getSiteUrl } from "@/lib/url"; import { getCompanyInfo } from "@/lib/company-info"; import { getLocale } from "@/i18n/locale"; import { getDictionary } from "@/i18n/get-dictionary"; import type { WissenSlug } from "@/i18n/dictionary-type"; function isWissenSlug(slug: string): slug is WissenSlug { return (wissenSlugs as readonly string[]).includes(slug); } export async function generateMetadata( props: PageProps<"/wissen/[slug]"> ): Promise { const { slug } = await props.params; if (!isWissenSlug(slug)) return {}; const t = getDictionary(await getLocale()); const article = t.wissenArticles[slug]; return { title: article.title, description: article.excerpt, alternates: { canonical: `/wissen/${slug}` }, }; } export function generateStaticParams() { return wissenSlugs.map((slug) => ({ slug })); } export default async function WissenArticlePage( props: PageProps<"/wissen/[slug]"> ) { const { slug } = await props.params; if (!isWissenSlug(slug)) notFound(); const t = getDictionary(await getLocale()); const article = t.wissenArticles[slug]; const otherArticles = wissenSlugs.filter((s) => s !== slug).slice(0, 2); const company = await getCompanyInfo(); const base = getSiteUrl(); // Kein datePublished/image: fuer diese Artikel existiert kein echtes // Veroeffentlichungsdatum und keine echte Fotografie — beides zu erfinden // waere irrefuehrende strukturierte Daten statt hilfreicher. const jsonLd = { "@context": "https://schema.org", "@type": "Article", headline: article.title, description: article.excerpt, author: { "@type": "Organization", name: company.name }, publisher: { "@type": "Organization", name: company.name }, mainEntityOfPage: `${base}/wissen/${slug}`, }; const breadcrumbJsonLd = { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement: [ { "@type": "ListItem", position: 1, name: t.wissenListPage.eyebrow, item: `${base}/wissen` }, { "@type": "ListItem", position: 2, name: article.title, item: `${base}/wissen/${slug}` }, ], }; return (