구조화된 판매자 등록정보(Product, Offer) 데이터

검색결과에 표시되는 쇼핑 지식 패널

페이지에 Product 마크업을 추가하면 쇼핑 지식 패널, Google 이미지, 인기 제품 검색 결과, 제품 스니펫을 포함하여 Google 검색의 판매자 등록정보 환경에 표시될 수 있습니다. 판매자 등록정보에서는 가격, 재고, 배송 및 반품 정보 등 제품과 관련된 구체적인 데이터를 강조 표시할 수 있습니다.

이 가이드에서는 판매자 등록정보의 구조화된 Product 데이터 요구사항에 관해 중점적으로 설명합니다. 어떤 마크업을 사용해야 할지 잘 모르겠다면 Product 마크업 소개를 읽어보세요.

구조화된 데이터를 추가하는 방법

구조화된 데이터는 페이지 정보를 제공하고 페이지 콘텐츠를 분류하기 위한 표준화된 형식입니다. 구조화된 데이터를 처음 사용한다면 구조화된 데이터의 작동 방식을 자세히 알아보세요.

다음은 구조화된 데이터를 빌드, 테스트 및 출시하는 방법의 개요입니다.

  1. 필수 속성을 추가합니다. 사용 중인 형식에 따라 페이지에 구조화된 데이터를 삽입하는 위치를 알아보세요.
  2. 가이드라인을 따릅니다.
  3. 리치 결과 테스트를 사용하여 코드의 유효성을 검사하고 심각한 오류를 해결하세요. 또한 도구에서 신고될 수 있는 심각하지 않은 문제는 구조화된 데이터의 품질을 개선하는 데 도움이 될 수 있으므로 해결하는 것이 좋습니다. 그러나 리치 결과를 사용하기 위한 필수사항은 아닙니다.
  4. 구조화된 데이터를 포함하는 일부 페이지를 배포하고 URL 검사 도구를 사용하여 Google에서 페이지를 표시하는 방법을 테스트합니다. Google이 페이지에 액세스할 수 있으며 robots.txt 파일, noindex 태그 또는 로그인 요구사항에 의해 차단되지 않는지 확인합니다. 페이지가 정상적으로 표시되면 Google에 URL을 재크롤링하도록 요청할 수 있습니다.
  5. Google에 향후 변경사항을 계속 알리려면 사이트맵을 제출하는 것이 좋습니다. 이는 Search Console Sitemap API를 사용하여 자동화할 수 있습니다.

다음 예는 다양한 상황에 맞게 웹페이지에 구조화된 데이터를 포함하는 방법을 보여줍니다.

혜택이 있는 제품 페이지

다음은 제품 리뷰가 포함되어 있으며 제품을 판매하는 제품 페이지의 예입니다.

JSON-LD


 <html>
  <head>
    <title>Executive Anvil</title>
    <script type="application/ld+json">
    {
      "@context": "https://schema.org/",
      "@type": "Product",
      "name": "Executive Anvil",
      "image": [
        "https://example.com/photos/1x1/photo.jpg",
        "https://example.com/photos/4x3/photo.jpg",
        "https://example.com/photos/16x9/photo.jpg"
       ],
      "description": "Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height.",
      "sku": "0446310786",
      "mpn": "925872",
      "brand": {
        "@type": "Brand",
        "name": "ACME"
      },
      "review": {
        "@type": "Review",
        "reviewRating": {
          "@type": "Rating",
          "ratingValue": 4,
          "bestRating": 5
        },
        "author": {
          "@type": "Person",
          "name": "Fred Benson"
        }
      },
      "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": 4.4,
        "reviewCount": 89
      },
      "offers": {
        "@type": "Offer",
        "url": "https://example.com/anvil",
        "priceCurrency": "USD",
        "price": 119.99,
        "priceValidUntil": "2024-11-20",
        "itemCondition": "https://schema.org/UsedCondition",
        "availability": "https://schema.org/InStock"
      }
    }
    </script>
  </head>
  <body>
  </body>
</html>

RDFa


 <html>
  <head>
    <title>Executive Anvil</title>
  </head>
  <body>
    <div typeof="schema:Product">
        <div rel="schema:review">
          <div typeof="schema:Review">
            <div rel="schema:reviewRating">
              <div typeof="schema:Rating">
                <div property="schema:ratingValue" content="4"></div>
                <div property="schema:bestRating" content="5"></div>
              </div>
            </div>
            <div rel="schema:author">
              <div typeof="schema:Person">
                <div property="schema:name" content="Fred Benson"></div>
              </div>
            </div>
          </div>
        </div>
        <div rel="schema:image" resource="https://example.com/photos/4x3/photo.jpg"></div>
        <div property="schema:mpn" content="925872"></div>
        <div property="schema:name" content="Executive Anvil"></div>
        <div property="schema:description" content="Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height."></div>
        <div rel="schema:image" resource="https://example.com/photos/1x1/photo.jpg"></div>
        <div rel="schema:brand">
          <div typeof="schema:Brand">
            <div property="schema:name" content="ACME"></div>
          </div>
        </div>
        <div rel="schema:aggregateRating">
          <div typeof="schema:AggregateRating">
            <div property="schema:reviewCount" content="89"></div>
            <div property="schema:ratingValue" content="4.4"></div>
          </div>
        </div>
        <div rel="schema:offers">
          <div typeof="schema:Offer">
            <div property="schema:price" content="119.99"></div>
            <div property="schema:availability" content="https://schema.org/InStock"></div>
            <div property="schema:priceCurrency" content="USD"></div>
            <div property="schema:priceValidUntil" datatype="xsd:date" content="2024-11-20"></div>
            <div rel="schema:url" resource="https://example.com/anvil"></div>
            <div property="schema:itemCondition" content="https://schema.org/UsedCondition"></div>
          </div>
        </div>
        <div rel="schema:image" resource="https://example.com/photos/16x9/photo.jpg"></div>
        <div property="schema:sku" content="0446310786"></div>
      </div>
  </body>
</html>

마이크로데이터


 <html>
  <head>
    <title>Executive Anvil</title>
  </head>
  <body>
  <div>
    <div itemtype="https://schema.org/Product" itemscope>
      <meta itemprop="mpn" content="925872" />
      <meta itemprop="name" content="Executive Anvil" />
      <link itemprop="image" href="https://example.com/photos/16x9/photo.jpg" />
      <link itemprop="image" href="https://example.com/photos/4x3/photo.jpg" />
      <link itemprop="image" href="https://example.com/photos/1x1/photo.jpg" />
      <meta itemprop="description" content="Sleeker than ACME's Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height." />
      <div itemprop="offers" itemtype="https://schema.org/Offer" itemscope>
        <link itemprop="url" href="https://example.com/anvil" />
        <meta itemprop="availability" content="https://schema.org/InStock" />
        <meta itemprop="priceCurrency" content="USD" />
        <meta itemprop="itemCondition" content="https://schema.org/UsedCondition" />
        <meta itemprop="price" content="119.99" />
        <meta itemprop="priceValidUntil" content="2024-11-20" />
      </div>
      <div itemprop="aggregateRating" itemtype="https://schema.org/AggregateRating" itemscope>
        <meta itemprop="reviewCount" content="89" />
        <meta itemprop="ratingValue" content="4.4" />
      </div>
      <div itemprop="review" itemtype="https://schema.org/Review" itemscope>
        <div itemprop="author" itemtype="https://schema.org/Person" itemscope>
          <meta itemprop="name" content="Fred Benson" />
        </div>
        <div itemprop="reviewRating" itemtype="https://schema.org/Rating" itemscope>
          <meta itemprop="ratingValue" content="4" />
          <meta itemprop="bestRating" content="5" />
        </div>
      </div>
      <meta itemprop="sku" content="0446310786" />
      <div itemprop="brand" itemtype="https://schema.org/Brand" itemscope>
        <meta itemprop="name" content="ACME" />
      </div>
    </div>
  </div>
  </body>
</html>

가격 책정

Google에서는 다음 세 가지 유형의 가격을 인식합니다.

활성 가격
제품이 현재 제공되는 가격입니다.
할인 전 가격
할인 기간에 제품이 일반적으로 제공되는 더 높은 정상가입니다. 인하된 활성 가격에 사용자의 관심을 끌기 위해 취소선이 그어진 가격으로 표시될 수 있습니다.
회원가
특정 포인트 제도 회원에게 제품이 제공되는 가격입니다.

이러한 가격은 Offer 객체의 가격 사양을 사용하여 인코딩됩니다(제품 수준에서 인코딩할 수도 있는 활성 가격 제외). 각 가격 사양은 가격 사양 속성인 priceTypevalidForMemberTier로 식별되며, 이 두 속성은 함께 사용해서는 안 됩니다.

  • 활성 가격에는 priceType 속성도 validForMemberTier 속성도 없습니다.
  • 할인 전 가격은 priceType 속성을 StrikethroughPrice로 설정하며(전환 기간의 경우 ListPrice도 허용됨) validForMemberTier 속성을 보유할 수 없습니다.
  • 회원 가격은 validForMemberTier 속성으로 표시되며 priceType 속성을 보유할 수 없습니다.

이 두 속성이 모두 포함된 가격 사양은 무시됩니다.

활성 가격

다음은 JSON-LD 형식으로 활성 가격을 인코딩하는 방법을 보여주는 두 가지 예입니다. 다음과 같이 price 속성을 사용하여 활성 가격을 지정할 수 있습니다.

"offers": {
  "@type": "Offer",
  "price": 10.00,
  "priceCurrency": "USD",
  ...
}

또는 priceSpecification 속성을 사용하여 활성 가격을 지정할 수도 있습니다.

"offers": {
  "@type": "Offer",
  "priceSpecification": {
    "@type": "UnitPriceSpecification",
    "price": 10.00,
    "priceCurrency": "USD"
  },
  ...
}

할인 가격 책정

다음은 할인가가 적용된 제품의 예입니다. 원래 할인 전 가격과 함께 2순위 가격을 제공하고 값이 https://schema.org/StrikethroughPricepriceType 속성으로 표시하면 현재 활성 가격이 자동으로 할인가가 됩니다. 활성 가격을 priceType 속성으로 표시하지 마세요.

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Nice trinket",
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/trinket_offer",
    "price": 10.00,
    "priceCurrency": "GBP",
    "priceSpecification": {
      "@type": "UnitPriceSpecification",
      "priceType": "https://schema.org/StrikethroughPrice",
      "price": 15.00,
      "priceCurrency": "GBP"
    }
  }
}

또는 두 개의 UnitPriceSpecification 객체를 사용하여 할인가와 할인 전 가격을 지정할 수 있습니다.

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Nice trinket",
  "offers": {
    "@type": "Offer",
    "priceSpecification": [
      {
        "@type": "UnitPriceSpecification",
        "price": 10.00,
        "priceCurrency": "GBP"
      },
      {
        "@type": "UnitPriceSpecification",
        "priceType": "https://schema.org/StrikethroughPrice",
        "price": 15.00,
        "priceCurrency": "GBP"
      }
    ]
  }
}

할인 기간

할인가가 적용되는 기간을 지정하려면 ISO 8601 형식(예: 2025-12-31T23:59:59+01:00)으로 다음 schema.org 속성을 사용하세요.

권장사항:

  • 할인 기간을 명확하게 정의하려면 시작일시과 종료일시를 모두 입력하세요.
  • 시작일시(validFrom 속성)이 종료일시(validThrough 속성 또는 priceValidUntil 속성)보다 빠르거나 같아야 합니다.
  • Google 시스템의 정확성을 위해 시간과 시간대를 ISO 8601 형식으로 입력하는 것이 좋습니다.

속성을 배치할 위치:

  • Offer 노드: validFrom 속성(및 validThrough 속성 또는 priceValidUntil 속성)을 Offer 노드에 직접 추가할 수 있습니다. 이 날짜는 Offer 노드의 price 속성이 현재 적용되는 할인가를 나타내는 경우에 적용됩니다.
  • PriceSpecification 노드: 할인가가 PriceSpecification 노드 내에 정의된 경우(일반적으로 StrikethroughPrice 값도 있는 경우 priceType 속성이 없는 노드) validFrom 속성과 validThrough 속성을 해당 PriceSpecification 노드에 추가합니다. priceValidUntil 속성은 PriceSpecification 유형에 적용되지 않습니다.

다음은 할인가가 적용된 제품의 예입니다. 할인가가 Offer 노드의 price 속성에 있으므로 기간 속성이 Offer 노드에 추가됩니다.

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Nice trinket",
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/trinket_offer",
    "price": 10.00,
    "priceCurrency": "GBP",
    "validFrom": "2025-11-20T08:00:00+00:00",
    "priceValidUntil": "2025-11-30T23:59:59+00:00",
    "priceSpecification": {
      "@type": "UnitPriceSpecification",
      "priceType": "https://schema.org/StrikethroughPrice",
      "price": 15.00,
      "priceCurrency": "GBP"
    }
  }
}

또는 두 개의 UnitPriceSpecification 객체를 사용하여 할인가와 할인 전 가격을 지정할 수 있습니다. 기간 속성이 할인가를 포함하는 UnitPriceSpecification 객체에 추가됩니다.

{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": "Nice trinket",
  "offers": {
    "@type": "Offer",
    "priceSpecification": [
      {
        "@type": "UnitPriceSpecification",
        "price": 10.00,
        "priceCurrency": "GBP",
        "validFrom": "2025-11-20T08:00:00+00:00",
        "validThrough": "2025-11-30T23:59:59+00:00"
      },
      {
        "@type": "UnitPriceSpecification",
        "priceType": "https://schema.org/StrikethroughPrice",
        "price": 15.00,
        "priceCurrency": "GBP"
      }
    ]
  }
}

회원 가격

다음은 회원 가격을 인코딩하는 네 가지 예입니다. 첫 번째 예에서는 활성 가격이 상품 수준의 price 속성으로 지정되고 회원 가격은 validForMemberTier 속성이 표시된 가격 사양으로 제공됩니다.

"offers": {
  "@type": "Offer",
  "url": "https://www.example.com/trinket_offer",
  "price": 10.00,
  "priceCurrency": "GBP",
  "priceSpecification": {
    "@type": "UnitPriceSpecification",
    "price": 8.00,
    "priceCurrency": "GBP",
    "validForMemberTier": {
      "@type": "MemberProgramTier",
      "@id": "https://www.example.com/com/members#tier_gold"
    }
  }
}

두 번째 예에서는 활성 가격과 회원 가격이 모두 가격 사양으로 인코딩되어 있습니다.

"offers": {
  "@type": "Offer",
  "url": "https://www.example.com/trinket_offer",
  "priceSpecification": [
    {
      "@type":