Skip to content

Commit b3b2c6a

Browse files
Merge pull request #72 from ShipFriend0516/fix/seo
fix: 사이트맵에 포스트, 시리즈, 포트폴리오 URL 생성 로직 추가 및 우선순위 조정
2 parents 879df46 + 32fcc5a commit b3b2c6a

1 file changed

Lines changed: 53 additions & 4 deletions

File tree

app/sitemap.ts

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,41 @@ import dbConnect from '@/app/lib/dbConnect';
33
import Post from '@/app/models/Post';
44

55
export 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

Comments
 (0)