홈 페이지 제목을 CMS에서 관리하도록 수정
목차
홈 페이지의 SEO 제목을 하드코딩된 고정값이 아니라 CMS 데이터베이스에서 동적으로 가져오도록 변경했다. src/layouts/Base.astro 에서 cms_site.meta.seo.title 을 참조하는 배선 작업인데, 이게 생각보다 흥미로운 버그였고 팀 커뮤니케이션 관점에서도 배운 게 많아서 정리해본다.
정적 SEO 메타는 리스크
처음에는 어떤 이유에서였을까. 아마 초기 프로토타입 단계에서 "일단 홈 페이지 title 은 이렇게 고정하자" 정도로 넘어간 것 같다. 또는 "CMS 구조가 아직 안 나왔으니까 일단 static 으로" 같은 식의 임시 구현. 누구나 경험 있을 것 같은 패턴이다. 문제는 이런 "임시"가 개발 일정에 밀려 몇 개월을 간다는 것. 그러는 사이 운영팀/마케팅팀은 홈 제목을 바꿀 수 없고, SEO 개선안을 적용하려 해도 코드 배포를 기다려야 한다.
SEO 관점에서도 보면, 홈 페이지의 title은 검색 엔진이 첫 번째로 수집하는 신호 중 하나다. 이게 고정되면:
- 시즈널 캠페인이나 마케팅 전략 변화에 반응할 수 없다
- A/B 테스트 같은 실험도 기술적으로 불가능 (코드 배포 필요)
- 운영 팀의 빠른 대응을 기대할 수 없다
이 번 "버그 B"는 아마 내부 티켓이나 피드백에서 올라온 것일 텐데, 마케팅이나 전략 팀에서 "홈 제목을 우리가 관리하고 싶다"는 요청이었을 거다. 정당한 요청이고, 기술적으로도 명확한 개선 대상이었다.
Astro 레이아웃에서 동적 메타데이터 처리
Base.astro 는 페이지 레이아웃의 기본 틀을 정의하는 파일이다. 여기가 바뀌는 건 거의 모든 페이지에 영향을 미친다는 뜻이다. 특히 메타데이터(title, description, og:image 등) 처리가 레이아웃에서 이루어진다면, 이 변경은 신중하게 테스트해야 한다.
Astro 에서는 일반적으로 이런 흐름을 따른다:
| 단계 | 내용 |
|---|---|
| 1. props 전달 | 페이지에서 레이아웃으로 SEO 데이터 넘기기 |
| 2. DB 쿼리 | 필요한 경우 CMS 데이터 가져오기 |
| 3. 렌더 | <title> 태그에 반영 |
이전처럼 레이아웃에 직접 title 문자열이 하드코딩되어 있으면 이 흐름이 끊긴다. 이제는 CMS의 cms_site.meta.seo.title 구조를 믿고 데이터를 가져와야 하는데, 이러면 의존성이 생기고, 그 의존성이 깨지면 (예를 들어 CMS API가 느리거나 다운되면) 페이지 렌더가 영향을 받을 수 있다. 그래서 에러 핸들링도 중요해진다 (title 이 없으면 fallback 값은 뭘 쓸 것인가).
실제 구현과 고민
실제로 이 변경을 할 때는 몇 가지를 결정해야 했다:
- 캐싱: CMS 데이터를 매번 불러올 건가, 아니면 빌드 타임에 한 번?
- Fallback: 데이터가 없으면 뭘 보여줄 건가?
- 무효화: 운영자가 CMS에서 title 을 바꾸면 언제 반영될 것인가 (즉각적? 스케줄?)
- 마이그레이션: 기존 page 단위의 SEO 설정과 어떻게 조화시킬 것인가?
이런 질문들이 코드 리뷰에서 나올 게 뻔하다. 단순히 "DB에서 읽어오도록 변경했습니다" 정도로는 부족하다는 뜻이다. 특히 팀장 입장에서는 "이 변경이 운영 흐름에 어떤 영향을 미치는가" 를 먼저 생각해야 한다.
배운 점
이번 작업의 핵심은 "좋은 구조는 처음부터 만들어야 한다"는, 너무 뻔한 교훈이 아니라, "하지만 무조건 그럴 수는 없으니, 나중에 갚기 위해 미리 설계해두자" 는 것이다.
초기 프로토타입에서 하드코딩하는 건 빠르고 합리적이다. 문제는 그걸 "나중에" 언제 거둬낼 것인가. 팀장 입장에서는 이런 "빚"을 기록하고, 어느 시점에 갚을지를 우선순위 큐에 넣어야 한다. 이번 "버그 B" 는 아마 그런 스프린트 중에 들어온 아이템이었을 것 같다. 운영 요청이 분명했고, 기술 부채도 명확했고, 영향 범위도 컸으니까.
또 하나는 CMS 연동이 늘어날수록 "CMS 데이터가 정말 거기 있나" 같은 defensive coding 이 중요해진다는 점. cms_site.meta.seo.title 를 그냥 가져올 게 아니라, 없을 때는 어떻게 할지, 지나치게 길면 cut off 할지, 특수문자 escape 는 필요한지 같은 엣지 케이스들을 생각해야 한다. SEO title 은 그냥 메타데이터가 아니라 사용자가 검색 결과에서 보는 텍스트니까, 렌더 품질이 직결된다.
이 변경이 작아 보이지만 (파일 하나, 라인 수는 적을 것 같다), 배포 후에는 운영팀에 명확한 지침을 줘야 한다. CMS에서 title 을 바꾼 뒤 언제부터 반영되는지, 캐시 무효화는 어떻게 하는지, 혹시 문제 생기면 누한테 연락할 건지 같은 것들. 그게 정말 "완료"다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.