모든 커머스 진단에서 발견하는 JSON-LD 버그 10가지 (그리고 그 비용)
PDP 4만 5천 페이지 규모 카탈로그에서 조용히 실패하는 필드 단위 JSON-LD 버그들. 각 버그는 그것이 죽이는 리치 결과, 당신을 떨어뜨리는 AI 엔진, 그리고 클라이언트에 모델링한 매출 영향과 매핑되어 있어요.
올해 진단한 커머스 사이트가 충분히 쌓이고 나니 같은 JSON-LD 버그 10개를 거듭 보게 됐어요. 스키마 검증기는 초록불입니다. Rich Results Test는 자격 있다고 합니다. 그런데 Product 리치 결과는 Google Shopping에 나타나지 않고, 브랜드가 차지해야 할 쿼리에서 ChatGPT는 경쟁사를 인용하고, 팀은 어떤 수정이 바늘을 움직이는지 알 수 없습니다.
이게 그 카탈로그입니다. 각 버그는 실패 모드, 깨뜨리는 엔진, 그리고 PDP 45,000개 카탈로그에 객단가 $80, 베이스라인 전환율 2.1%를 가정해 추정한 대략적인 매출 밴드를 포함합니다. 숫자는 예시이지 약속이 아니에요. 핵심은 수치가 아니라 그 수학입니다.
1. Organization @id가 페이지마다 흔들린다
가장 흔한 버그. CMS가 모든 템플릿에서 Organization JSON-LD 블록을 발행하지만 @id는 매번 페이지 URL로 설정됩니다. 각 블록이 내부적으로 일관되니 검증기는 통과해요. AI 엔진은 같은 이름의 5만 개 별도 조직을 봅니다. 브랜드 엔티티 머지가 실패합니다. 인용이 무너져요.
해법: Organization을 https://yoursite.com/#organization 같은 단일 안정 @id에 고정하세요. 모든 곳에서 그걸 참조하세요.
매출 밴드: 높음. 해소될 때까지 다섯 엔진 전체에서 AI 인용 점유율이 30~60% 떨어집니다. (각 엔진이 @id를 어떻게 다르게 다루는지는 AI 답변 엔진은 당신의 @graph를 실제로 어떻게 해상하는가에 정리해 뒀어요.)
2. Product 엔티티가 Brand를 @id가 아닌 중첩 객체로 참조한다
{
"@type": "Product",
"name": "Acme Widget",
"brand": { "@type": "Brand", "name": "Acme" }
}
괜찮아 보입니다. 검증도 통과해요. ChatGPT의 파서는 모든 PDP의 모든 Product를 우연히 같은 이름을 공유하는 다른 Brand 엔티티에 속한 것으로 다룹니다. 4만 5천 카탈로그 전체에 걸쳐 4만 5천 개의 Brand 엔티티가 생겨요. 지식 그래프가 파편화됩니다.
해법: @graph에서 Brand를 안정적인 @id를 가진 최상위 엔티티로 끌어올리고 모든 Product에서 참조하세요.
{ "@type": "Brand", "@id": "https://yoursite.com/#brand", "name": "Acme" }
{ "@type": "Product", "name": "Acme Widget", "brand": { "@id": "https://yoursite.com/#brand" } }
매출 밴드: 중상. 당신이 명백한 답이어야 할 롱테일 브랜드+상품 쿼리에 영향을 줘요.
3. offers.priceValidUntil 누락
구글은 오래된 Offer 리치 결과를 만료시킵니다. priceValidUntil이 없으면 가격이 변하지 않았어도 90일 뒤 쇼핑에서 리치 결과가 조용히 사라져요. 대부분의 팀은 구글이 여전히 렌더링한다고 가정합니다.
해법: priceValidUntil을 1년 뒤 날짜로 발행하고 페이지 렌더링마다 갱신하세요. 구현 비용은 저렴하고 효과는 즉각적이에요.
매출 밴드: 중. 카테고리 단위 쿼리에서 리치 결과가 차별점이었던 경우의 순수 CTR 손실.
4. AggregateRating의 reviewCount가 0 또는 1
구글은 별점을 렌더링하려면 최소 3개의 리뷰를 요구합니다. 그 미만은 단순 비표시가 아니라, 페이지의 더 넓은 신뢰 시그널에 영향을 줄 수 있는 리치 결과 자격 위반이에요. reviewCount: 1로 AggregateRating을 발행하는 사이트는 아예 발행하지 않는 사이트보다 명백히 더 손해를 봅니다.
해법: AggregateRating 출력을 서버 사이드의 reviewCount >= 3 검사 뒤에 게이팅하세요.
매출 밴드: 단건은 낮음, 합산은 높음. 리뷰 1~2개짜리 PDP의 롱테일이 카탈로그 전체에서 조용히 리치 결과를 잃고 있어요.
5. 404 또는 리다이렉트되는 이미지 URL
구글은 JSON-LD 이미지를 페치합니다. 404, 리다이렉트, 또는 이미지가 아닌 콘텐츠를 반환하면, 전체 Product 리치 결과가 억제돼요. 흔한 원인: 스키마 제너레이터가 더는 사용되지 않는 CDN 경로를 끌어다 쓰거나, 이미지는 삭제됐는데 JSON-LD가 재생성되지 않았거나.
해법: 스키마 발행 시점에 이미지 URL을 검증하세요. RankLabs는 이걸 페이지가 아닌 템플릿 단위 하드 에러로 플래그해서, 리포트가 PDP 12,000개가 아닌 제너레이터 함수를 가리키게 합니다.
매출 밴드: 영향받는 템플릿에서 높음. 발견되면 카탈로그의 20~40%를 자주 때립니다.
6. SKU와 gtin13이 변형 간에 누락 또는 중복
구글 Merchant Center는 gtin13으로 중복 제거합니다. 변형이 실수로 GTIN을 공유하면, 한 변형만 색인됩니다. GTIN이 아예 없으면 AI 쇼핑 엔진(ChatGPT 플러그인, Perplexity Shopping)이 가격 비교 결과에서 재고를 매칭할 수 없어요.
해법: 데이터베이스 레이어에서 GTIN 고유성을 강제하고 설정된 경우에만 발행하세요. sku는 변형별 안정 식별자로 발행하세요.
매출 밴드: 멀티 변형 카탈로그에서 높음. 의류, 뷰티, 홈 카테고리가 가장 크게 맞습니다.
7. BreadcrumbList 항목이 일관되지 않은 URL을 참조한다
브레드크럼 절반은 https://yoursite.com/category를 사용하고 나머지 절반은 https://yoursite.com/category/를 사용합니다. 구글의 브레드크럼 머지가 실패해요. 검색 결과의 파란색 내비게이션 브레드크럼이 모든 게 기술적으로 검증을 통과해도 사라집니다.
해법: 정규 URL만 발행하세요. 트레일링 슬래시 정책을 @id 생성자에서 강제하세요.
매출 밴드: 단건은 낮지만, 카테고리 트리 전반에서 브레드크럼이 사라지는 게 측정 가능한 CTR 손실로 누적됩니다.
8. 하이드레이션 후 클라이언트 사이드로 주입되는 JSON-LD
스키마가 초기 HTML 응답이 아니라 렌더링된 DOM에만 존재합니다. 대부분의 AI 엔진 페처(ChatGPT, ClaudeBot, PerplexityBot)는 자바스크립트를 실행하지 않아요. 스키마를 전혀 못 봅니다. 검증기는 렌더링된 DOM에서 돌아가니 팀은 괜찮다고 생각해요.
해법: 초기 HTML 응답에서 JSON-LD를 서버 사이드로 발행하세요. 태그 매니저 템플릿과 React-전용 스키마 컴포넌트가 단골 범인입니다.
매출 밴드: 치명적. 이게 고쳐질 때까지 AI 엔진이 당신의 페이지를 0건 인용해요. 협업 3건 중 1건꼴로 발견합니다. 잘 설계된 스키마의 모니터링 없는 반감기는 60~90일이라, CI 게이트가 협상 불가인 이유예요. (스키마는 망가진다. 내가 측정한 반감기는 이렇다.)
9. itemReviewed @id 참조가 없는 Review 엔티티
각 Review 블록의 itemReviewed가 페이지 그래프의 정규 Product 엔티티로 가는 @id 참조 대신 중첩된 Product 객체로 설정되어 있어요. 결과: 리뷰 시그널이 구글이 기대하는 방식대로 Product에 합산되지 않고, AggregateRating이 잘못된 샘플로 만들어져요.
해법: 모든 Review의 itemReviewed는 { "@id": "/products/123#product" }이지, 절대 중첩 객체가 아니에요.
매출 밴드: 중. 강한 리뷰 프로그램을 가진 PDP의 리치 결과 자격에 영향을 줍니다.
10. position 없는 카테고리 페이지의 ItemList
카테고리 페이지가 각 ListItem에 position 번호 없이 ItemList를 발행합니다. 구글이 캐러셀 리치 결과를 구성할 수 없어요. 수정은 아이템당 한 줄이지만, 대부분의 ORM 기반 스키마 제너레이터가 position을 잊기 때문에 버그가 사방에 있어요.
해법: 1-인덱스 position과 함께 아이템을 열거하세요.
매출 밴드: 중. ItemList 캐러셀은 갈수록 Google AI Overviews가 카테고리 단위 답변을 표면화하는 방식이 되고 있어요.
이 리스트로 무엇을 할 것인가
커머스 사이트를 운영한다면 스키마 크롤러를 상위 10개 템플릿에 돌리고 이 10개 버그 각각을 점검하세요. 대부분의 팀이 최소 4개를 발견합니다. 버그당 수정은 작아요. 누적 비용은 그렇지 않아요.
이걸 제가 대신 해주길 원한다면, Audit이 그 협업입니다. RankLabs가 이 10가지 점검에 더해 스키마 그래프, 브레드크럼 체인, AI 엔진 에뮬레이션, 크롤링 레이어 전반의 또 다른 40가지 점검을 돌리고, 수정 항목별 매출 영향을 모델링한 뒤 90일 우선순위 로드맵을 출시합니다. Sprint가 그 로드맵을 CI 게이트와 함께 실행하며, 수정 사항이 계속 배포된 상태로 유지되게 만들어요.