일반 미리보기 | 블로그 미리보기 |
---|---|
![]() | ![]() |
일반 페이지는 블로그 상세 페이지는 미리보기를 일정하게 보여주지만,
이미지는 해당 게시물의 썸네일로, 제목은 게시물의 슬러그로, 설명은 게시물의 내용으로,
동적으로 보여줘야 한다. 따라서 Next.js의 generateMetadata 기능을 사용해주었다.
// src/app/(root)/blog/[slug]/page.tsx
export const generateMetadata = async ({
params: { slug },
}: DetailPageParams): Promise<Metadata> => {
const decodedSlug = decodeURI(slug);
const { data: post } = await api.post.getPostDetailBySlug(decodedSlug);
return {
openGraph: {
title: decodedSlug,
description: post
? truncateString(extractContent(post.content), 100)
: '존재하지 않는 게시물입니다.',
url: `https://searchright.net/blog/${decodedSlug}`,
images:
post?.thumbnail ?? 'https://searchright.net/static/landing_meta.png',
type: 'website',
locale: 'ko_KR',
},
};
};
방법 1
방법 2
import { MetadataRoute } from 'next';
import api from '@/api';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const BASE_URL = 'https://searchright.net';
const { data: posts } = await api.post.getPostList();
return [
{
url: `${BASE_URL}/`,
},
{
url: `${BASE_URL}/blog/`,
},
...(posts
? posts.map((post) => ({
url: `${BASE_URL}/blog/${post.slug}/`,
lastModified: post.updatedAt,
}))
: []),
];
}