diff --git a/src/app/(main)/[slug]/page.tsx b/src/app/(main)/[slug]/page.tsx index 77b7ac3..8ea7bf6 100644 --- a/src/app/(main)/[slug]/page.tsx +++ b/src/app/(main)/[slug]/page.tsx @@ -24,7 +24,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str if (!!blog) { // check for blog data title = `${!!blog.data?.meta?.title ? blog.data?.meta?.title : blog.data.title} - ${name}`; - description = `${!!blog.data?.meta?.description ? blog.data?.meta?.description : blog.data.title} - ${name}`; + description = `${!!blog.data?.meta?.description ? blog.data?.meta?.description : blog.data.title}`; imgUrl = blog.imgUrl; publishedAt = blog.data.createdAt; updatedAt = blog.data.updatedAt; @@ -39,7 +39,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str const page = await fetchPageBySlug({ slug }); if (!!page) { title = `${!!page?.meta?.title ? page?.meta?.title : page.title} - ${name}`; - description = `${!!page?.meta?.description ? page?.meta?.description : page.title} - ${name}`; + description = `${!!page?.meta?.description ? page?.meta?.description : page.title}`; imgUrl = page.heroImg?.url; publishedAt = page.createdAt; updatedAt = page.updatedAt; diff --git a/src/app/(main)/staff_member/[slug]/page.tsx b/src/app/(main)/staff_member/[slug]/page.tsx index 017db59..73b7f38 100644 --- a/src/app/(main)/staff_member/[slug]/page.tsx +++ b/src/app/(main)/staff_member/[slug]/page.tsx @@ -12,28 +12,37 @@ import { Suspense } from "react"; export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise { const defaultMetadata = await getDefaultMetadata(); const name = defaultMetadata.openGraph?.siteName ?? ""; - let title = "Page"; + let title = defaultMetadata.title as string; + let description = defaultMetadata.description as string; let imgUrl = ""; + let canonicalUrl = ""; const slug = (await params).slug; const team = await fetchTeamDetail(decodeURIComponent(slug)); // check for blog data if (!!team) { - title = `${team.data.name} - ${name}`; + title = `${!!team.data?.meta?.title ? team.data?.meta?.title : team.data.name} - ${name}`; + description = !!team.data.meta?.description ? team.data.meta?.description : team.data.name; imgUrl = team.imgUrl; + if (!!team?.data?.meta?.canonical_url) { + canonicalUrl = team.data.meta.canonical_url; + } } defaultMetadata.title = title; - defaultMetadata.description = undefined; + defaultMetadata.description = description; if (!!defaultMetadata.openGraph) { // @ts-ignore defaultMetadata.openGraph.type = "article"; defaultMetadata.openGraph.title = title; - defaultMetadata.openGraph.description = undefined; + defaultMetadata.openGraph.description = description; defaultMetadata.openGraph.images = !!imgUrl ? [imgUrl] : undefined; } + if (!!defaultMetadata.alternates && !!canonicalUrl) { + defaultMetadata.alternates.canonical = canonicalUrl; + } defaultMetadata.twitter = { card: "summary_large_image", title: title, diff --git a/src/collections/Teams.ts b/src/collections/Teams.ts index 65dea1c..2b5b55c 100644 --- a/src/collections/Teams.ts +++ b/src/collections/Teams.ts @@ -34,6 +34,28 @@ export const Teams: CollectionConfig = { type: "richText", editor: lexicalEditor({}), }, + { + name: "meta", + label: "Page Meta", + type: "group", + fields: [ + { + name: "title", + label: "Title", + type: "text", + }, + { + name: "description", + label: "Description", + type: "textarea", + }, + { + name: "canonical_url", + label: "Canonical Url", + type: "text", + }, + ], + }, ], admin: { hideAPIURL: true, diff --git a/src/middleware.ts b/src/middleware.ts index 88357f4..b0deaa1 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -21,7 +21,8 @@ export function middleware(request: NextRequest) { // redirect for /blog// path const blogPathRegex = /^\/blog\/([^\/]+)(\/[^\/]*)*\/?$/; - if (blogPathRegex.test(path)) { + console.log("path", blogPathRegex.test(path) && !path.includes("/blog/?")); + if (blogPathRegex.test(path) && !path.includes("/blog/?")) { const newBlogPath = path.replace(/^\/blog/, "") || "/"; return NextResponse.redirect(`${mainUrl}${newBlogPath}`, 301); } diff --git a/src/payload-types.ts b/src/payload-types.ts index cc8ce57..a755ed6 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -392,6 +392,11 @@ export interface Team { }; [k: string]: unknown; } | null; + meta?: { + title?: string | null; + description?: string | null; + canonical_url?: string | null; + }; updatedAt: string; createdAt: string; } @@ -822,6 +827,13 @@ export interface TeamsSelect { role?: T; img?: T; biography?: T; + meta?: + | T + | { + title?: T; + description?: T; + canonical_url?: T; + }; updatedAt?: T; createdAt?: T; }