무료 도구 · 제품 스키마 생성기
제품 스키마 생성기
상품 하나를 입력하면 Product와 Offer JSON-LD를 만들고, 판매자 등록정보의 규칙 — 0보다 큰 가격, 통화 코드, 지나지 않은 가격 기한 — 을 입력하는 동안 검사합니다. 같은 값을 담은 상품 정보 블록도 함께 나옵니다. 원화는 12000처럼 소수점도 쉼표도 없이 씁니다.
다른 언어:English繁體中文日本語한국어EspañolFrançaisDeutschPortuguês (Brasil)
필수입니다. 같은 사진을 1x1, 4x3, 16x9 여러 비율로 주는 편이 좋다고 구글이 권합니다.
브랜드 이름은 하나만 씁니다.
숫자만 8·12·13·14자리. 국내에서 발급받은 GTIN-13은 880으로 시작합니다. URL 형식은 받지 않습니다.
숫자만 씁니다. 12,000원이나 ₩12,000은 틀린 값입니다 — 취향이 아니라 schema.org의 규칙입니다. 원화에는 소수점 자리가 없습니다.
이미 지난 날짜가 남아 있으면 등록정보 자체가 표시되지 않을 수 있습니다.
Organization 아래에 한 번 마크업한 배송 정책의 URL입니다. 구글은 Offer마다 사본을 넣는 것보다 이쪽을 권합니다.
내 사이트에서 구매자에게 직접 받은 평점만 넣습니다. 오픈마켓이나 스마트스토어의 평점을 옮겨 오면 안 됩니다.
비워 두면 구글은 5점 만점으로 봅니다.
모두 이 페이지 안에서 처리됩니다. 제품명, 가격, 이미지 URL은 브라우저 밖으로 나가지 않습니다.
출처: 구글 검색 센터 — 구조화된 판매자 등록정보 데이터(0보다 큰 가격, priceValidUntil, 배송 지역을 지원하는 국가), 구조화된 제품 데이터 소개(판매자 등록정보와 제품 스니펫), 판매자 센터 — 지원되는 언어 및 통화(한국어, KRW, 쇼핑 탭), ISO 4217 통화 코드 목록(KRW 보조 단위 0), GS1 Korea — GTIN 안내(국가코드 880), 국가법령정보센터 — 가격표시제 실시요령(판매가격의 정의, 온라인 단위가격), 네이버 서치어드바이저 — 평점(AggregateRating). 모두 2026년 9월 26일에 원문을 확인했습니다.
제품 스키마를 만드는 방법
필수 속성은 제품에 셋, 판매 조건(Offer)에 둘뿐입니다. 대신 등록정보가 표시될지를 가르는 규칙이 몇 가지 있습니다. 생성기는 입력하는 동안 그 규칙을 하나씩 검사하고, 같은 값으로 표시용 블록을 씁니다.
- 제품명과 이미지를 넣습니다. name과 image는 판매자 등록정보의 필수 속성입니다. 같은 사진을 여러 비율로 주면 더 좋고, 모든 URL은 크롤링과 색인이 가능해야 합니다.
- 판매 조건을 채웁니다. 0보다 큰 가격과 세 글자 통화 코드, 원화라면 12000과 KRW입니다. 이 두 값이 있어야 구글이 그 상품을 판매 중인 상품으로 다룰 수 있습니다.
- 재고 상태와 가격 기한을 정합니다. availability와 itemCondition은 구글이 지원하는 짧은 이름(InStock, NewCondition)으로 나갑니다. priceValidUntil은 지난 날짜를 남겨 두느니 비워 두는 편이 낫습니다.
- 정책은 복사하지 말고 가리킵니다. 배송·반품 정책은 Organization 아래에 한 번 마크업하고, 여기서는 @id로 그 노드를 참조합니다. 구글은 Offer마다 반복하는 것보다 전역 정책을 권합니다.
- 두 결과물을 붙여넣습니다. JSON-LD는 상품 상세 페이지에, 표시용 블록은 방문자가 읽는 자리에 넣습니다. 블록에는 마크업이 선언한 가격, 재고, 코드가 그대로 들어 있습니다. 마크업이 어차피 지켜야 하는 규칙입니다.
필수 속성은 제품에 셋, 판매 조건(Offer)에 둘
제품 스키마 생성기는 상품 정보를 Product와 Offer 유형의 JSON-LD, 즉 구글이 가격·재고·제품 식별자를 읽어 가는 구조화된 데이터로 바꿔 주는 도구입니다. 구글 검색 센터의 한국어 문서는 이 마크업을 두 갈래로 나눕니다. 방문자가 그 페이지에서 바로 살 수 있으면 판매자 등록정보, 살 수 없는 리뷰나 비교 페이지라면 제품 스니펫입니다. 자사몰의 상품 상세 페이지는 앞쪽이고, 이 생성기가 검사하는 규칙도 판매자 등록정보 기준입니다. (구글의 판매자 등록정보 문서는 Offer를 '혜택'으로 옮겨 적습니다.)
| 수준 | 필수 | 빠지면 |
|---|---|---|
| Product | name, image, offers | 판매자 등록정보가 되지 않습니다. offers는 Offer여야 하고, AggregateOffer는 제품 스니펫에서만 받습니다. 판매자 등록정보는 페이지 주인이 그 상품의 판매자라는 전제이기 때문입니다. |
| Offer | price(또는 priceSpecification.price), priceCurrency | 등록할 판매 조건이 없습니다. price가 있으면 priceCurrency가 필수이고, 판매자 등록정보는 여기에 더해 가격이 0보다 커야 합니다. |
나머지 — brand, sku, gtin, description, availability, itemCondition, priceValidUntil, aggregateRating — 는 권장 속성입니다. 권장이라고 장식은 아닙니다. 식별자가 있어야 다른 사이트에 올라온 같은 상품과 내 페이지가 이어집니다. 다만 열네 칸을 다 채우기 전에는 아무것도 내보내지 않는 생성기는 구글의 규칙이 아니라 자기 양식을 강요하는 셈입니다.
원화 가격: 소수점 없는 통화, 쉼표 없는 숫자
가격은 상품 마크업이 소리 없이 망가지는 자리입니다. JSON-LD는 검증을 통과하는데 등록정보는 끝내 나타나지 않습니다. 한국 쇼핑몰에서 되풀이되는 실수는 대개 아래 네 가지 중 하나입니다.
- 화면 표기를 그대로 옮기지 마세요. schema.org의 price 사용 가이드라인은 소수점에 점을 쓰고, 쉼표를 자릿수 구분에 쓰지 말고, 통화는 모호한 기호 대신
priceCurrency에 넣으라고 합니다.12,000원과₩12,000은 둘 다 틀렸고,12000과KRW가 맞습니다. 이 생성기는 숫자와 점 이외의 글자가 들어 있으면 오류로 멈춥니다. - 원화에는 소수점 자리가 없습니다. ISO 4217 목록(유지관리기관 SIX, 2026-09-17 발행본)에서 KRW의 보조 단위 자릿수는 0입니다. 구글 예시의
39.99를 흉내 내12000.00으로 쓸 이유가 없습니다. 이 생성기는 입력한 문자열을 바꾸지 않고 내보내므로, 적은 모양이 곧 결과입니다. - 0원은 가격이 아닙니다. 구글 문서의 표현으로, 제품 스니펫과 달리 판매자 등록정보 환경에서는 가격이 0보다 커야 합니다. '가격 문의' 상품을 0으로 적어 두면 그 상품은 자격을 잃습니다.
- 지난 날짜는 날짜가 없는 것보다 나쁩니다.
priceValidUntil이 지난 날짜를 가리키면 등록정보가 표시되지 않을 수 있습니다. 행사 때 한 번 넣고 잊어버리기 쉬운 값이라, 이 생성기는 오늘 날짜와 비교해 경고가 아닌 오류로 표시합니다.
할인가는 정가를 덮어쓰지 않습니다. 지금 받는 가격을 price에 두고, 원래 가격을 priceType: StrikethroughPrice인 UnitPriceSpecification으로 덧붙입니다. 현재 할인가에 priceType을 붙이지 말라는 것이 구글 문서의 지시입니다. 산업통상자원부 「가격표시제 실시요령」이 판매가격을 '판매업자가 일반 소비자에게 판매하는 상품의 실제가격'으로 정의하는 것과 같은 방향입니다. 마크업의 price는 지금 결제 화면에서 내는 금액이어야 합니다.
배송·반품 정책은 Organization에 한 번 — 제주·도서산간은 마크업으로 나눌 수 없습니다
이 주제의 조언에서 필수처럼 인용되는 속성이 둘 있습니다. shippingDetails와 hasMerchantReturnPolicy입니다. 구글의 판매자 등록정보 문서에서 둘은 Offer의 권장 속성이고, 문서는 한 걸음 더 나아가 Organization 마크업 아래에 비즈니스의 전역 배송·반품 정책을 두는 것이 좋다고 말합니다. 일부 제품만 전역 정책과 다를 때, 또는 표준 정책이 아예 없을 때에만 Offer 아래에 쓰라는 것입니다.
그래서 대부분의 쇼핑몰에 맞는 모양은 이렇습니다. 정책은 Organization에 한 번 마크업하고, 상품마다 식별자로만 가리킵니다. shippingDetails.hasShippingService에는 @id만, hasMerchantReturnPolicy에도 @id만 넣습니다. 이 양식의 두 칸이 만드는 것이 정확히 그 모양입니다. 수천 개 상품 페이지마다 정책 전문을 복사해 넣는 것은 피해야 할 일이지 해야 할 일이 아닙니다.
한국 쇼핑몰이라면 하나 더 알아 둘 것이 있습니다. 배송지를 지역별로 나누는 DefinedRegion에서 구글 검색은 현재 addressRegion을 미국·오스트레일리아·일본에서만, postalCode를 오스트레일리아·캐나다·미국에서만 지원합니다(2026-09-26 한국어·영어 문서에서 같은 문장 확인). 즉 제주·도서산간 추가 배송비를 지역이나 우편번호로 나눠 마크업할 방법이 지금은 없습니다. 배송지는 addressCountry: KR 전체 하나로 두고, 추가 배송비는 상품 페이지의 배송 안내에 분명히 적어 두는 것이 정직한 처리입니다.
배송비 값에도 가격과 같은 규칙이 붙습니다. 문자열로 줄 때 통화 기호, 천 단위 구분 기호, 공백을 넣지 않고, 무료 배송은 0으로 씁니다. 그리고 배송비의 통화는 판매하는 제품의 통화와 같아야 합니다. 원화로 파는 상품의 배송비를 달러로 적을 수는 없습니다.
GTIN 880, 단위가격, 그리고 채널마다 다른 경로
- 바코드 번호가 GTIN입니다. GS1 Korea(대한상공회의소 유통물류진흥원)는 유통표준코드(GTIN)를 8·12·13·14자리 숫자 체계로 설명하고, 소비자에게 파는 소매 상품에는 13자리 GTIN-13을 씁니다. 대한민국에 배정된 국가코드는 880인데, GS1 Korea는 국가코드가 원산지를 뜻하지 않는다고 따로 적어 둡니다. 구글은 GTIN을 숫자 형식으로만 받고 URL 형식은 지원하지 않습니다. 이 생성기는 자릿수가 8·12·13·14인지까지만 확인하며 체크디지트는 계산하지 않습니다.
- 단위가격이 온라인으로 넘어왔습니다. 「가격표시제 실시요령」(산업통상자원부고시 제2025-51호)은 연간 거래금액이 10조원을 넘는 '대규모 온라인쇼핑몰'을 통해 표시대상 품목을 파는 판매자에게 단위가격 표시 의무를 두었고, 이 조항은 고시 후 1년이 지난 2026년 4월부터 시행됩니다. 규모로 보아 자사몰 대부분은 대상이 아니지만, 같은 상품을 그런 몰에도 올린다면 그쪽 판매 화면에는 '100g당 가격' 같은 표시가 붙습니다. 구글 마크업에서 단위가격은
UnitPriceSpecification의referenceQuantity로 표현합니다. 이 생성기는 단위가격을 만들지 않으니, 필요한 상품이라면 구글 문서의 단가 예시를 따라 직접 덧붙이세요. - 구글 쇼핑 쪽 경로. 판매자 센터 도움말은 쇼핑 광고와 무료 등록정보의 지원 언어에 한국어를, 대상 국가 표에 대한민국과 대한민국 원(KRW)을 올려 두었고, 대한민국은 사용자가 쇼핑 탭을 쓸 수 있는 국가로 표시돼 있습니다. 구글 문서는 페이지의 구조화된 데이터와 판매자 센터 피드를 둘 다 제공하면 실험적인 환경까지 쓸 수 있는 자격이 극대화되고, 구글이 데이터를 정확하게 이해하고 확인하는 데 도움이 된다고 말합니다.
- 네이버 쪽 경로. 네이버 서치어드바이저의 구조화된 데이터 가이드 목록(2026-09-26 확인)에는 Product 항목이 따로 없습니다. 네이버가 문서화한 것은 평점(AggregateRating)과 리뷰(Review)이고, 두 가이드의 예제가 그 값을 Product 아래에 넣는 모양입니다. 가격·재고 규칙은 구글 기준으로 맞추고, 네이버를 위해서는 평점과 리뷰를 가이드대로 넣으면 됩니다. 마켓플레이스의 상품 페이지는 플랫폼이 만드는 페이지이므로, 이 마크업이 들어갈 자리는 자사몰입니다.
별점: 누구의 평점을 넣을 수 있나
내가 파는 상품에 aggregateRating을 넣는 것은 허용됩니다. 구매자가 내 사이트에 남긴 평점을 보여 주는 것은 평범한 일이고, 구글이 문서화한 자체 리뷰 제한은 LocalBusiness와 Organization 페이지에 관한 것이지 상품에 관한 것이 아닙니다. 허용되지 않는 것은 그 밖의 경우입니다.
- 다른 웹사이트의 리뷰나 평점을 집계하지 않습니다. 오픈마켓 상품 페이지의 평균 4.9를 자사몰로 옮겨 마크업하는 것이 정확히 이 경우입니다. 숫자가 사실이어도 위반입니다.
- 허위 리뷰나 공개되지 않은 대가성 리뷰를 넣지 않습니다. 적립금, 할인, 쿠폰, 무료 제품을 받고 쓴 후기라면 그 사실이 명확하고 눈에 띄게 공개돼 있어야 합니다.
- 평점 집계에는
ratingCount나reviewCount중 하나가 반드시 있어야 합니다. 네이버 평점 가이드도 같은 요구를 하고, 둘 다 있으면ratingCount를 먼저 표시한다고 적습니다. - 척도는 따로 말하지 않으면 5점입니다.
bestRating을 빼면 5점 만점, 최저 1점으로 읽힙니다. 10점 만점의 9.2를bestRating없이 넣으면 별 9.2개짜리 상품이 됩니다. 이 생성기는 척도를 넘는 평균을 오류로 멈춰 세웁니다.
리뷰 규칙 전체 — 업체가 스스로에 대해 모은 후기가 별점 자격을 잃는 규칙과 공정거래위원회의 추천·보증 심사지침까지 — 는 리뷰 스키마 생성기에서 다룹니다. 상품 페이지가 매장 주소나 영업시간도 담고 있다면 그것은 별도의 노드이니 로컬 비즈니스 스키마 생성기를 참고하세요.
자주 묻는 질문
제품 스키마 생성기는 무엇을 만들어 주나요?
제품 스키마 생성기는 상품 정보를 Product와 Offer 유형의 JSON-LD, 즉 구글이 가격·재고·제품 식별자를 읽어 가는 구조화된 데이터로 바꿔 주는 도구입니다. 이 생성기는 입력하는 동안 판매자 등록정보의 규칙을 검사하고, 같은 값으로 페이지에 보일 상품 정보 블록도 함께 만듭니다.
Product 구조화된 데이터에 꼭 들어가야 하는 속성은 무엇인가요?
제품에는 name, image, offers가, 판매 조건(Offer)에는 price와 priceCurrency가 필수입니다. 판매자 등록정보라면 가격이 0보다 커야 하고 offers는 AggregateOffer가 아닌 Offer여야 합니다. 판매자 등록정보는 페이지 주인이 그 상품의 판매자라는 전제이기 때문입니다.
원화 가격은 어떻게 써야 하나요?
숫자만 씁니다. 12,000원짜리 상품이라면 price는 12000, priceCurrency는 KRW입니다. 원 기호나 천 단위 쉼표를 넣으면 안 되고, 원화는 ISO 4217에서 보조 단위 자릿수가 0인 통화라 소수점을 붙일 이유도 없습니다.
제주·도서산간 추가 배송비도 마크업할 수 있나요?
지금은 지역별로 나눌 수 없습니다. 구글 검색은 배송 지역의 addressRegion을 미국·오스트레일리아·일본에서만, postalCode를 오스트레일리아·캐나다·미국에서만 지원합니다. 한국 쇼핑몰은 addressCountry KR 전체를 배송지로 두고, 추가 배송비는 상품 페이지의 배송 안내에 적어 두는 것이 맞습니다.
네이버에서도 제품 스키마가 적용되나요?
네이버 서치어드바이저의 구조화된 데이터 가이드에는 Product 항목이 따로 없습니다. 네이버가 문서화한 것은 평점(AggregateRating)과 리뷰(Review) 마크업이고, 그 예제가 값을 Product 안에 넣는 모양입니다. 네이버는 마크업을 정상적으로 했더라도 검색결과 반영을 보장하지 않는다고 명시합니다.
마크업에 오류가 없는데 제품 리치 결과가 보이지 않는 이유는 무엇인가요?
먼저 확인할 것은 이미 지난 priceValidUntil 날짜입니다. 구글은 이 날짜가 지나면 등록정보가 표시되지 않을 수 있다고 적고 있습니다. 0원 가격, 빠진 priceCurrency, 크롤링이 막힌 이미지 URL도 JSON-LD는 문법상 유효한 채로 같은 결과를 냅니다.
정가와 할인가는 어떻게 표시하나요?
지금 적용되는 할인가를 price에 두고, 원래 가격을 priceType이 StrikethroughPrice인 UnitPriceSpecification으로 덧붙입니다. 현재 할인가 쪽에 priceType을 붙이면 안 된다는 것이 구글 문서의 지시이고, 정가를 표시할 때에는 현재 할인가도 함께 제공해야 합니다.
상품 페이지가 만 개라면, 구글은 그중 몇 개를 알고 있을까요?
자기 도메인 점검은 무료입니다. 페이지마다 현재 HTTP 상태와 구글 색인 여부, 직전 기간 대비 노출수와 순위, 유입 경로별 트래픽(AI 엔진은 따로 집계)을 돌려줍니다. 에이전트 안에서 명령 하나면 됩니다.
$ npm i -g @clize/clize && clize install $ clize seo check --domain yourshop.co.kr[ Clize의 Agent SEO → ]