
프로젝트를 진행하면서 사이트를 검색 엔진에 노출시키기 위해 SEO(Search Engine Optimization) 최적화 작업을 진행했습니다.
초기에는 단순히 meta 태그만 추가하면 되는 줄 알았지만, 알아보면서 sitemap.xml, robots.txt까지 SEO 최적화를 위한 설정이 필요하다는 걸 깨달았습니다.
title 태그는 브라우저 탭 상단과 검색 결과의 제목에 표시됩니다.
사용자 클릭 유도에 직접적인 영향을 주기 때문에, 사이트 주제나 브랜드명을 명확히 드러내는 문구로 구성하는 것이 좋습니다.
최근에는 "사이트명 - 주제" 형식으로도 많이 확인할 수 있습니다.
이번 프로젝트에서는 간단하게 사이트명만 나타냈습니다.
<title>빵대빵</title>


SEO에 기본적으로 사용되는 속성은 다음과 같습니다.
description: 페이지를 간략하게 설명하는 내용으로, 검색 결과 하단에 표시됩니다.keywords: 페이지 관련 키워드를 나열합니다. 최근 검색 엔진은 keywords를 거의 참고하지 않는다는 정보를 찾아볼 수 있는데, 기본적인 정보라고 생각되어 추가했습니다.
<meta name="description" content="지역별 맛있는 빵집 정보 제공, 추천 서비스 제공해준다 냥">
<meta name="keywords" content="빵대빵,빵,빵집,대전빵집,대전 빵집 추천,빵집 정보,빵 추천,빵 맛집,빵 커뮤니티,맛있는 빵집,빵지순례,대전 빵집순례,대전,맛있는 빵">
Open Graph 태그를 적용하면 카카오톡와 같은 외부 SNS 공유 시 미리보기 정보를 설정할 수 있습니다.
기본적으로 title, url, site_name, type을 설정해야합니다. 추가로 description, image도 많이 사용됩니다.
이미지 크기는 카카오톡 기준 800x400 정도가 적당합니다.
🔗 The Open Graph protocol에서 속성 더보기
<meta property="og:title" content="빵대빵">
<meta property="og:description" content="지역별 맛있는 빵집 정보 제공, 추천 서비스 제공해준다 냥">
<meta property="og:url" content="https://bbangdaebbang.com">
<meta property="og:site_name" content="빵대빵">
<meta property="og:image" content="https://bbangdaebbang.com/assets/images/thumb.png">
<meta property="og:type" content="website">

X(구 트위터) 공유 시 사용할 미리보기 정보도 별도로 설정할 수 있습니다.
Open Graph만으로도 미리보기는 제공되지만, Twitter에서는 twitter 태그를 우선적으로 참조합니다.
해당 태그는 추가하지 않아도 되지만, Vercel 배포를 통해 Open Graph 적용을 확인할 때 기본적으로 확인하는 요소라 Open Graph 태그와 같이 추가해주었습니다.
🔗 twitter-developer-platform에서 속성 더보기
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="빵대빵">
<meta name="twitter:description" content="지역별 맛있는 빵집 정보 제공, 추천 서비스 제공해준다 냥">
<meta name="twitter:image" content="https://preview.bbangdaebbang.com/assets/images/thumb.png">
검색 엔진 크롤러가 페이지 구조를 파악할 수 있도록 돕기 위해 작성합니다.
페이지 주소, 마지막 수정 날짜, 변경 주기, 우선순위를 설정할 수 있습니다.
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.bbangdaebbang.com</loc>
<lastmod>2025-03-14T10:14:48.525Z</lastmod>
<changefreq>monthly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://www.bbangdaebbang.com/balanceGame</loc>
<lastmod>2025-03-14T10:14:48.525Z</lastmod>
<changefreq>never</changefreq>
<priority>0.8</priority>
</url>
...
</urlset>
크롤러가 페이지 탐색 시 허용할 경로와, 차단할 경로에 대해 설정합니다.
이번 프로젝트에서는 모든 경로를 허용했습니다.
User-Agent: *
Allow: /
Sitemap: https://www.bbangdaebbang.com/sitemap.xml
✅ 구글에 색인 신청한 후 일정 시간이 지나면,
아래와 같은 화면을 통해 색인이 정상적으로 등록되었는지 확인할 수 있습니다.

웹마스터 도구에서 사이트 등록사이트 진단을 통해 누락된 설정 확인 가능 ✅ 네이버에 사이트를 등록하고 일정 시간이 지나면,
'웹마스터 도구 > 사이트 관리 > 리포트 - 사이트 진단'을 통해 색인 여부를 확인할 수 있습니다.

Next.js의 App Router 환경에서는 파일 기반으로 metadata, robots.txt, sitemap.xml을 쉽게 설정할 수 있습니다
🔗 Next.js 공식 문서
페이지마다 metadata 내용을 일일이 구성하는게 번거로워, 반복되는 설정을 함수화하여 간단하게 적용했습니다.
import { Metadata } from "next";
type GenMetadataProps = {
title: string;
imageUrl?: string;
url: string;
};
export const genMetadata = ({
title,
imageUrl = "/assets/images/thumb.png",
url,
}: GenMetadataProps): Metadata => ({
title: title,
openGraph: {
siteName: APP_INFO.NAME,
title: title,
images: {
url: imageUrl,
},
url: `${process.env.NEXT_PUBLIC_BASE_URL}${url}`,
},
twitter: {
title: title,
images: {
url: imageUrl,
},
},
alternates: {
canonical: url,
},
});
// page.ts
export const metadata: Metadata = genMetadata({
title: "밸런스 게임",
imageUrl: "/assets/images/thumb_share_balance.png",
url: "/balanceGame",
});
처음 SEO 작업을 했을땐 meta 태그와 Open Graph 태그만으로 마무리했었습니다.
하지만 이번 작업을 통해 sitemap.xml과 robots.txt까지 살펴보면서, 검색 엔진 크롤러가 페이지 구조를 더욱 잘 파악하고, 불필요한 경로를 차단함으로써 서비스 신뢰도 향상에도 도움이 될 수 있다는 것을 알 수 있었습니다.