@cms0/cms0 includes SEO helpers for content modeled with the built-in Seo type.
Keep the Seo field optional in your schema so pages can render before editors finish metadata.
Model SEO content
src/cms0.ts
import { cms0, toNextMetadata } from "@cms0/cms0";
import type { Seo } from "@cms0/cms0/custom-types";
type RootSchema = {
homePage: {
seo?: Seo;
};
};
export const cms = cms0<RootSchema>({
apiConfig: {
baseUrl: process.env.CMS0_API_BASE_URL,
key: process.env.CMS0_API_KEY,
},
});Use with Next.js metadata
app/page.tsx
import type { Metadata } from "next";
import { toNextMetadata } from "@cms0/cms0";
import { cms } from "./cms0";
export async function generateMetadata(): Promise<Metadata> {
const homePage = await cms.homePage();
return toNextMetadata<Metadata>(homePage.seo, { locale: "en" });
}Success check
Update SEO fields in cms0, refresh the page, and confirm the generated page metadata changes.