SEO 타이틀을 DB 기반 설정으로 통합
목차
홈 페이지의 SEO 타이틀이 CMS 데이터베이스에서 제대로 로드되지 않던 문제를 수정했다. 간단해 보이는 변경이지만, 검색 엔진 최적화(SEO)와 콘텐츠 관리의 일관성에 꽤 중요한 수정이었다.
문제 상황
레이아웃 파일(src/layouts/Base.astro)을 보니 홈 페이지의 <title> 태그가 CMS에서 관리하는 메타데이터(cms_site.meta.seo.title)를 제대로 참조하지 않고 있었다. 사실 많은 프로젝트에서 이런 문제가 발생한다. 페이지를 처음 구축할 때는 타이틀을 하드코딩하거나 가장 기본적인 값으로 설정해두고, 나중에 CMS 구조가 정의되면서 배선을 깜박하는 경우다.
왜 중요한가? SEO 타이틀은 검색 엔진 검색 결과에 그대로 노출되는 문자열이다. Google이나 다른 검색 엔진은 <title> 메타데이터를 페이지의 주제를 파악하는 주요 신호로 사용한다. 또한 사용자가 검색 결과에서 클릭할지 말지 판단하는 첫 번째 요소다. 만약 타이틀이 오래되었거나 부정확하면, 검색 순위도 떨어지고 클릭률도 낮아진다.
작업 내용
// Before (하드코딩 또는 누락)
<title>Home</title>
// After (DB 기반 동적 로드)
<title>{cms_site?.meta?.seo?.title}</title>
레이아웃 파일에서 CMS 데이터를 prop으로 받아, SEO 타이틀을 cms_site.meta.seo.title 에서 가져오도록 배선했다. Astro 같은 현대적 SSG/SSR 프레임워크에서는 이런 값을 빌드 시점이나 요청 시점에 동적으로 주입할 수 있다. 특히 CMS 기반의 아키텍처라면, 타이틀, 설명(description), OG 이미지, 키워드 같은 메타데이터 전체를 DB에서 일괄 관리하는 게 정석이다.
이제 마케팅이나 콘텐츠 팀이 CMS 패널에서 타이틀을 수정하면, 빌드 후 홈 페이지에 자동으로 반영된다. 수동으로 코드를 수정할 필요가 없고, 버전 관리의 번거로움도 줄어든다.
메타데이터 관리 패턴
이런 식으로 한두 개의 메타데이터만 DB 기반으로 관리하는 건 결국 반쪽짜리다. 대부분의 경우 아래 항목들도 함께 고려해야 한다:
| 메타데이터 | 용도 | DB 필드 |
|---|---|---|
<title> |
검색 결과 제목 | cms_site.meta.seo.title |
<meta name="description"> |
검색 결과 설명 | cms_site.meta.seo.description |
<meta property="og:title"> |
SNS 공유 제목 | cms_site.meta.og.title |
<meta property="og:image"> |
SNS 공유 이미지 | cms_site.meta.og.image |
<meta name="keywords"> |
검색 키워드 (선택) | cms_site.meta.seo.keywords |
이런 것들을 모두 DB 스키마에 정의해두면, 한 번의 CMS 업데이트로 SEO, 소셜 공유, 브랜딩을 모두 일관되게 유지할 수 있다. 규모가 커질수록 이 패턴의 가치가 명확해진다.
회고
이 작업은 "버그 B"로 분류되었는데, 아마도 누군가 홈 페이지를 검색했을 때 타이틀이 기대치 않은 값이었거나 아예 제목이 비어 있었던 것 같다. 간단한 수정이지만, 어떻게 보면 초반 설계 단계에서 메타데이터 소스를 명확히 정의하지 않아서 생긴 결과다.
팀 입장에서 배운 점은 이거다: 처음부터 메타데이터를 "어디서 온 것인가"를 명시하는 게 중요하다는 것. "이 페이지의 타이틀은 항상 DB에서 온다", "이 이미지는 항상 CMS 에셋에서 온다" 같은 규칙을 문서화하면, 나중에 누군가 새 페이지를 만들 때 실수를 줄일 수 있다. 또한 코드 리뷰 때도 "이 메타데이터는 DB에서 가져와야 하는데 왜 하드코딩했나?" 같은 질문이 나오면, 논의를 수월하게 할 수 있다.
다음에는 이런 메타데이터 배선을 체크리스트로 만들어서, 새 페이지나 레이아웃 변경 시 놓치지 않도록 해야겠다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.