Compare commits

...

3 Commits

4 changed files with 52 additions and 3 deletions

1
env
View File

@ -14,3 +14,4 @@ S3_SECRET_ACCESS_KEY=9b4e412850582aab32ffdadbe23bb7ea972b39aaf79c34da0c19d3fcafe
S3_REGION=ap-southeast-1 S3_REGION=ap-southeast-1
S3_ENDPOINT=https://jswmbraeandqttpcdfmj.supabase.co/storage/v1/s3 S3_ENDPOINT=https://jswmbraeandqttpcdfmj.supabase.co/storage/v1/s3
NEXT_PUBLIC_PAYLOAD_URL=http://localhost:3000 NEXT_PUBLIC_PAYLOAD_URL=http://localhost:3000
SITE_URL=http://localhost:3000

View File

@ -15,6 +15,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
let publishedAt = ""; let publishedAt = "";
let updatedAt = ""; let updatedAt = "";
let imgUrl = ""; let imgUrl = "";
let createdByName = "";
const slug = (await params).slug; const slug = (await params).slug;
const blog = await fetchBlogDetail(slug); const blog = await fetchBlogDetail(slug);
@ -26,6 +27,9 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
imgUrl = blog.imgUrl; imgUrl = blog.imgUrl;
publishedAt = blog.data.createdAt; publishedAt = blog.data.createdAt;
updatedAt = blog.data.updatedAt; updatedAt = blog.data.updatedAt;
if (!!blog?.data?.createdBy && typeof blog.data.createdBy !== "number") {
createdByName = blog.data.createdBy?.name ?? "";
}
} else { } else {
// check for page data when blog is not found // check for page data when blog is not found
const page = await fetchPageBySlug({ slug }); const page = await fetchPageBySlug({ slug });
@ -35,22 +39,35 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
imgUrl = page.heroImg?.url; imgUrl = page.heroImg?.url;
publishedAt = page.createdAt; publishedAt = page.createdAt;
updatedAt = page.updatedAt; updatedAt = page.updatedAt;
if (!!page?.createdBy && typeof page.createdBy !== "number") {
createdByName = page?.createdBy?.name ?? "";
}
} }
} }
defaultMetadata.title = title; defaultMetadata.title = title;
defaultMetadata.description = description; defaultMetadata.description = description;
if (!!defaultMetadata.openGraph) { if (!!defaultMetadata.openGraph) {
defaultMetadata.openGraph.title = title;
// @ts-ignore // @ts-ignore
defaultMetadata.openGraph.type = "article"; defaultMetadata.openGraph.type = "article";
defaultMetadata.openGraph.description = description;
defaultMetadata.openGraph.title = title; defaultMetadata.openGraph.title = title;
defaultMetadata.openGraph.images = !!imgUrl ? { url: imgUrl } : undefined; defaultMetadata.openGraph.description = description;
defaultMetadata.openGraph.images = !!imgUrl ? [imgUrl] : undefined;
} }
defaultMetadata.twitter = {
card: "summary_large_image",
title: title,
description: description,
images: !!imgUrl ? [imgUrl] : undefined,
};
defaultMetadata.other = { defaultMetadata.other = {
"article:published_time": publishedAt, "article:published_time": publishedAt,
"article:modified_time": updatedAt, "article:modified_time": updatedAt,
"twitter:label1": "Written by",
"twitter:data1": !!createdByName ? createdByName : "Admin",
"twitter:label2": "Est. reading time",
"twitter:data2": "3 minutes",
}; };
return defaultMetadata; return defaultMetadata;

13
src/app/robots.ts Normal file
View File

@ -0,0 +1,13 @@
import type { MetadataRoute } from "next";
export default function robots(): MetadataRoute.Robots {
const siteUrl = process.env.SITE_URL || "http://localhost:3000";
return {
rules: {
userAgent: "*",
allow: "/",
},
sitemap: `${siteUrl}/sitemap.xml`,
};
}

18
src/app/sitemap.ts Normal file
View File

@ -0,0 +1,18 @@
import type { MetadataRoute } from "next";
export default function sitemap(): MetadataRoute.Sitemap {
const siteUrl = process.env.SITE_URL || "http://localhost:3000";
// Define your static routes
const routes: string[] = ["", "/blog"];
// Create sitemap entries for static routes
const staticRoutesSitemap = routes.map((route) => ({
url: `${siteUrl}${route}`,
lastModified: new Date(),
changeFrequency: "weekly" as const,
priority: route === "" ? 1 : 0.8,
}));
return [...staticRoutesSitemap];
}