이커머스(쇼핑몰) SEO 전문 가이드. 상품·카테고리·검색·페이지네이션·재고·faceted navigation 처리 패턴. Product Schema(JSON-LD), Merchant listings, 필터 URL 중복 콘텐츠, 재고 변경 대응을 포함한다. <example>사용자: "이커머스 상품 페이지 SEO 어떻게 잡지?"</example> <example>사용자: "필터/색상/사이즈 조합으로 URL이 수만 개 생기는데 어떻게 처리?"</example> <example>사용자: "재고 없는 상품 페이지를 삭제해야 하나?"</example>
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
이커머스(쇼핑몰) SEO 전문 가이드. 상품·카테고리·검색·페이지네이션·재고·faceted navigation 처리 패턴. Product Schema(JSON-LD), Merchant listings, 필터 URL 중복 콘텐츠, 재고 변경 대응을 포함한다. <example>사용자: "이커머스 상품 페이지 SEO 어떻게 잡지?"</example> <example>사용자: "필터/색상/사이즈 조합으로 URL이 수만 개 생기는데 어떻게 처리?"</example> <example>사용자: "재고 없는 상품 페이지를 삭제해야 하나?"</example>
배송 정책이 상품별로 다르지 않다면, Google은 Organization 마크업의 전역 배송 정책(ShippingService + shippingConditions)이나 Merchant Center 설정으로 제공하는 쪽을 권장한다. Offer 레벨 속성은 조직 레벨 속성의 부분집합이다.
shippingDetails는 배열로 여러 개 넣어 지역·요금제별로 나눌 수 있다.
주의: Search Central의 merchant listing 문서는 shippingRate·shippingDestination 둘 다 required로 표기하지만, Merchant Center의 "지원되는 구조화 데이터 속성" 표는 shippingDestination.addressCountry만 required로 표기한다. 두 표기가 어긋나므로 둘 다 채우는 것이 안전하다.
required는 applicableCountry다.returnPolicyCountry(상품을 실제로 반송해 보내는 국가)는 recommended이며, 조직(Organization) 레벨 반품 정책 마크업에서 지원된다.
Offer 레벨에서 Google이 지원하는 반품 속성은 조직 레벨의 부분집합이며, 여기에는 returnPolicyCountry가 포함되지 않는다. 판매국과 반송 도착국이 다른 크로스보더 판매라면 조직 레벨 마크업에 returnPolicyCountry를 추가한다.
주의: 2025-03 시점 다수의 3rd-party 기사가 "returnPolicyCountry가 required가 됐다"고 보도했으나, 실제 문서 변경은 Google이 예제 JSON-LD에 returnPolicyCountry를 추가한 것이고 required 목록은 applicableCountry + returnPolicyCategory(또는 merchantReturnLink)로 유지되고 있다. 현행 공식 문서 기준으로 작성할 것.
주의: 미검증 — "2025-03부터 모든 판매자에게 반품 정책 제공이 필수화됐다"는 취지의 공식 발표는 확인되지 않았다. 확인 가능한 것은 Merchant Center 가이드라인의 상시 요구사항("반품 정책 정보를 상품 데이터에 추가하고 웹사이트에서 쉽게 찾을 수 있게 할 것. 반품·환불을 제공하지 않더라도 그 사실을 명시할 것")뿐이다.
Organization ↔ Product @id 참조 (@graph)
전역 정책(반품·배송)은 Organization/OnlineStore에 한 번 정의하고, 상품 페이지에서는 @id로 참조해 중복을 없앤다. (패턴 상세 → frontend/schema-org-patterns)
단, robots.txt로 차단된 URL은 PageRank가 흐르지 않는다. SEO 가치 있는 필터 조합은 별도 처리.
색인은 막되 내부 링크 가치는 유지하고 싶을 때:
<metaname="robots"content="noindex, follow">
크롤링은 허용 → 내부 링크 PageRank 흐름 유지.
단, 크롤링 예산은 소모된다.
URL Fragment 사용 (대안):
#color=red 같은 fragment는 Google이 크롤링·색인하지 않는다.
필터 URL 폭발 자체를 방지하지만, 공유·북마크 시 필터 상태 유지가 필요하면 적합.
Google이 제시한 추가 베스트 프랙티스
항목
권장
파라미터 구분자
표준 & 사용. ,·;·[] 같은 비표준 구분자 금지
필터 순서
URL 경로로 인코딩 시 항상 동일한 순서 유지 (/products/fish/green/tiny)
빈 결과
결과 없는 필터 조합은 HTTP 404 반환 (리다이렉트 금지)
중복 필터
?color=red&color=red 같은 중복 발생하지 않게
SEO 가치 있는 필터 조합
"나이키 운동화 270mm" 같이 검색 수요가 있는 필터 조합은 별도 랜딩 페이지로 만들어 색인 허용:
URL: /shoes/nike/270 (쿼리 파라미터 대신 path)
고유 H1, 고유 description
self-referencing canonical
필터 UI에서도 해당 조합 선택 시 이 URL로 이동
6. 내부 검색 결과 페이지
/search?q=나이키, /search?q=운동화 같은 내부 검색 결과는 기본적으로 noindex 권장 (Google 공식).
이유: 검색 쿼리는 무한히 생성 가능 → 색인 비대화 + 카테고리 페이지와의 키워드 경쟁.
<metaname="robots"content="noindex, follow">
noindex, follow로 설정해 검색 결과 페이지에서 상품 페이지로의 링크 가치는 유지.
단, 트래픽이 높은 자체 검색 키워드(예: 매주 1,000건 검색)는 별도 랜딩 페이지로 전환 고려.
7. 재고·가격 실시간 변동 대응
변동 항목
Schema 업데이트
추가 작업
가격 변경
offers.price, priceValidUntil
OG 캐시 초기화 (Facebook Sharing Debugger 등)
재고 소진
availability: OutOfStock
재입고 알림 폼 노출, 대체 상품 링크
재입고
availability: InStock
페이지 그대로 유지 (URL 변경 금지)
단종
availability: Discontinued 또는 301
대체 상품으로 301 권장
동적 가격은 서버 렌더링 + Schema에 즉시 반영. CSR로 가격만 나중에 그리지 말 것.
Merchant Center 피드 ↔ 페이지 구조화 데이터 불일치의 현재 지위
3rd-party 요약이 아니라 Merchant Center 공식 도움말 기준으로 정리하면 다음과 같다.
항목
공식 내용
구조화 데이터 자체
Search의 리치 결과와 달리, Merchant Center에서는 랜딩페이지 구조화 데이터가 승인의 필수 조건은 아니다. 구조화 데이터가 없거나 불완전하면 Google이 "advanced data extractors"로 페이지에서 값을 추출한다
자동 항목 업데이트(automatic item updates)
랜딩페이지에서 읽은 값으로 price·sale price·availability·condition 을 자동 보정한다. 이 4개가 자동 업데이트 대상
자동 업데이트를 끄면
"상품이 item-level 비승인 대상이 된다". 추출기가 가격·재고·상태를 판별하지 못하는 경우에도 동일하게 item-level 비승인
피드 ↔ 랜딩페이지 불일치
가격 불일치 시 상품 비승인 + 계정 경고로 이어지며, 재심사에는 대기 기간이 있다. 공식 해결 가이드가 "가격·재고 속성을 랜딩페이지의 구조화 데이터(JSON-LD/Microdata)와 일치시키라"고 명시
자동 업데이트가 커버하지 않는 것
제목·설명·GTIN·배송 속성 등은 자동 보정 대상이 아니므로 피드에서 직접 맞춰야 한다
정리: "불일치 = 즉시 광고 계정 정지"가 아니라, 상품 단위 비승인 + 계정 경고가 기본 제재이며, 자동 항목 업데이트가 완충 장치로 동작한다. 자동 업데이트를 신뢰하지 말고 피드·페이지·구조화 데이터 세 곳의 price/availability를 동일 소스에서 렌더링하는 것이 정답이다.
주의: 구조화 데이터의 값은 "사용자에게 실제로 보이는 값"과 같아야 한다. 할인가가 노출 중이면 구조화 데이터에도 할인가를 넣는다. 회원 등급·지역에 따라 가격이 달라지는 랜딩페이지는 Merchant Center가 매칭에 실패한다.