first publish

This commit is contained in:
knso committed 2026-09-06 17:21:52 +02:00
commit b8e41b4d55
147 files changed
+19367

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
import type { MetadataRoute } from "next";
import { LANGS, routesByLang, type Lang, type PageKey } from "@/lib/i18n";
import { site } from "@/lib/site";
/** Static export: metadata routes are prerendered; mark explicitly (Next static-exports guide). */
export const dynamic = "force-static";
type ChangeFrequency = NonNullable<MetadataRoute.Sitemap[number]["changeFrequency"]>;
const pages: ReadonlyArray<{ page: PageKey; changeFrequency: ChangeFrequency; priority: number }> = [
{ page: "home", changeFrequency: "monthly", priority: 1 },
{ page: "coaching", changeFrequency: "monthly", priority: 0.8 },
{ page: "trainings", changeFrequency: "monthly", priority: 0.8 },
{ page: "keynotes", changeFrequency: "monthly", priority: 0.8 },
{ page: "impressum", changeFrequency: "yearly", priority: 0.2 },
{ page: "datenschutz", changeFrequency: "yearly", priority: 0.2 },
];
/* Die englische Fassung ist eine Übersetzung, keine eigenständige Seite: gleiche
Änderungsfrequenz, aber niedrigere Priorität, damit Deutsch die Originalfassung bleibt.
Jeder Eintrag nennt über `alternates.languages` beide Fassungen – dasselbe hreflang,
das die Seiten im <head> tragen. */
const PRIORITY_FACTOR: Record<Lang, number> = { de: 1, en: 0.9 };
export default function sitemap(): MetadataRoute.Sitemap {
// Evaluated at build time (no request time in a static export): "last modified" = last build.
const lastModified = new Date();
return LANGS.flatMap((lang) =>
pages.map(({ page, changeFrequency, priority }) => ({
url: `${site.url}${routesByLang[lang][page]}`,
lastModified,
changeFrequency,
priority: Number((priority * PRIORITY_FACTOR[lang]).toFixed(2)),
alternates: {
languages: {
de: `${site.url}${routesByLang.de[page]}`,
en: `${site.url}${routesByLang.en[page]}`,
},
},
})),
);
}