From ab0b2e0a671233af6dc62fe727ee34a7df6b32e3 Mon Sep 17 00:00:00 2001 From: minseokim Date: Sat, 3 Jan 2026 22:42:45 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=99=88=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EA=B3=B5=EC=9C=A0=20=EB=AF=B8=EB=A6=AC=EB=B3=B4=EA=B8=B0=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/metadata/home.ts | 56 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/src/lib/metadata/home.ts b/src/lib/metadata/home.ts index 100e2e0b..b78f6c95 100644 --- a/src/lib/metadata/home.ts +++ b/src/lib/metadata/home.ts @@ -1,18 +1,39 @@ import { Metadata } from 'next'; import { headers } from 'next/headers'; +import { API } from '@/api'; +import { GROUP_LIST_PAGE_SIZE } from '@/lib/constants/group-list'; + export const generateHomeMetadata = async (keyword?: string): Promise => { - const headersList = headers(); - const host = (await headersList).get('host') || process.env.DOMAIN; + const headersList = await headers(); + const host = headersList.get('host') || process.env.DOMAIN || 'wego.monster'; + const protocol = + headersList.get('x-forwarded-proto') || (host.includes('localhost') ? 'http' : 'https'); const currentUrl = keyword - ? `https://${host}/?keyword=${encodeURIComponent(keyword)}` - : `https://${host}/`; + ? `${protocol}://${host}/?keyword=${encodeURIComponent(keyword)}` + : `${protocol}://${host}/`; + const logoImageUrl = `${protocol}://${host}/icons/resizable/icon-wego-logo.svg`; try { if (keyword) { const metaTitle = `${keyword} 검색결과 | WeGo`; const metaDescription = `"${keyword}"에 대한 모임 검색 결과를 확인해보세요.`; + let searchImageUrl = logoImageUrl; + try { + const searchResponse = await API.groupService.getGroups({ + size: GROUP_LIST_PAGE_SIZE, + keyword, + }); + const firstGroupImage = searchResponse.items[0]?.images?.[0]; + if (firstGroupImage) { + searchImageUrl = firstGroupImage; + } + } catch (error) { + // 실패 시 기본 로고 이미지 사용 + console.error('이미지를 가져오는데 실패했습니다:', error); + } + return { title: metaTitle, description: metaDescription, @@ -24,11 +45,20 @@ export const generateHomeMetadata = async (keyword?: string): Promise locale: 'ko_KR', type: 'website', url: currentUrl, + images: [ + { + url: searchImageUrl, + width: 400, + height: 400, + alt: `${keyword} 검색 결과 모임 이미지`, + }, + ], }, twitter: { card: 'summary', title: metaTitle, description: metaDescription, + images: [searchImageUrl], }, robots: { index: true, @@ -54,11 +84,20 @@ export const generateHomeMetadata = async (keyword?: string): Promise locale: 'ko_KR', type: 'website', url: currentUrl, + images: [ + { + url: logoImageUrl, + width: 400, + height: 400, + alt: 'WeGo 로고', + }, + ], }, twitter: { card: 'summary', title: metaTitle, description: metaDescription, + images: [logoImageUrl], }, robots: { index: true, @@ -78,9 +117,18 @@ export const generateHomeMetadata = async (keyword?: string): Promise description: 'WeGo에서 함께할 다양한 모임을 탐색하고 참여하세요.', url: currentUrl, type: 'website', + images: [ + { + url: logoImageUrl, + width: 400, + height: 400, + alt: 'WeGo 로고', + }, + ], }, twitter: { card: 'summary', + images: [logoImageUrl], }, }; }