About→

← About

SEO 최적화

pokitstory.com을 만들며 적용했던 SEO 최적화 전략의 핵심은 크롤링 예산(Crawl Budget)을 효율적으로 사용하고, 평가 신호가 분산되지 않도록 크롤러의 동선을 제어하는 것이었습니다. 실제로 적용한 5가지 핵심 방식을 정리합니다.

1. robots.txt를 통한 크롤링 범위 통제

검색엔진 봇이 쓸데없는 내부 관리 페이지나 관리자 화면을 크롤링하느라 시간을 허비하지 않도록 진입 경로를 명확히 제한했습니다.

  • /studio/ 경로 차단: Sanity CMS 관리자 화면 등 검색 결과에 노출될 필요가 없는 내부 라우트는 Disallow로 설정하여 크롤링 예산 절약
  • Sitemap 명시: robots.txt 하단에 sitemap.xml 경로를 절대 경로로 명시해 크롤러가 사이트 구조를 즉시 파악하도록 유도

2. 사이트맵(Sitemap) 동적 생성 및 범위 최적화

모든 개별 글 URL을 사이트맵에 무분별하게 집어넣지 않았습니다. 매주 글이 새로 쌓이더라도 검색엔진이 가장 먼저 수집해야 할 중심 축은 메인 페이지와 주차별 컬렉션이라고 판단했기 때문입니다.

  • 포함 대상: 홈, 아카이브, 주간 브리핑 목록/주차별 브리핑, 신착 목록/주차별 신착, 앱 소개, 지원 페이지
  • 온디맨드 재생성 (ISR): 매 요청마다 사이트맵을 계산하지 않고 캐시 처리하되, Sanity에서 새 글이 발행되는 시점(웹훅)에만 /sitemap.xml을 다시 그리도록 구축. 코드 배포 없이도 새 주차 컬렉션이 사이트맵에 즉시 반영됨

3. 색인 통제: noindex, follow와 Canonical 처리

검색 쿼리 결과 페이지나 페이지네이션(2페이지 이후)처럼 유저에 따라 내용이 달라지거나 1페이지와 중복되는 페이지가 색인에 들어가면, 정작 노출되어야 할 주요 페이지의 랭킹을 갉아먹습니다.

  • noindex, follow 적용: 검색 결과 페이지 및 2페이지 이후 목록에는 noindex를 부여해 색인 생성을 막고, follow를 통해 봇이 목록 내 개별 글 링크는 계속 추적할 수 있도록 유도
  • 아카이브 검색 결과의 Canonical 고정: 검색 결과 페이지의 Canonical URL을 '아카이브 1페이지'로 지정하여, 해당 화면들이 독립된 문서가 아닌 메인 목록의 변형임을 검색엔진에 명시

4. 구조화된 데이터 (JSON-LD) 심기

화면의 생김새만으로는 크롤러가 페이지의 정체성을 100% 이해하기 어렵습니다. 표준화된 메타데이터 규격인 JSON-LD를 통해 각 라우트의 역할을 명확히 정의했습니다.

  • 홈: WebSite (웹사이트의 대표 메인)
  • 앱 소개: SoftwareApplication (iOS, 라이프스타일 카테고리의 앱 서비스 랜딩)
  • 브리핑 / 신착: CollectionPage (단일 아티클이 아닌 큐레이션 모음집)

검색엔진이 앱 소개 페이지를 일반 블로그 글이나 기사 한 편으로 오해하지 않도록 정체성을 확실히 지정했습니다.

5. 다국어 및 Canonical 태그 연동 (hreflang)

글로벌 타깃을 위해 동일한 화면을 한국어, 영어, 일본어로 제공하고 있습니다. 세 언어 페이지가 서로 다른 사이트로 오인되거나 중복 콘텐츠로 판정받지 않도록 연동했습니다.

  • canonical: 각 언어별 자기 자신 URL을 정확히 가리키도록 설정
  • hreflang: /ko, /en, /ja 페이지를 상호 연결하여 검색엔진에 "이 3개 페이지는 언어만 다른 동일한 콘텐츠"라는 신호를 전달
  • x-default: 언어 설정이 지정되지 않은 글로벌 유저를 위해 기본 언어로 영어를 지정