commit
78f8e88cf7
@ -24,7 +24,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
|
|||||||
if (!!blog) {
|
if (!!blog) {
|
||||||
// check for blog data
|
// check for blog data
|
||||||
title = `${!!blog.data?.meta?.title ? blog.data?.meta?.title : blog.data.title} - ${name}`;
|
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;
|
imgUrl = blog.imgUrl;
|
||||||
publishedAt = blog.data.createdAt;
|
publishedAt = blog.data.createdAt;
|
||||||
updatedAt = blog.data.updatedAt;
|
updatedAt = blog.data.updatedAt;
|
||||||
@ -39,7 +39,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
|
|||||||
const page = await fetchPageBySlug({ slug });
|
const page = await fetchPageBySlug({ slug });
|
||||||
if (!!page) {
|
if (!!page) {
|
||||||
title = `${!!page?.meta?.title ? page?.meta?.title : page.title} - ${name}`;
|
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;
|
imgUrl = page.heroImg?.url;
|
||||||
publishedAt = page.createdAt;
|
publishedAt = page.createdAt;
|
||||||
updatedAt = page.updatedAt;
|
updatedAt = page.updatedAt;
|
||||||
|
@ -12,28 +12,37 @@ import { Suspense } from "react";
|
|||||||
export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
|
export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
|
||||||
const defaultMetadata = await getDefaultMetadata();
|
const defaultMetadata = await getDefaultMetadata();
|
||||||
const name = defaultMetadata.openGraph?.siteName ?? "";
|
const name = defaultMetadata.openGraph?.siteName ?? "";
|
||||||
let title = "Page";
|
let title = defaultMetadata.title as string;
|
||||||
|
let description = defaultMetadata.description as string;
|
||||||
let imgUrl = "";
|
let imgUrl = "";
|
||||||
|
let canonicalUrl = "";
|
||||||
|
|
||||||
const slug = (await params).slug;
|
const slug = (await params).slug;
|
||||||
const team = await fetchTeamDetail(decodeURIComponent(slug));
|
const team = await fetchTeamDetail(decodeURIComponent(slug));
|
||||||
|
|
||||||
// check for blog data
|
// check for blog data
|
||||||
if (!!team) {
|
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;
|
imgUrl = team.imgUrl;
|
||||||
|
if (!!team?.data?.meta?.canonical_url) {
|
||||||
|
canonicalUrl = team.data.meta.canonical_url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultMetadata.title = title;
|
defaultMetadata.title = title;
|
||||||
defaultMetadata.description = undefined;
|
defaultMetadata.description = description;
|
||||||
|
|
||||||
if (!!defaultMetadata.openGraph) {
|
if (!!defaultMetadata.openGraph) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
defaultMetadata.openGraph.type = "article";
|
defaultMetadata.openGraph.type = "article";
|
||||||
defaultMetadata.openGraph.title = title;
|
defaultMetadata.openGraph.title = title;
|
||||||
defaultMetadata.openGraph.description = undefined;
|
defaultMetadata.openGraph.description = description;
|
||||||
defaultMetadata.openGraph.images = !!imgUrl ? [imgUrl] : undefined;
|
defaultMetadata.openGraph.images = !!imgUrl ? [imgUrl] : undefined;
|
||||||
}
|
}
|
||||||
|
if (!!defaultMetadata.alternates && !!canonicalUrl) {
|
||||||
|
defaultMetadata.alternates.canonical = canonicalUrl;
|
||||||
|
}
|
||||||
defaultMetadata.twitter = {
|
defaultMetadata.twitter = {
|
||||||
card: "summary_large_image",
|
card: "summary_large_image",
|
||||||
title: title,
|
title: title,
|
||||||
|
@ -34,6 +34,28 @@ export const Teams: CollectionConfig = {
|
|||||||
type: "richText",
|
type: "richText",
|
||||||
editor: lexicalEditor({}),
|
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: {
|
admin: {
|
||||||
hideAPIURL: true,
|
hideAPIURL: true,
|
||||||
|
@ -21,7 +21,8 @@ export function middleware(request: NextRequest) {
|
|||||||
|
|
||||||
// redirect for /blog/<slug>/ path
|
// redirect for /blog/<slug>/ path
|
||||||
const blogPathRegex = /^\/blog\/([^\/]+)(\/[^\/]*)*\/?$/;
|
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/, "") || "/";
|
const newBlogPath = path.replace(/^\/blog/, "") || "/";
|
||||||
return NextResponse.redirect(`${mainUrl}${newBlogPath}`, 301);
|
return NextResponse.redirect(`${mainUrl}${newBlogPath}`, 301);
|
||||||
}
|
}
|
||||||
|
@ -392,6 +392,11 @@ export interface Team {
|
|||||||
};
|
};
|
||||||
[k: string]: unknown;
|
[k: string]: unknown;
|
||||||
} | null;
|
} | null;
|
||||||
|
meta?: {
|
||||||
|
title?: string | null;
|
||||||
|
description?: string | null;
|
||||||
|
canonical_url?: string | null;
|
||||||
|
};
|
||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
createdAt: string;
|
createdAt: string;
|
||||||
}
|
}
|
||||||
@ -822,6 +827,13 @@ export interface TeamsSelect<T extends boolean = true> {
|
|||||||
role?: T;
|
role?: T;
|
||||||
img?: T;
|
img?: T;
|
||||||
biography?: T;
|
biography?: T;
|
||||||
|
meta?:
|
||||||
|
| T
|
||||||
|
| {
|
||||||
|
title?: T;
|
||||||
|
description?: T;
|
||||||
|
canonical_url?: T;
|
||||||
|
};
|
||||||
updatedAt?: T;
|
updatedAt?: T;
|
||||||
createdAt?: T;
|
createdAt?: T;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user