56fae6ff13
sku was tracked in Payload but never exposed to the frontend at all — added to the Product type and wired into buildProductSchema (a real Schema.org property Google's rich-result validator checks for). image is now an array (main + gallery) when a product has gallery photos, instead of always just the one main image. /der-eine's page metadata description was a separately hardcoded string that had drifted from Products.description (the one JSON-LD/ cart/checkout actually use) — now reads from the live product via generateMetadata, same pattern /tasse-die-pause already uses. Updated Payload's own description field to the more product-descriptive text that used to live only in that hardcoded string.
56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { Hero } from "./components/Hero";
|
||
import { Focus } from "./components/Focus";
|
||
import { PasstDazu } from "./components/PasstDazu";
|
||
import { Testimonials } from "./components/Testimonials";
|
||
import { Pricing } from "./components/Pricing";
|
||
import { Footer } from "../components/Footer";
|
||
import { getProductBySlug, getCompanySettings } from "../lib/payload";
|
||
import { buildProductSchema } from "../lib/structuredData";
|
||
|
||
const title = "Der Eine. – Für die eine Sache, die gerade zählt.";
|
||
|
||
// Description reads from the live product instead of a separately
|
||
// hardcoded string, unlike this page's own `title` — matches
|
||
// /tasse-die-pause's own pattern (see that page's comment). Two
|
||
// hand-maintained copies of the same text used to drift apart: this one
|
||
// used to say something different from Products.description (which feeds
|
||
// the cart/checkout/JSON-LD elsewhere) — same field, one source now.
|
||
export async function generateMetadata(): Promise<Metadata> {
|
||
const product = await getProductBySlug("stift-kugelschreiber");
|
||
const description = product?.description ?? undefined;
|
||
return {
|
||
title,
|
||
description,
|
||
alternates: { canonical: "/der-eine" },
|
||
openGraph: { title, description, url: "/der-eine" },
|
||
twitter: { title, description },
|
||
};
|
||
}
|
||
|
||
export default async function DerEinePage() {
|
||
const [product, seller] = await Promise.all([
|
||
getProductBySlug("stift-kugelschreiber"),
|
||
getCompanySettings(),
|
||
]);
|
||
const productSchema = product
|
||
? buildProductSchema(product, "https://einfach-produktiv.mk360.de/der-eine", seller)
|
||
: null;
|
||
|
||
return (
|
||
<>
|
||
{productSchema && (
|
||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(productSchema) }} />
|
||
)}
|
||
<main className="flex flex-col flex-1">
|
||
<Hero />
|
||
<Focus />
|
||
<Testimonials />
|
||
<Pricing />
|
||
<PasstDazu productSlug="stift-kugelschreiber" />
|
||
</main>
|
||
<Footer />
|
||
</>
|
||
);
|
||
}
|