Skip to content

ProductGroup 을 OG 다음 폴백으로 인식해 파서 커버리지 확장 #53

Description

@m-a-king

구조화 파서는 JSON-LD 최상위가 Product 일 때만 상품 노드를 찾는다. Shopify 계열은 최상위가 ProductGroup 이고 실제 ProducthasVariant 배열 안에 있는데, 노드 수집 재귀가 @graphitemListElement[].item 만 따라가고 hasVariant 는 보지 않아 전부 미스한다.

지금은 #51og:price 폴백 덕분에 OG 경로가 이 사이트들을 건진다. 하지만 OG 조차 실패하는 사이트(구형 가격 태그도 없고 ProductGroup 만 있는 곳)는 여전히 LLM 으로 간다.

무엇을

ProductGroup 인식을 OG 다음 세 번째 폴백으로 추가한다.

1. JSON-LD 의 Product        성공하면 반환
2. OpenGraph                 성공하면 반환
3. JSON-LD 의 ProductGroup   성공하면 반환   <- 추가

왜 첫 자리가 아니라 OG 다음인가

ProductGroup 을 JSON-LD Product 와 같은 첫 자리에 넣으면 기존 사이트의 상품명이 회귀한다. JSON-LD 가 성공하면 OG 를 아예 보지 않기 때문이다.

postarchivefaction.com 실측 (2026-08-25, extractor 와 같은 Accept-Language 로 fetch):

f26-cut-out-boots-black f26-cut-out-boots-beige
og:title Cut Out Boots (2026) - Black Cut Out Boots (2026) - Beige
ProductGroup.name 컷아웃 부츠 컷아웃 부츠
hasVariant 사이즈 5개 (컷아웃 부츠 - 250 등) 사이즈 5개
  • 색상은 JSON-LD 어디에도 없다. 그룹·변형 어느 노드에도 color 키가 없고, 색상은 Shopify 상품 자체가 갈려 URL 로만 구분된다(-black / -beige). 변형은 색상이 아니라 신발 사이즈다.
  • 그래서 ProductGroup 이 먼저 이기면 두 색상이 모두 컷아웃 부츠 가 된다. 변형까지 재귀해 첫 Product 를 잡으면 두 색상이 모두 컷아웃 부츠 - 250 이 되어 신발 사이즈가 상품명에 박힌다.
  • 토너먼트는 항목을 이름으로 구분한다. 같은 상품의 두 색상이 한 토너먼트에 올라오면(1350 에 실제로 그렇다) 투표 화면에서 구분이 사라진다.

OG 다음에 두면 OG 가 성공하는 사이트의 이름은 그대로 두고, OG 조차 실패하는 사이트만 건진다. 회귀 없이 커버리지만 는다.

구현 시 정할 것

ProductGroupoffers 가 없는 경우가 있다. PAF 가 그렇고, 가격이 변형 안에만 있다.

ProductGroup  name: "컷아웃 부츠"          offers 없음
└─ hasVariant[0]  name: "컷아웃 부츠 - 250"   offers.price: 800000 KRW

이름은 그룹의 name, 가격은 첫 변형의 offers 로 조합해야 한다. 그룹에 offers 가 있으면 그쪽을 먼저 본다.

범위 밖

상품명을 한글(그룹명)로 바꾸는 것은 하지 않는다. 색상 구분이 사라지기 때문이다. 한글 표기가 필요해지면 이름 정책을 별도로 판단한다.


관련: #51 (og:price 폴백), PR #52

Metadata

Metadata

Assignees

Labels

fix외부 가시적 결함 수정

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions