Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import type { Metadata } from 'next';

import { InfiniteData } from '@tanstack/react-query';

import { API } from '@/api';
import GroupList from '@/components/pages/group-list';
import { GroupSearchBar } from '@/components/pages/group-list/group-search-bar';
import { GROUP_LIST_PAGE_SIZE } from '@/lib/constants/group-list';
import { generateHomeMetadata } from '@/lib/metadata/home';
import { GetGroupsResponse } from '@/types/service/group';

export const dynamic = 'force-dynamic';
Expand All @@ -12,6 +15,11 @@ interface HomePageProps {
searchParams: Promise<{ keyword?: string }>;
}

export const generateMetadata = async ({ searchParams }: HomePageProps): Promise<Metadata> => {
const params = await searchParams;
return await generateHomeMetadata(params.keyword);
};

export default async function HomePage({ searchParams }: HomePageProps) {
const params = await searchParams;
const keyword = params.keyword;
Expand Down
87 changes: 87 additions & 0 deletions src/lib/metadata/home.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { Metadata } from 'next';
import { headers } from 'next/headers';

export const generateHomeMetadata = async (keyword?: string): Promise<Metadata> => {
const headersList = headers();
const host = (await headersList).get('host') || process.env.DOMAIN;
const currentUrl = keyword
? `https://${host}/?keyword=${encodeURIComponent(keyword)}`
: `https://${host}/`;

try {
if (keyword) {
const metaTitle = `${keyword} 검색결과 | WeGo`;
const metaDescription = `"${keyword}"에 대한 모임 검색 결과를 확인해보세요.`;

return {
title: metaTitle,
description: metaDescription,
keywords: [keyword, '모임 검색', 'WeGo'],
openGraph: {
title: metaTitle,
description: metaDescription,
siteName: 'WeGo',
locale: 'ko_KR',
type: 'website',
url: currentUrl,
},
twitter: {
card: 'summary',
title: metaTitle,
description: metaDescription,
},
robots: {
index: true,
follow: true,
},
alternates: {
canonical: currentUrl,
},
};
}

const metaTitle = 'WeGo - 함께하는 모임 플랫폼';
const metaDescription = 'WeGo에서 함께할 다양한 모임을 탐색하고 참여하세요.';

return {
title: metaTitle,
description: metaDescription,
keywords: ['모임', 'WeGo', '모임 플랫폼', '소모임'],
openGraph: {
title: metaTitle,
description: metaDescription,
siteName: 'WeGo',
locale: 'ko_KR',
type: 'website',
url: currentUrl,
},
twitter: {
card: 'summary',
title: metaTitle,
description: metaDescription,
},
robots: {
index: true,
follow: true,
},
alternates: {
canonical: currentUrl,
},
};
} catch (error) {
console.error('Failed to generate home metadata:', error);
return {
title: 'WeGo - 함께하는 모임 플랫폼',
description: 'WeGo에서 함께할 다양한 모임을 탐색하고 참여하세요.',
openGraph: {
title: 'WeGo - 함께하는 모임 플랫폼',
description: 'WeGo에서 함께할 다양한 모임을 탐색하고 참여하세요.',
url: currentUrl,
type: 'website',
},
twitter: {
card: 'summary',
},
};
}
};