구조·마크업 · 공식 문서
상품 옵션 URL과 ProductGroup, 구조 선택 기준
옵션마다 경로나 키=값 쿼리 파라미터로 따로 식별되는 URL 을 두고, 옵션들을 ProductGroup 으로 묶어 variesBy·hasVariant·productGroupID 를 적습니다. 한 페이지에서 옵션을 고르면 캐노니컬을 하나로, 옵션마다 페이지가 다르면 페이지마다 ProductGroup 전체를 넣습니다.
색과 사이즈가 있는 상품은 옵션 조합만큼 URL 이 생길 수 있습니다. 이 URL 들이 같은 상품의 옵션이라는 것을 구글이 모르면 서로 다른 상품이나 중복 페이지로 읽힙니다.
구글 문서는 옵션 URL 의 모양과 ProductGroup 마크업을 한 쌍으로 설명합니다. 먼저 사이트가 옵션을 한 페이지에서 고르는지, 페이지를 나누는지를 정하면 나머지가 따라옵니다.
발견 01
옵션마다 경로나 키=값 쿼리 파라미터로 따로 식별되는 URL 을 둡니다
To help Google understand your product variants, make sure that each variant can be identified by a separate URL.
구글이 제품 옵션을 이해하도록 옵션마다 따로 식별되는 URL 을 둔다.
| URL 모양 | 예 | 구글 문서 | 원문 |
|---|---|---|---|
| 경로 | /t-shirt/green | 권장 | A path segment, such as /t-shirt/green경로 구간. 예: /t-shirt/green |
| 키=값 쿼리 파라미터 | /t-shirt?color=green | 권장 | A query parameter, such as /t-shirt?color=green Use ?key=value URL parameters rather than ?value, where possible.쿼리 파라미터. 예: /t-shirt?color=green. 가능하면 ?value 대신 ?key=value 형식을 쓴다. |
| 값만 있는 쿼리 파라미터 | /t-shirt?green | 피함 | Use ?key=value URL parameters rather than ?value, where possible.가능하면 ?value 대신 ?key=value 형식의 URL 파라미터를 쓴다. |
| 프래그먼트(#) | /t-shirt#green | 피함 | Google does not use fragment identifiers in indexing.구글은 색인할 때 프래그먼트 식별자(#)를 쓰지 않는다. |
#green 처럼 프래그먼트로 옵션을 바꾸면 구글은 옵션들을 한 페이지로 봅니다. 쿼리 파라미터로 옵션을 구분할 때 캐노니컬은 파라미터를 뺀 URL 입니다(원문: If you use optional query parameters to identify variants, use the URL with the query parameter omitted as the canonical URL.)
목록 페이지의 색·가격 필터 URL 을 크롤링에서 다루는 법은 「URL 필터 파라미터, 쇼핑몰 색인과 차단 판단 기준」 편에 자세히 적었습니다.
발견 02
옵션을 한 페이지에서 고르는지, 페이지를 나누는지가 캐노니컬과 마크업 모양을 정합니다
| 기준 | 단일 페이지 | 멀티 페이지 | 공식 문서 원문 |
|---|---|---|---|
| 옵션을 고르면 | 같은 페이지에서 이미지·가격·재고가 바뀝니다 | 다른 페이지로 이동합니다 | Single page, where all variants are selectable on a single page without page reloads (usually through query parameters) / Multi page, where variants of the same product are accessible on different pages단일 페이지: 페이지를 새로 열지 않고 한 페이지에서 모든 옵션을 고른다(보통 쿼리 파라미터). / 멀티 페이지: 같은 제품의 옵션이 서로 다른 페이지에 있다. |
| 옵션 URL 예 | /coat?size=small&color=green | /coat/lightblue?size=small | To help Google understand your product variants, make sure that each variant can be identified by a separate URL.구글이 제품 옵션을 이해하도록 옵션마다 따로 식별되는 URL 을 둔다. |
| 캐노니컬 | ProductGroup 전체에 하나(옵션을 고르지 않은 URL) | ProductGroup 을 대표하는 캐노니컬은 없음 | For single-page sites, there must be only one distinct canonical URL for the overall ProductGroup that all variants belong to. ProductGroup doesn't have a canonical URL, as there isn't a single URL representing the ProductGroup.단일 페이지 사이트는 모든 옵션이 속한 ProductGroup 전체에 캐노니컬 URL 이 하나뿐이어야 한다. 멀티 페이지에서는 ProductGroup 을 대표하는 URL 이 하나가 아니므로 캐노니컬 URL 이 없다. |
| ProductGroup 의 url 속성 | 넣습니다 | 넣지 않음 | For single-page websites only: The URL (without variant selectors) where the ProductGroup property is located, if applicable. Don't use this property for multi-page websites.단일 페이지 사이트 전용: ProductGroup 이 있는 URL(옵션 선택자 없이). 멀티 페이지 사이트에는 쓰지 않는다. |
| ProductGroup 정의 | 한 번 | 페이지마다 전체를 반복하고, 다른 페이지 옵션은 url 만 적습니다 | This also means that the full ProductGroup definition needs to be repeated on each of the variant pages. The ProductGroup on each page has a full definition of the variants on the page as well as a variant with only the url property to link to the variants on the other page, which helps Google find your variants.옵션 페이지마다 ProductGroup 정의 전체를 반복해야 한다. 각 페이지의 ProductGroup 은 그 페이지 옵션의 전체 정의와, 다른 페이지 옵션으로 이어지는 url 만 있는 옵션을 담는다. 이것이 구글이 옵션을 찾는 데 도움이 된다. |
| 맞는 상품(편집 판단) | 색·사이즈만 다르고 상세 설명이 같은 상품 | 색마다 사진·설명이 달라 페이지를 따로 둘 만한 상품 | 없음 |
| 구조 | 페이지 | 옵션 URL |
|---|---|---|
| 단일 페이지 | /coat | /coat?size=small&color=green · /coat?size=small&color=lightblue · /coat?size=large&color=lightblue |
| 멀티 페이지 | 페이지 1 | /coat/lightblue?size=small · /coat/lightblue?size=large |
| 멀티 페이지 | 페이지 2 | /coat/green?size=small |
마크업은 두 방식 모두 옵션을 ProductGroup 아래에 hasVariant 로 넣거나, 따로 적고 연결할 수 있습니다. 구글은 아래에 넣는 방식을 권했습니다.
원문은 "We recommend this approach because it's the most compact and natural representation of a product group and its variants."입니다. 따로 적는 방식은 제작 도구가 만들기 쉬울 때 고릅니다.
발견 03
ProductGroup 은 name 하나만 필수이고, 옵션 속성은 variesBy 로 6가지 중에서 고릅니다
To help Google better understand which products are variations of the same parent product, use the ProductGroup class with associated properties variesBy, hasVariant, and productGroupID to group such variants together, in addition to Product structured data.
어떤 제품들이 같은 부모 제품의 옵션인지 구글이 알도록, Product 구조화 데이터에 더해 ProductGroup 과 variesBy·hasVariant·productGroupID 로 옵션을 묶는다.
| 속성 | 필수 여부 | 공식 문서 원문 |
|---|---|---|
| name | 필수 | 문서의 Required properties 표에 name 하나만 있습니다 |
| productGroupID | 권장(그룹 ID 는 이것이나 inProductGroupWithID 로 반드시 지정) | The identifier of the product group (also known as the parent sku). Each product group must have a unique ID in its corresponding structured data markup, specified with the inProductGroupWithID property in variant Product properties or the productGroupID property in the ProductGroup property.제품 그룹의 식별자(부모 sku). 제품 그룹마다 고유 ID 가 있어야 하며, 옵션 Product 의 inProductGroupWithID 나 ProductGroup 의 productGroupID 로 적는다. |
| variesBy | 권장 | Aspects by which the variants in the ProductGroup vary, (for example, size or color), if applicable.ProductGroup 안의 옵션이 서로 달라지는 기준(예: 사이즈·색상). |
| hasVariant | 권장 | A nested Product property that is one of the variants of the ProductGroup property, if applicable.ProductGroup 의 옵션 하나인, 안에 넣은 Product. |
| url | 권장(단일 페이지만) | For single-page websites only: The URL (without variant selectors) where the ProductGroup property is located, if applicable. Don't use this property for multi-page websites.단일 페이지 사이트 전용: ProductGroup 이 있는 URL(옵션 선택자 없이). 멀티 페이지 사이트에는 쓰지 않는다. |
| brand | 권장 | Brand information about the ProductGroup (same across all variants), if applicable.ProductGroup 의 브랜드 정보(모든 옵션에 같음). |
브랜드·리뷰처럼 모든 옵션에 같은 정보는 ProductGroup 에 한 번만 적습니다. 색·사이즈와 옵션별 가격·재고는 각 Product 와 그 Offer 에 적습니다.
가격·재고 같은 Product 속성 자체는 「JSON-LD Product 스키마」 편에 자세히 적었습니다.
발견 04
설계를 마치면 구글 기술 가이드라인 7가지로 확인합니다
| 확인할 것 | 공식 문서 원문 |
|---|---|
| 옵션마다 sku 나 gtin 같은 고유 ID | Each variant must have a unique ID in its corresponding structured data markup (for example, using the sku or gtin properties).옵션마다 구조화 데이터에 고유 ID(예: sku·gtin)가 있어야 한다. |
| 상품 그룹마다 고유 ID | Each product group must have a unique ID in its corresponding structured data markup, specified with the inProductGroupWithID property in variant Product properties or the productGroupID property in the ProductGroup property.제품 그룹마다 고유 ID 가 있어야 하며, inProductGroupWithID 나 productGroupID 로 적는다. |
| ProductGroup 과 함께 Product 필수 속성 | Be sure to add Product structured data in addition to the product variant properties, following the list of required properties for merchant listings (or product snippets).옵션 속성에 더해 판매자 등록정보(또는 제품 스니펫)의 필수 속성을 갖춘 Product 구조화 데이터를 넣는다. |
| 옵션 URL 로 열면 그 옵션의 이미지·가격·재고와 장바구니 | Preselecting each variant includes showing the right image, price, and availability, as well as allowing the user to add the variant to the cart.옵션을 미리 선택한다는 것은 맞는 이미지·가격·재고를 보여 주고 그 옵션을 장바구니에 담을 수 있게 하는 것까지 포함한다. |
| 멀티 페이지는 페이지마다 완결된 마크업 | For multi-page sites, each page must have full and self-contained markup for the entities defined on that page (meaning, off-page entities shouldn't be necessary to fully understand the markup on the page itself).멀티 페이지 사이트는 페이지마다 그 페이지에 정의한 항목의 마크업이 완결되어야 한다(다른 페이지를 보지 않아도 이해되게). |
| Product 마크업은 첫 HTML 에 | If you're a merchant optimizing for all types of shopping results, we recommend putting Product structured data in the initial HTML for best results.모든 쇼핑 검색 결과를 겨냥하는 판매자라면 Product 구조화 데이터를 첫 HTML 에 넣기를 권한다. |
| 내부 링크·사이트맵·캐노니컬에 같은 URL | Use the same URL in internal links, sitemap files, and <link rel="canonical"> tags.내부 링크·사이트맵 파일·<link rel="canonical"> 태그에 같은 URL 을 쓴다. |
발견 05
B2B·B2C·B2G 는 옵션 구조를 고르는 이유가 다릅니다
예시 ① 산업용 공구 유통사의 제품 카탈로그(B2B)
같은 공구가 규격별로 수십 가지이고, 구매 담당자는 규격 품번으로 검색합니다. 규격마다 gtin 이나 sku 를 고유 ID 로 넣는 것이 출발점입니다.
규격만 다르고 설명이 같으므로 단일 페이지로 두고, 규격을 미리 고른 URL 을 쿼리 파라미터로 엽니다.
예시 ② 색마다 화보가 다른 의류 쇼핑몰(B2C)
색마다 착용 사진과 소재 설명이 따로 있어 멀티 페이지로 나눕니다. 페이지마다 ProductGroup 전체를 넣고, 다른 색 페이지는 hasVariant 안에 url 만 적어 잇습니다.
사이즈는 각 색 페이지 안의 ?size= 로 고르게 하고, 사이트맵과 내부 링크에는 같은 URL 을 씁니다.
예시 ③ 공공 조달에 납품하는 사무용 가구 카탈로그(B2G)
발주 담당자가 색상별 사양서를 내려받으므로 옵션 URL 로 열었을 때 그 색의 이미지와 사양이 바로 보여야 합니다.
온라인 판매가 없어 가격을 적지 않는다면 판매자 등록정보 대신 제품 스니펫의 필수 속성을 따릅니다.
그럼 옵션 상품은 어떤 순서로 설계하나요?
- 옵션을 한 페이지에서 고를지, 색마다 페이지를 나눌지 위 선택 기준 표로 정합니다.
- 옵션 URL 은 프래그먼트(#) 대신 경로나 키=값 쿼리 파라미터로 정합니다.
- 단일 페이지면 옵션을 고르지 않은 URL 을 캐노니컬로 두고 ProductGroup 의 url 에 적습니다.
- ProductGroup 에 name·productGroupID·variesBy 를 적고, 옵션마다 Product 에 sku·gtin 과 가격·재고를 넣습니다.
- 옵션 URL 몇 개를 리치 결과 테스트와 URL 검사 도구로 열어 옵션이 맞게 미리 선택되는지 확인합니다.
조사 방법
- Google Search Central 「Product variant structured data (ProductGroup, Product)」 (문서 수정일 2026-09-08) · 최종 확인일 2026-10-25 · https://developers.google.com/search/docs/appearance/structured-data/product-variants
- Google Search Central 「Designing a URL structure for ecommerce websites」 (문서 수정일 2025-12-10) · 최종 확인일 2026-10-25 · https://developers.google.com/search/docs/specialty/ecommerce/designing-a-url-structure-for-ecommerce-sites
- Google Search Central 「Merchant listing (Product, Offer) structured data」 (문서 수정일 2026-09-08) · 최종 확인일 2026-10-25 · https://developers.google.com/search/docs/appearance/structured-data/merchant-listing
- Google Search Central 「Product snippet (Product, Review, Offer) structured data」 (문서 수정일 2026-09-08) · 최종 확인일 2026-10-25 · https://developers.google.com/search/docs/appearance/structured-data/product-snippet
- 선택 기준 6줄은 구글 문서가 단일 페이지와 멀티 페이지로 나눠 적은 내용을 기준별로 묶은 것이고, 「맞는 상품」 줄과 묶는 방식은 편집 판단입니다.
- 예시 ①②③은 이해를 돕기 위해 만든 가상 상황이며, 실제 기업·기관 사례가 아닙니다.
- 원문은 영어판(hl=en)이고, 도구 이름은 같은 문서 한국어판(hl=ko) 표기를 따랐습니다. 한국어판은 variant 를 「제품 옵션」으로 옮겼습니다.