Skip to content

JSON-LD 의 ProductGroup 을 인식해 상품명을 상품명 필드에서 가져온다 - #54

Merged
m-a-king merged 1 commit into
mainfrom
fix/53-productgroup-json-ld
Aug 26, 2026
Merged

JSON-LD 의 ProductGroup 을 인식해 상품명을 상품명 필드에서 가져온다#54
m-a-king merged 1 commit into
mainfrom
fix/53-productgroup-json-ld

Conversation

@m-a-king

Copy link
Copy Markdown
Collaborator

Situation

  • 어떤 상품 페이지는 구조화 데이터가 멀쩡히 있는데도 파서가 전부 놓쳐 매 요청이 LLM 으로 갔다. JSON-LD 최상위가 ProductGroup 이라 상품 노드 수집에 안 걸리고, 실제 상품은 hasVariant 배열 안에 있는데 재귀가 그 키를 보지 않는다. OG 경로도 표준 가격 태그가 없어 함께 미스한다.
  • LLM 은 비결정적이라 같은 사이트의 상품명이 요청마다 갈렸다. prod 실측(토너먼트 1350, postarchivefaction.com 20건)은 전부 source=SERVER_LLM 이었고 이름이 세 갈래로 나왔다.
관측된 이름 예시 문제
og:title 을 그대로 베낀 영어 Stream Pants (Archive) - Charcoal 원본과 일치하지만 우연히 그렇게 나온 것
한글 상품명에 LLM 이 번역한 색상을 붙인 것 러너 자켓 (Archive) 차콜 차콜·스노우 블랙 은 페이지에 없는 값 (본문 검색 0건)
본문 DOM 의 개행이 이름에 박힌 것 러너 자켓 (Archive)\n \n 차콜 마크업 공백이 상품명으로 유입

Task

  • 이 사이트들을 LLM 이 아니라 파서로 처리한다.
  • 어느 소스에서 상품명을 가져올 것인가가 실제 결정 포인트였다. 페이지 제목(og:title)인가, 사이트가 상품명 필드에 선언한 이름(JSON-LD name)인가.

Action

접근 전환

처음에는 OG 경로에 og:price 폴백을 넣어 푸는 방향으로 갔다 (이슈 #51, PR #52). 가격 한 필드만 채우면 OG 경로가 완결되므로 변경이 가장 작았다.

전환한 이유는 그 경로가 상품명을 og:title 에서 가져오기 때문이다. og:title 은 페이지 제목이라 사이트명·프로모션 문구가 섞이는 자리다. 이 사이트의 상품명 필드에는 컷아웃 부츠 가 선언돼 있고, 그쪽이 정확하다. 지금 영어 제목이 나오는 것은 파서가 ProductGroup 을 못 읽어 OG 로 흘러내린 결과지 의도한 선택이 아니었다.

og:price 폴백 (PR #52, 폐기) ProductGroup 인식 (이 PR)
상품명 출처 og:title (페이지 제목) JSON-LD name (상품명 필드)
결과 이름 Cut Out Boots (2026) - Black 컷아웃 부츠
대상 사이트 커버 된다 된다

두 안 모두 대상 사이트를 파서로 내리지만, JSON-LD 가 우선순위상 먼저이므로 이 PR 이 들어가면 og:price 폴백은 실행되지 않는 경로가 된다. 그래서 #51 과 PR #52 는 닫았다.

구현

  • ProductGroup 을 상품 노드로 인정한다. 타입 판정에 ProductGroup 을 더했다.
  • 변형은 상품 노드로 수집하지 않는다. hasVariant 를 재귀 대상에 넣지 않았다. 변형 이름에는 사이즈가 붙어 있어(컷아웃 부츠 - 250) 상품명으로 쓸 수 없다.
  • 그룹에 없는 가격·이미지만 첫 변형에서 보강한다. 실측한 페이지의 ProductGroup 에는 offersimage 도 없고 둘 다 변형 안에만 있었다. 그룹이 자기 offers 를 갖고 있으면 그쪽을 먼저 쓴다.
ProductGroup   name: "컷아웃 부츠"              <- 이름
                                                  offers 없음, image 없음
└─ hasVariant[0]   name: "컷아웃 부츠 - 250"    <- 수집하지 않는다
                   image: ".../BK1.jpg"          <- 이미지
                   offers.price: 800000 KRW      <- 가격

실측

postarchivefaction.com, 2026-08-26, extractor 와 같은 Accept-Language 로 fetch. 상품 90건 중 10건 표본:

확인 항목 결과
JSON-LD 최상위 타입 10/10 전부 ProductGroup
변형의 offers.price 10/10 존재 (변형 1개짜리 상품 포함)
표준 product:price:amount 10/10 없음

Result

  • 검정과 베이지가 모두 컷아웃 부츠 로 같은 이름이 된다. 색상은 JSON-LD 어디에도 없고(그룹·변형 어느 노드에도 color 키가 없다) Shopify 상품 자체가 갈려 URL 로만 구분된다. 상품명 필드가 그렇게 선언돼 있으므로 정확한 값이다. 토너먼트에서 같은 이름의 항목을 어떻게 구분해 보여줄지는 상품명 출처와 별개 문제로 남는다.
  • 검증은 단위 테스트 3건(그룹명 채택과 변형 보강, 그룹 offers 우선, 변형 부재 시 사유 분류)에 더해 저장해둔 실제 페이지 두 장을 파서에 통과시켜 전후를 확인했다. 수정 전에는 MISSING_FIELD(즉 LLM 으로 감), 수정 후에는 컷아웃 부츠 / 800,000 KRW / https 이미지가 나온다. 단위 테스트 3건 모두 수정을 임시로 되돌리면 FAIL 하는 것까지 확인했다.
  • 실제 페이지로 돌린 검증 코드는 커밋하지 않았다. 로컬에 받아둔 HTML 에 의존해 CI 에서 재현되지 않기 때문이다.

연관 이슈

- Shopify 계열은 최상위가 ProductGroup 이고 실제 Product 는 hasVariant 안에 있어 노드 수집이 전부 미스했다. OG 경로도 표준 가격 태그가 없어 함께 미스해 매 요청이 LLM 으로 갔고, 비결정적이라 같은 사이트의 상품명이 요청마다 갈렸다
- 처음엔 OG 경로에 og:price 폴백을 넣어 푸는 방향으로 갔으나(#51, PR #52) 그 경로는 상품명을 og:title 즉 페이지 제목에서 가져온다. 사이트가 상품명 필드에 선언한 이름은 "컷아웃 부츠" 이고 그쪽이 정확해, JSON-LD 를 고치는 방향으로 전환하고 폴백은 폐기했다
- 변형을 상품 노드로 수집하지 않고 그룹 노드만 수집한다. 변형 이름에는 사이즈가 붙어 있어(컷아웃 부츠 - 250) 상품명으로 쓸 수 없다. 대신 그룹에 없는 가격·이미지만 첫 변형에서 보강한다 - 실측한 페이지의 ProductGroup 에는 offers 도 image 도 없었다
- 저장해둔 실제 페이지로 전후를 확인했다. 수정 전 MISSING_FIELD, 수정 후 컷아웃 부츠 / 800,000 KRW / https 이미지
@m-a-king m-a-king added the fix 외부 가시적 결함 수정 label Aug 26, 2026
@m-a-king m-a-king self-assigned this Aug 26, 2026
@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ad7854e3-fa80-45fd-9d3b-866a2adbf877


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@m-a-king
m-a-king merged commit df9260c into main Aug 26, 2026
2 checks passed
@m-a-king
m-a-king deleted the fix/53-productgroup-json-ld branch August 26, 2026 05:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fix 외부 가시적 결함 수정

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ProductGroup 을 JSON-LD 경로에서 인식해 상품명을 정확하게

1 participant