logo hsb.horse

Architecture Decision Record

SEO/메타데이터 및 AIO 최적화 방침

title/description, canonical/hreflang, OGP/Twitter, 구조화 데이터 출력을 일원화해 검색 결과와 AI 요약에서 재사용성을 높인다.

채택됨 #seo #metadata #aio #structured-data #i18n

SEO/메타데이터 및 AIO 최적화 방침

결정

  • 페이지별 임의 메타데이터 구현을 금지하고, 공통 레이어(Layout 하위의 전용 head 책임)로 출력 책임을 일원화한다.
  • 인덱싱 대상 페이지에서는 title, description, canonical, hreflang, og:url 간 불일치를 허용하지 않는다.
  • 공유 가능한 페이지에는 OGP/Twitter 메타데이터를 필수로 적용하고, 이미지 URL은 절대 URL을 사용한다.
  • noindex는 검색 결과에서 의도적으로 제외할 페이지에만 사용하고, sitemap 포함 여부와 정합성을 맞춘다.
  • AIO(AI Overview 등) 대응은 전용 해킹을 쓰지 않고, 구조화 데이터와 1차 정보의 명확성으로 대응한다.

메타데이터 필수 항목과 규약

항목규약
title모든 페이지 필수. 기본 형식은 `{페이지 제목}
description모든 페이지 필수. 평문으로 간결하게 작성하고, 본문 내용과 모순되지 않아야 한다.
canonical절대 URL 필수. 쿼리/해시를 제외하고, 인덱싱하려는 대표 URL을 가리킨다.
robots공개 페이지 기본값은 index,follow,max-image-preview:large.
og:urlcanonical과 완전히 동일해야 한다.

canonical / hreflang 운영

  • hreflang은 실제로 존재하는 번역 페이지에만 출력한다.
  • x-default에는 기본 언어(ja) 대표 URL을 사용한다.
  • 번역이 없는 언어에 대해서는 hreflang을 출력하지 않는다.
  • 각 언어 페이지의 canonical은 해당 언어 페이지 자신을 가리켜야 한다(언어 간 canonical 금지).

OGP / Twitter 카드

  • 공유 가능한 페이지에는 아래 항목을 필수로 한다.
    • og:type(페이지 특성에 따라 website 또는 article)
    • og:title
    • og:description
    • og:url
    • og:image(절대 URL)
    • og:image:alt
    • twitter:card(summary_large_image)
    • twitter:title
    • twitter:description
    • twitter:image
  • OGP 이미지가 지정되지 않은 경우를 대비해 사이트 공통 기본 이미지는 /brand/og.jpg를 사용한다(이미지 파일은 후속 작업에서 추가).

noindex / sitemap 연계

  • noindex: true인 페이지는 meta robotsnoindex,nofollow로 출력하고 sitemap에서 제외한다.
  • workers.dev 같은 비프로덕션 호스트에는 X-Robots-Tag: noindex를 유지한다.
  • draftnoindex의 의미를 분리한다.
    • draft: 애초에 공개 대상이 아님
    • noindex: 공개는 하지만 검색 결과에는 노출하지 않음

구조화 데이터(AIO 대응의 핵심)

  • 기존 Person, BreadcrumbList는 유지한다.
  • 페이지 유형별로 아래를 추가 운영한다.
    • 상세 페이지(블로그, 릴리스 노트, ADR): Article(필요 시 TechArticle)
    • 목록 페이지(changelog, tools 등): CollectionPage
    • About 페이지: ProfilePage
  • JSON-LD에는 실제로 렌더링되는 사실만 기술하고, 허구의 평가/수치/실적은 포함하지 않는다.

AIO 재사용을 위한 콘텐츠 원칙

  • AIO 전용 숨김 문구를 만들지 않고, 본문 상단에 핵심을 짧게 전달하는 도입부를 둔다.
  • 제목 계층을 깨지 않고, 1페이지 1주제를 원칙으로 한다.
  • 용어, 정의, 절차는 페이지 내에서 자기완결적으로 설명하고 외부 링크 전제 설명을 줄인다.

배경

현재 구현은 title, description, canonical, hreflang을 일정 수준 갖추고 있으나, 아래 항목은 아직 미통일 또는 미흡하다.

  • OGP/Twitter 공통 출력 정책
  • noindex와 sitemap 운영 규칙
  • 페이지 유형별 JSON-LD 정책
  • 검색 결과용과 AI 요약용을 동시에 만족하는 작성/구조 기준

다국어 구조(ja 기본, 타 언어는 URL 프리픽스)를 유지하면서도 검색 엔진과 AI 크롤러 모두에서 재사용되기 쉬운 정보 설계가 필요했다.

옵션

  • 옵션 A: 페이지별 개별 구현을 계속한다
  • 옵션 B: 최소 태그(title/description/canonical)만 유지한다
  • 옵션 C: 공통 규약을 정의하고 메타데이터와 구조화 데이터를 일원 운영한다(채택)

근거

  • 정합성: canonical/hreflang/og:url 불일치를 방지할 수 있다.
  • 운영성: 신규 페이지 추가 시 필수 항목 누락을 줄일 수 있다.
  • 재사용성: 검색 결과, SNS 카드, AI 요약에서 동일한 1차 정보를 재사용하기 쉽다.
  • 확장성: OGP 자동 생성 및 메타데이터 검증 스크립트를 단계적으로 도입하기 쉽다.

영향

  • 구현 과제로 공통 SEO head 책임 도입(또는 Layout 책임 확장)이 필요하다.
  • Content Collection 스키마에 ogImage, noindex 같은 SEO 항목을 일관되게 정의해야 한다.
  • CI에 “필수 메타 태그 누락”, “canonical/hreflang 불일치”, “noindex 페이지의 sitemap 포함”을 탐지하는 체크를 추가해야 한다.
  • 성공 기준은 아래와 같다.
    • 인덱싱 대상 페이지의 필수 메타데이터 충족률 100%
    • canonicalog:url 일치율 100%
    • 구조화 데이터 검증 오류 0건