SOYOYU
제품·거래extends Intangible

Offer

상품·서비스의 가격 제안. 같은 상품이라도 판매처·기간·조건이 다르면 별개 Offer.

XEO 효과 4가지

리치 결과

●●●●○높음

Product와 결합 시 SERP에 가격·재고·할인 노출. 단독으로도 Event·Service 등 다양한 곳에서 활용.

AI 인용

●●●●○높음

AI 쇼핑 답변에서 가격 비교의 기준. 통화·재고를 정확히 마크업해야 AI가 잘못된 가격을 답하지 않음.

사용 빈도

●●●●○높음

Product를 쓰는 모든 사이트에서 사용. Product가 있으면 거의 자동으로 따라옴.

구현 난이도

●●○○○낮음

필드 5~6개 채우면 끝. 단 가격 동기화 파이프라인 정비가 동반되어야 함.

이럴 때 쓴다

  • Product의 offers 필드로 가격 정보를 결합할 때
  • 한 상품에 가격이 하나일 때 (여럿이면 AggregateOffer)
  • 이벤트 입장권·구독·다운로드 가격에도 사용
  • itemOffered로 Product 외 Service·Event·CreativeWork에도 적용 가능
할인 가격
{
  "@type": "Offer",
  "url": "https://example.com/products/wallet",
  "priceCurrency": "KRW",
  "price": "75000",
  "priceValidUntil": "2026-06-30",
  "availability": "https://schema.org/InStock",
  "itemCondition": "https://schema.org/NewCondition",
  "seller": { "@id": "https://example.com/#org" }
}

priceValidUntil이 있어야 Google이 할인 기간으로 인식. 없으면 영구 가격으로 잡혀 SERP에서 할인 강조가 사라짐.

자주 보는 안티패턴

  • price를 숫자 + 통화로 한 문자열 (예 "$89")로 작성 — priceCurrency 따로 분리 필수
  • priceValidUntil 누락 — 할인 표시가 영구로 잡힘
  • availability를 상대 URL — schema.org/InStock 등 절대 URL 필요
  • itemCondition 누락 — 중고/리퍼 노출 약화
통화 미분리
"price": "₩89,000"

통화 기호·쉼표가 섞이면 Google이 숫자 파싱 실패. price는 숫자만, priceCurrency는 별도로.

필수 필드

  • priceNumber|Text가격 숫자만 (통화 분리)
  • priceCurrencyTextISO 4217 코드 (KRW, USD, JPY 등)
  • availabilityItemAvailabilityschema.org/InStock, OutOfStock, PreOrder 등
  • urlURL구매 페이지 절대 URL
  • itemConditionOfferItemConditionNewCondition / UsedCondition / RefurbishedCondition
  • priceValidUntilDate할인 종료일 ISO 8601 — 없으면 영구 가격
  • sellerOrganization판매처 entity
  • priceSpecificationPriceSpecification세부 가격 (세전·세후·배송비 분리 시)
  • shippingDetailsOfferShippingDetails배송비·기간. Google Shopping 권장

해설

Product가 상품 그 자체라면 Offer는 그 상품을 사는 조건. 같은 가죽 지갑이라도 — 본사 쇼핑몰 89,000원 / 마켓플레이스 95,000원 / 중고 50,000원 — 각각 별개의 Offer다. 한 상품이 같은 채널에서 가격이 하나면 단일 Offer로, 여럿이면 AggregateOffer로 묶는다.

리치 결과 관점에서 Offer 단독으로는 노출되지 않고 — 반드시 Product·Service·Event 등 상위 타입의 offers 필드에 들어가야 효과가 난다. SERP에서 가격이 빨간 글자로 강조되는 효과나, 재고 없음/매진 임박 표시는 Offer의 availability 값에서 온다.

AI 인용 관점에서 ChatGPT·Perplexity의 쇼핑 답변에서 Offer는 가격·통화·재고의 단일 출처. AI는 본문에서 "89,000원" 같은 텍스트를 추측하지 않고 — Offer 마크업의 price·priceCurrency직접 읽는다. 마크업이 최신 가격을 반영하지 않으면 — AI가 옛 가격을 답하고, 사용자가 잘못된 정보로 구매를 결정한다.

가장 흔한 함정: price통화 기호·쉼표 포함. "price": "₩89,000"은 Google 파싱에 실패한다. 숫자만 ("price": "89000") + 통화는 priceCurrency로 분리 ("priceCurrency": "KRW"). ISO 4217 통화 코드를 정확히 — KRW·USD·JPY·EUR.

priceValidUntil할인 표시의 수명을 결정한다. 할인 가격을 등록할 때 종료일이 없으면 — Google은 영구 가격으로 인식하고, 할인 강조 효과가 사라진다. 반대로 상시가에 priceValidUntil을 넣어두면, 그 날짜가 지난 후에 Google이 가격을 오래된 정보로 무시할 수 있다. 할인일 때만 priceValidUntil을 넣는다.

availability반드시 schema.org URL 형식. "InStock" 같은 단순 문자열이 아니라 "https://schema.org/InStock". 자주 쓰는 값: InStock·OutOfStock·PreOrder·Discontinued·LimitedAvailability. 재고가 바뀔 때마다 이 값을 동기화해야 SERP의 재고 없음 표시가 정확하다.