@@ -3,17 +3,41 @@ import dbConnect from '@/app/lib/dbConnect';
33import Post from '@/app/models/Post' ;
44
55export default async function sitemap ( ) : Promise < MetadataRoute . Sitemap > {
6- const baseUrl = process . env . NEXT_PUBLIC_DEPLOYMENT_URL || process . env . NEXTAUTH_URL || 'http://localhost:3000' ;
7- const staticPages = [
6+ const baseUrl =
7+ process . env . NEXT_PUBLIC_DEPLOYMENT_URL ||
8+ process . env . NEXTAUTH_URL ||
9+ 'http://localhost:3000' ;
10+
11+ const staticPages : MetadataRoute . Sitemap = [
812 {
913 url : baseUrl ,
1014 lastModified : new Date ( ) ,
1115 changeFrequency : 'weekly' as const ,
16+ priority : 1.0 ,
1217 } ,
1318 {
1419 url : `${ baseUrl } /posts` ,
1520 lastModified : new Date ( ) ,
21+ changeFrequency : 'daily' as const ,
22+ priority : 0.9 ,
23+ } ,
24+ {
25+ url : `${ baseUrl } /portfolio` ,
26+ lastModified : new Date ( ) ,
27+ changeFrequency : 'monthly' as const ,
28+ priority : 0.8 ,
29+ } ,
30+ {
31+ url : `${ baseUrl } /series` ,
32+ lastModified : new Date ( ) ,
1633 changeFrequency : 'weekly' as const ,
34+ priority : 0.7 ,
35+ } ,
36+ {
37+ url : `${ baseUrl } /tags` ,
38+ lastModified : new Date ( ) ,
39+ changeFrequency : 'weekly' as const ,
40+ priority : 0.6 ,
1741 } ,
1842 ] ;
1943
@@ -23,16 +47,41 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
2347 }
2448
2549 await dbConnect ( process . env . DB_URI ) ;
26- const posts = await Post . find ( { } ) . sort ( { date : - 1 } ) ;
2750
51+ // 포스트 URL 생성
52+ const posts = await Post . find ( { } ) . sort ( { date : - 1 } ) ;
2853 const postUrls = posts . map ( ( post ) => {
2954 const postDate = new Date ( post . updatedAt || post . date ) ;
55+ // 최신 포스트는 높은 우선순위, 오래된 포스트는 낮은 우선순위
56+ const priority = Math . max ( 0.5 , 0.9 - posts . indexOf ( post ) * 0.01 ) ;
3057
3158 return {
3259 url : `${ baseUrl } /posts/${ post . slug } ` ,
3360 lastModified : postDate ,
61+ changeFrequency : 'monthly' as const ,
62+ priority : Math . min ( priority , 0.9 ) , // 최대 0.9까지만 (홈페이지가 1.0)
3463 } ;
3564 } ) ;
3665
37- return [ ...staticPages , ...postUrls ] ;
66+ // 시리즈 URL 생성 (포스트에서 고유한 시리즈만)
67+ const seriesIds = Array . from (
68+ new Set ( posts . filter ( ( p ) => p . seriesId ) . map ( ( p ) => p . seriesId ) )
69+ ) ;
70+ const seriesUrls = seriesIds . map ( ( seriesId ) => ( {
71+ url : `${ baseUrl } /series/${ seriesId } ` ,
72+ lastModified : new Date ( ) ,
73+ changeFrequency : 'weekly' as const ,
74+ priority : 0.7 ,
75+ } ) ) ;
76+
77+ // 포트폴리오 URL 생성 (고정된 포트폴리오 항목들)
78+ const portfolioSlugs = [ 'shipfriend' , 'preview' , 'primitive' , 'storyhelper' ] ;
79+ const portfolioUrls = portfolioSlugs . map ( ( slug ) => ( {
80+ url : `${ baseUrl } /portfolio/${ slug } ` ,
81+ lastModified : new Date ( ) ,
82+ changeFrequency : 'monthly' as const ,
83+ priority : 0.8 ,
84+ } ) ) ;
85+
86+ return [ ...staticPages , ...postUrls , ...seriesUrls , ...portfolioUrls ] ;
3887}
0 commit comments