Panduan ProductGroup Schema
cara gunakan ProductGroup schema untuk group product variants (size, color, material) dengan hasVariant, variesBy, dan productGroupID — plus item_group_id perbedaan dan mengapa Bing tidak mendukung ini.
«ProductGroup schema wraps a set of Product variants — a shirt's sizes and colors — under one parent so Google understands they're options of the same item, not separate products. It's additive: every variant is still a full Product with its own sku/gtin, price, and availability, and ProductGroup ties them together with hasVariant (nested, single-page sites), variesBy (which attributes differ), and productGroupID (the parent sku). The single most common mistake is writing variesBy as plain strings — it must use full schema.org URLs like https://schema.org/color; in my testing the JSON-LD still validates but the grouping doesn't trigger (Google doesn't document that failure mode, so verify it yourself). Two more traps: productGroupID (on-page schema) is not Merchant Center's item_group_id (a product-feed attribute) — separate systems, nothing auto-syncs them, so use matching values deliberately; and Bing doesn't consume ProductGroup markup at all (per Microsoft's Fabrice Canel, Sept 2024, a reported statement, not a Microsoft doc). My rule with all schema holds here: implement it because it earns you a search feature, not because more markup is automatically better — it aids understanding and merchant-listing eligibility, it doesn't make a variant rank.» _(Terjemahan)_ (Ringkasan bahasa Indonesia untuk bidang tldr: teks sumber dipertahankan untuk tinjauan penutur asli.)
TL;DR — ProductGroup schema adalah code itu tells Google “all ini variations — itu small green shirt, itu large blue satu — adalah itu sama product di berbeda options, tidak terpisah products.” (terjemahan) “semua ini variations — kecil green shirt, besar blue satu — adalah sama product di berbeda options, tidak terpisah products.” setiap variation masih mendapatkan -nya own product markup; ProductGroup hanya wraps them together. ini melakukan tidak replace product markup, dan ini melakukan tidak membuat sebuah variant peringkat lebih tinggi — ini helps Google memahami Anda catalog dan dapat membuat Anda listings eligible untuk tampilkan variant info.
Apa ProductGroup schema adalah
jika Anda sell sebuah coat di three colors dan five sizes, itu’s satu coat sold di 15 combinations. untuk sebuah mesin pencari, 15 near-identical product halaman dapat look like 15 unrelated products unless Anda tell ini jika tidak.
ProductGroup schema adalah data terstruktur itu melakukan telling. ini sits di atas Anda individual product listings dan says “ini belong together — mereka itu sama item di berbeda options.” (terjemahan) “ini belong together — mereka’re yang sama item di berbeda options.” Google ditambahkan mendukung untuk ini di February 2024.
Bukti untuk klaim ini Schema.org ProductGroup represents a group of products that vary only in defined characteristics. Cakupan: Schema.org vocabulary; Google adds its own merchant-listing requirements. Tingkat keyakinan: tinggi · Diverifikasi: Schema.org: ProductGroupThink dari ini sebagai sebuah parent folder:
- parent adalah
ProductGroup— “Wool winter coat.” (terjemahan) “Wool winter coat.” - children adalah individual
Productvariants — setiap color/size combo, dengan -nya own price, photo, stock status, dan unique ID.
penting bagian: ini adalah additive, tidak sebuah replacement
ini trips up hampir everyone pertama time. ProductGroup melakukan tidak replace Anda
product markup. setiap variant adalah masih sebuah penuh Product — ini mempertahankan -nya own SKU,
price, image, dan availability. ProductGroup adalah sebuah wrapper itu ties itu Products
together. Anda’re menambahkan markup, tidak swapping ini out.
Apa ini melakukan untuk Anda
Marking up Anda variants ini cara membuat Anda products eligible untuk tampilkan variant informasi di Google’s shopping/merchant listings — “juga muncul di ini colors” (terjemahan) “juga muncul di ini colors” jenis dari display. sebagai dengan semua schema, “eligible” (terjemahan) “eligible” adalah key kata: ini adalah tidak sebuah peringkat boost, dan ini adalah tidak pernah guaranteed. ini helps Google memahami Anda products, yang adalah poin. Bukti untuk klaim ini Google supports ProductGroup with associated variant properties to describe product variants for merchant listings. Cakupan: Google Search product-variant documentation; eligibility is not a ranking promise. Tingkat keyakinan: tinggi · Diverifikasi: Google: Product variants
Dua hal untuk know sebelum Anda go deeper
- Bing tidak baca ProductGroup schema (sebagai dari latest kata dari Microsoft). So ini adalah mainly sebuah Google fitur. Lebih pada itu di Advanced tab.
- ini adalah schema/code side dari variants. Apakah sebuah diberikan variant seharusnya bahkan mendapatkan -nya own halaman di pertama place adalah sebuah terpisah strategy pertanyaan — I cover itu decision (dan platform differences) di product variant SEO guide.
ingin penuh versi — three core properties, penuh schema.org URL aturan untuk
variesBy, bagaimana productGroupID differs dari Merchant Center’s item_group_id, sebuah
menyelesaikan JSON-LD contoh, dan umum mistakes? Switch untuk Advanced tab.
TL;DR —
ProductGroup(Google’s Feb 2024 addition) wraps variantProductobjects di bawah satu parent so Google understands “sama item, berbeda options.” (terjemahan) “sama item, berbeda options.” ini adalah additive — setiap variant mempertahankan penuhProductmarkup (sku/gtin,offers,image,availability). tautan them denganhasVariant(nested, single-halaman situs) atauisVariantOf+inProductGroupWithID(flat, multi-halaman situs); declare varying axes denganvariesBy— yang harus gunakan penuh schema.org URLs (https://schema.org/color), tidak plain strings ( #1 implementation mistake — validates either cara, tetapi grouping diam-diam tidak akan trigger dalam praktik, yang tidak sebuah terdokumentasi Google perilaku); dan share sebuahproductGroupID(plain text parent sku, tidak sebuah URL).productGroupIDadalah tidak Merchant Center’sitem_group_id— terpisah sistem, tidak ada apa pun auto-syncs them, so gunakan matching nilai pada purpose. hanyanameadalah strictly diperlukan. dan Bing tidak consume ProductGroup di semua (Fabrice Canel, Sept 2024). Schema aids understanding dan merchant-listing eligibility — ini tidak sebuah peringkat factor.
Di mana ini sits
ini adalah schema-implementation deep dive — penuh JSON-LD, property-oleh-property
reference, Merchant Center reconciliation, dan troubleshooting. upstream
strategy pertanyaan — seharusnya sebuah diberikan variant mendapatkan -nya own dapat diindeks URL di semua, dan bagaimana
melakukan Shopify/WooCommerce/BigCommerce/Magento differ — adalah -nya own topic (product variant
SEO). ini artikel assumes Anda’ve sudah dibuat itu panggilan dan now perlu markup
right. ini juga sits di bawah lebih luas schema markup dan data terstruktur hubs, dan ini adalah
sebuah sibling dari Product schema (untuk sebuah single, non-varying item, plain Product adalah semua Anda
perlu — ProductGroup adalah untuk sebuah family dari variants).
Mengapa ProductGroup ada
Google’s own framing: “Untuk help Google better understand yang products adalah variations dari itu sama parent product, gunakan itu ProductGroup class dengan associated properties variesBy, hasVariant, dan productGroupID untuk group such variants together.” (terjemahan) “untuk help Google better memahami yang products adalah variations dari yang sama parent product, gunakan ProductGroup class dengan associated properties variesBy, hasVariant, dan productGroupID untuk group such variants together.” motivating categories adalah persis apa Anda’d expect — “apparel, shoes, furniture, electronic devices, dan luggage… sold di berbeda variations (misalnya various sizes, colors, materials, atau patterns).” (terjemahan) “apparel, shoes, furniture, electronic devices, dan luggage… sold di berbeda variations (misalnya various sizes, colors, materials, atau patterns).”
Bukti untuk klaim ini Google documents ProductGroup relationships including variesBy, hasVariant, productGroupID, and inverse variant references. Cakupan: Google Search product-variant requirements; use the pattern matching the site's URL architecture. Tingkat keyakinan: tinggi · Diverifikasi: Google: Product variantspayoff adalah eligibility, tidak peringkat: “Adding ini markup juga membuat Anda products eligible untuk display dengan variant information di merchant listing experiences.” (terjemahan) “menambahkan ini markup juga membuat Anda products eligible untuk display dengan variant informasi di merchant listing experiences.” sama caveat itu applies untuk semua data terstruktur — ini aids understanding dan rich-hasil eligibility, ini tidak move Anda up hasil.
ini adalah additive — ini adalah mental model itu mencegah sebagian besar mistakes
ProductGroup wraps Product; ini tidak replace ini. ProductGroup object
itself tidak offered untuk sale — ini memiliki Tidak single price, karena “itu coat” (terjemahan) “ coat” costs
berbeda amounts depending pada yang variant Anda buy. setiap variant tetap sebuah penuh
Product dengan -nya own sku/gtin, image, offers, dan availability. jika Anda
temukan yourself trying untuk put sebuah single offers/price pada ProductGroup, berhenti —
itu’s tell itu Anda’ve confused wrapper untuk hal menjadi sold.
three core properties
sebuah ProductGroup named Wool winter coat declares productGroupID 44E01 dan variesBy nilai menggunakan penuh schema.org URLs untuk color dan size. ini connects untuk green kecil, green besar, dan blue kecil Product variants. setiap variant mempertahankan sebuah unique SKU, Offer, image, dan availability. connection dapat gunakan hasVariant di sebuah nested model atau isVariantOf di sebuah flat model.
© Patrick Stox LLC · CC BY 4.0 ·
hasVariant (dan isVariantOf)
hasVariant adalah “a nested Product property itu adalah satu dari itu variants dari itu
ProductGroup property… A ProductGroup typically memiliki multiple nested variant Product
properties.” (terjemahan) “sebuah nested Product property itu adalah satu dari variants dari
ProductGroup property… sebuah ProductGroup typically memiliki multiple nested variant Product
properties.” Anda put Anda variant Product objects di dalam group.
inverse juga ada: “a variant Product property dapat reference back untuk its parent ProductGroup menggunakan itu isVariantOf property pada itu Product property.” (terjemahan) “sebuah variant Product property dapat reference back untuk -nya parent ProductGroup menggunakan isVariantOf property pada Product property.” Yang satu Anda gunakan bergantung pada Anda situs’s struktur URL (berikutnya bagian).
variesBy — penuh schema.org URLs, tidak plain strings
«variesBy declares “aspects by which the variants in the ProductGroup vary (for
example, size or color).” The critical detail, verbatim from Google’s properties
table: “Reference these variant-identifying properties through their full Schema.org
URL.”
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian tiga puluh dua, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
itu berarti:
"variesBy": ["https://schema.org/size", "https://schema.org/color"]tidak "variesBy": ["size", "color"]. ini adalah single sebagian besar umum implementation
mistake di ini entire topic. apa terdokumentasi: Google’s property table memerlukan
penuh URL form — tidak ada apa pun lebih spesifik daripada itu. apa tidak terdokumentasi: Google
tidak publish apa happens jika Anda skip ini. di my own testing dan consistent dengan
lainnya practitioners’ reports, JSON-LD masih melewati syntax validation dan tidak ada apa pun
errors out, tetapi enhanced grouping perilaku tidak trigger — treat itu sebagai sebuah strongly
observed pattern, tidak sebuah official Google statement, dan verify ini terhadap Anda own
markup alih-alih taking ini sebagai gospel.
didukung dimensions adalah https://schema.org/color, https://schema.org/size,
https://schema.org/suggestedAge, https://schema.org/suggestedGender,
https://schema.org/material, dan https://schema.org/pattern.
productGroupID — plain text, dan tidak item_group_id
productGroupID adalah “itu identifier dari itu product group (juga known sebagai itu parent
sku). Ini identifier harus menjadi provided untuk itu ProductGroup property atau, alternatively,
menggunakan inProductGroupWithID property untuk variants.” (terjemahan) “ identifier dari product group (juga known sebagai parent
sku). ini identifier harus menjadi disediakan untuk ProductGroup property atau, alternatively,
menggunakan inProductGroupWithID property untuk variants.” ini adalah sebuah plain text identifier
— Google’s own contoh adalah "44E01" — tidak sebuah URL. jangan di atas-generalize
variesBy “penuh schema.org URL” (terjemahan) “penuh schema.org URL” aturan untuk ini field; mereka’re berbeda aturan untuk
berbeda jobs.
Satu hard constraint: “Jika Anda sediakan itu identifier untuk keduanya itu ProductGroup property dan its variant Product properties, they harus match.” (terjemahan) “jika Anda menyediakan identifier untuk keduanya ProductGroup property dan -nya variant Product properties, mereka harus match.” Google’s docs state requirement tetapi jangan document apa happens ketika ini adalah violated. berdasarkan my own testing (tidak sebuah terdokumentasi Google failure mode), sebuah typo atau sebuah template/environment leak itu perubahan nilai pada satu variant halaman drops itu variant out dari group dengan Tidak terlihat error — halaman hanya berhenti menjadi baca sebagai bagian dari family. Treat itu sebagai observed perilaku worth verifying yourself, tidak sebuah official spec.
Dua implementation patterns: nested vs. flat
Anda struktur URL decides yang pattern Anda gunakan.
Single-halaman situs — nested (hasVariant). semua variants adalah selectable pada satu URL
(melalui dropdowns/swatches). “Untuk single-halaman websites hanya: Itu URL (tanpa variant
selectors) di mana itu ProductGroup property adalah located.” (terjemahan) “untuk single-halaman situs web hanya: URL (tanpa variant
selectors) di mana ProductGroup property adalah located.” ada persis satu canonical
URL untuk seluruh group, dan Anda nest setiap variant Product di dalam ProductGroup
melalui hasVariant.
Multi-halaman situs — flat (isVariantOf + inProductGroupWithID). setiap variant memiliki
-nya own dedicated URL. Di sini “ini tidak apply since di sana adalah Tidak single canonical URL
representing itu ProductGroup property.” (terjemahan) “ini tidak apply since tidak ada single canonical URL
representing ProductGroup property.” setiap halaman harus carry penuh, self-berisi
markup untuk entities didefinisikan pada itu halaman — Anda tidak share satu block di seluruh halaman.
setiap variant Product references -nya parent dengan isVariantOf, dan group tautan adalah
carried oleh inProductGroupWithID: “Setiap product group harus memiliki a unique ID di its
corresponding structured data markup, specified dengan itu inProductGroupWithID property.” (terjemahan) “setiap product group harus memiliki sebuah unique ID di -nya
corresponding data terstruktur markup, specified dengan inProductGroupWithID property.”
Either cara, “Setiap variant harus memiliki a unique ID di its corresponding structured data markup (misalnya, menggunakan itu sku atau gtin properties).” (terjemahan) “setiap variant harus memiliki sebuah unique ID di -nya corresponding data terstruktur markup (misalnya, menggunakan sku atau gtin properties).”
«One more requirement people miss on multi-page setups: variants must be reachable by a distinct, preselectable URL. Google: “The site must have the ability to preselect each variant directly with a distinct URL (using URL query parameters), for example https://www.example.com/winter_coat/size=small&color=green.” A variant that only appears after a client-side click, with no URL to point at, can’t be validated or indexed as its own thing. » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian empat puluh lima, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
diperlukan vs. recommended
- diperlukan pada
ProductGroup: hanyaname(e.g.,"Wool winter coat"). - Recommended:
variesBy,hasVariant,productGroupID,brand,description,aggregateRating,review,hasAdultConsideration, dan (single-halaman situs hanya)url.
Technically hanya name adalah diperlukan — tetapi variesBy dan productGroupID adalah
functionally muat-bearing. Skip them dan JSON-LD validates sementara grouping
perilaku Anda wanted tidak pernah menampilkan up. (aggregateRating dan review di sini adalah yang sama
jenis Anda’d gunakan standalone — see AggregateRating dan Review schema deep dives.)
productGroupID vs. Merchant Center’s item_group_id — reconciliation tidak seorang pun menjelaskan
ini adalah confusion poin itu sebagian besar pesaing konten skips entirely, so ini adalah worth menjadi precise.
productGroupIDadalah sebuah schema.org / pada-halaman data terstruktur field. ini feeds pencarian organik’s understanding dari halaman.item_group_idadalah sebuah Google Merchant Center product-feed attribute. Merchant Center: “Gunakan itu item group ID [item_group_id] attribute untuk group product variants di Anda product data.” (terjemahan) “gunakan item group ID [item_group_id] attribute untuk group product variants di Anda product data.” ini feeds Shopping ads dan free listings.
mereka adalah dua terpisah sistem, dan Google melakukan tidak secara otomatis sync them. Best practice — dan ini adalah echoed di seluruh better ketiga-party implementation guides — adalah untuk gunakan sama identifier nilai untuk keduanya, so Anda feed dan Anda markup agree pada yang SKUs belong together. sebuah mismatch tidak niscaya break either sistem outright, tetapi ini menghapus reinforcing sinyal dan dapat produce inconsistent grouping antara Shopping surfaces dan organic rich hasil.
(sebuah footnote pada casing: Merchant Center’s help sometimes menulis productGroupId
lowercase-d di mana Penelusuran Central’s docs gunakan productGroupID. itu’s sebuah cosmetic
inconsistency di Google’s own docs, tidak sebuah mistake pada Anda end — ikuti Penelusuran Central’s
productGroupID di Anda JSON-LD.)
consistency discipline di sini adalah yang sama satu itu governs canonicals dan variant URLs umumnya: Anda sinyal seharusnya agree dengan setiap lainnya, atau Anda’re handing Google sebuah alasan untuk guess.
Bing melakukan tidak mendukung ProductGroup
Di sini’s differentiator sebagian besar guides mendapatkan wrong atau omit: Bing melakukan tidak saat ini
consume schema.org ProductGroup markup. Microsoft’s Fabrice Canel, responding
secara langsung untuk sebuah pertanyaan tentang apakah Bing mendukung schema.org/ProductGroup, mengatakan Bing
melakukan belum mendukung ini, tetapi itu ini adalah “on our radar” (terjemahan) “pada kami radar” dan team adalah “closely
monitoring its adoption.” (terjemahan) “closely
monitoring -nya adoption.” (Reported oleh mesin pencari Roundtable, covering sebuah September
2024 exchange pada X — sebuah sekunder report dari sebuah pertama-party statement, tidak sebuah Microsoft doc,
so treat ini sebagai such.)
Bing’s Webmaster alat structured-data help adalah sebuah generic overview dari didukung formats
dengan Tidak ProductGroup-, variesBy-, atau productGroupID-spesifik konten. Bing’s
Shopping variant grouping berjalan melalui sebuah feed-side itemGroupId field di
Microsoft Advertising — analog dari Google’s item_group_id, tidak pada-halaman schema.
So: implement ProductGroup untuk Google, dan tangani Bing Shopping variants melalui
Microsoft Advertising feed, tidak markup.
sebuah note pada dynamic markup
Google’s own caution: “Menjadi aware itu dynamically-generated markup dapat membuat Shopping
crawls lebih sedikit frequent dan lebih sedikit reliable, yang dapat menjadi an issue untuk fast-mengubah konten
like product availability dan price.” (terjemahan) “menjadi aware itu dynamically-generated markup dapat membuat Shopping
melakukan crawl lebih sedikit frequent dan lebih sedikit reliable, yang dapat menjadi sebuah issue untuk fast-mengubah konten
like product availability dan price.” jika Anda variant offers/availability adalah
JS-injected, weigh itu terhadap server-rendering markup untuk fields itu perubahan
sering.
Validate sebelum Anda ship
- Rich hasil Test — memeriksa eligibility dan surfaces diperlukan-property errors untuk merchant-listing/variant experience.
- Schema Markup Validator (schema.org) — validates ProductGroup/Product jenis themselves, independent dari Google fitur.
- Search Console — merchant-listings/product-snippet enhancement reports tampilkan eligibility dan errors di scale post-deploy; pemeriksaan URL menampilkan bagaimana sebuah spesifik halaman adalah baca.
Remember apa “valid” (terjemahan) “valid” melakukan dan tidak tell Anda: sebuah plain-string variesBy melewati
validation dan, di my testing, masih tidak trigger grouping. Validation catches syntax
dan diperlukan-property gaps, tidak ini jenis dari semantic failure (yang Google tidak
document either cara) — untuk itu, periksa oleh hand itu Anda variesBy nilai adalah penuh
URLs dan Anda productGroupID matches di seluruh group.
untuk di mana ini fits bigger picture, see lebih luas data terstruktur dan schema markup hubs ini artikel lives di bawah.
AI summary
sebuah condensed take pada Advanced versi:
- Apa ini adalah:
ProductGroup(Google, Feb 2024) wraps variantProductobjects di bawah satu parent so Google understands “sama item, berbeda options” (terjemahan) “sama item, berbeda options” alih-alih unrelated products. Eligibility untuk variant display di merchant listings — tidak sebuah peringkat factor. - Additive, tidak sebuah replacement: setiap variant tetap sebuah penuh
Product(sku/gtin,offers,image,availability);ProductGroupadalah wrapper dan tidak sold pada -nya own (Tidak single price pada group). - Three core properties:
hasVariantnests variants (atauisVariantOfpoin back up);variesBylists varying axes dan harus gunakan penuh schema.org URLs (https://schema.org/color, tidak"color") — #1 implementation mistake, dan dalam praktik (tidak sesuatu Google documents) ini validates fine sementara grouping diam-diam tidak trigger;productGroupIDadalah sebuah plain text parent sku (tidak sebuah URL, e.g."44E01"), dan jika set pada keduanya group dan variants nilai harus match — Google documents match aturan tetapi tidak apa happens pada sebuah mismatch. - Dua patterns: nested (
hasVariant, single-halaman situs, satu canonical URL untuk group) vs. flat (isVariantOf+inProductGroupWithID, multi-halaman situs, penuh self-berisi markup per halaman). Variants perlu uniquesku/gtindan sebuah distinct preselectable URL. - diperlukan vs. recommended: hanya
nameadalah diperlukan;variesBy+productGroupIDadalah functionally essential bahkan though technically recommended. productGroupID≠item_group_id: pada-halaman schema (pencarian organik) vs. Merchant Center feed attribute (Shopping/free listings) — terpisah sistem, tidak ada apa pun auto-syncs, gunakan matching nilai pada purpose.- Bing tidak mendukung ProductGroup (Fabrice Canel, Sept 2024, melalui mesin pencari
Roundtable). Bing Shopping variants jalankan melalui Microsoft Advertising’s feed-side
itemGroupId, tidak markup. - Watch dynamic markup (lebih sedikit reliable Shopping melakukan crawl untuk price/availability).
Validate dengan Rich hasil Test + schema.org Validator, tetapi remember plain-string
variesByvalidates dan masih fails.
Dokumentasi resmi
Utama-sumber documentation untuk ProductGroup dan variant markup.
- Product variant data terstruktur (ProductGroup, Product) — single authoritative halaman:
ProductGroup,hasVariant,isVariantOf,variesBy,productGroupID, penuh schema.org URL aturan, diperlukan/recommended properties, dan single-halaman vs. multi-halaman aturan. - menambahkan data terstruktur mendukung untuk Product Variants (Feb 2024 blog) — announcement itu introduced properties.
- Intro untuk Product data terstruktur — umum Product halaman (Product snippets / merchant listings). Note: ini melakukan tidak cover ProductGroup — itu’s terpisah halaman di atas.
- Google Merchant Center — Item group ID [item_group_id] — product-feed attribute untuk grouping variants, dan -nya schema.org cross-references.
Bing / Microsoft
- Bing Webmaster alat — Marking up Anda situs dengan data terstruktur — sebuah generic overview dari didukung formats; Tidak ProductGroup-,
variesBy-, atauproductGroupID-spesifik konten.
schema.org
- schema.org/ProductGroup — vocabulary halaman: authoritative property list dan Product/Hal inheritance (Tidak implementation contoh atau Google-spesifik guidance).
Quotes dari sumber
pada—record statements dari Google (dan reported statements dari Microsoft). Di mana sebuah halaman exposes text, tautan adalah sebuah deep tautan itu jumps untuk quoted passage.
Google docs — purpose dan eligibility
- “To help Google better understand which products are variations of the same parent product, use the ProductGroup class with associated properties variesBy, hasVariant, and productGroupID to group such variants together.” (terjemahan) “untuk help Google better memahami yang products adalah variations dari yang sama parent product, gunakan ProductGroup class dengan associated properties variesBy, hasVariant, dan productGroupID untuk group such variants together.” Jump untuk quote
- “Many types of products such as apparel, shoes, furniture, electronic devices, and luggage are sold in different variations (for example various sizes, colors, materials, or patterns).” (terjemahan) “banyak jenis dari products such sebagai apparel, shoes, furniture, electronic devices, dan luggage adalah sold di berbeda variations (misalnya various sizes, colors, materials, atau patterns).” Jump untuk quote
- “Adding this markup also makes your products eligible for display with variant information in merchant listing experiences.” (terjemahan) “menambahkan ini markup juga membuat Anda products eligible untuk display dengan variant informasi di merchant listing experiences.” Jump untuk quote
Google docs — properties
«- variesBy: “Aspects by which the variants in the ProductGroup vary… Reference these variant-identifying properties through their full Schema.org URL.”
Jump to quote
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh empat, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«- hasVariant: “A nested Product property that is one of the variants of the ProductGroup property, if applicable. A ProductGroup typically has multiple nested variant Product properties.”
Jump to quote
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh empat, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«- isVariantOf: “Alternatively, a variant Product property can reference back to its parent ProductGroup using the isVariantOf property on the Product property.”
Jump to quote
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh empat, bagian kecil tiga: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«- productGroupID: “The identifier of the product group (also known as the parent sku). This identifier must be provided for the ProductGroup property or, alternatively, using inProductGroupWithID property for variants.”
Jump to quote
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh empat, bagian kecil empat: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«- On matching IDs: “If you provide the identifier for both the ProductGroup property and its variant Product properties, they must match.”
Jump to quote
» (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh empat, bagian kecil lima: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
Google docs — unique IDs dan URLs
«- “Each variant must have a unique ID in its corresponding structured data markup (for example, using the sku or gtin properties).” Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh enam, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- “The site must have the ability to preselect each variant directly with a distinct URL (using URL query parameters), for example https://www.example.com/winter_coat/size=small&color=green.” Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh enam, bagian kecil dua: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.) «- On dynamic markup: “Be aware that dynamically-generated markup can make Shopping crawls less frequent and less reliable, which can be an issue for fast-changing content like product availability and price.” Jump to quote » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh enam, bagian kecil tiga: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
«Google Merchant Center — item_group_id » (Terjemahan) (Ringkasan bahasa Indonesia untuk bagian delapan puluh tujuh, bagian kecil satu: teks sumber dipertahankan agar dapat diperiksa dalam tinjauan penutur asli.)
- “Use the item group ID [item_group_id] attribute to group product variants in your product data.” (terjemahan) “gunakan item group ID [item_group_id] attribute untuk group product variants di Anda product data.” Jump untuk quote
John Mueller, Google (melalui mesin pencari Roundtable’s verbatim reproduction dari his Feb 2024 LinkedIn post)
- “Product variants di ecommerce adalah complicated - apa lakukan Anda lakukan dengan t-shirts di berbeda colors? Folks di sini Google worked hard untuk come up dengan structured data markup & dukung untuk it… Itu perubahan adalah juga langsung di itu Rich Hasil Testing tool dan di itu Search Console reports untuk ini types.” (terjemahan) “Product variants di ecommerce adalah complicated - apa melakukan Anda melakukan dengan t-shirts di berbeda colors? Folks di sini Google worked hard untuk come up dengan data terstruktur markup & mendukung untuk ini… perubahan adalah juga langsung di Rich hasil Testing alat dan di Search Console reports untuk ini jenis.” Baca coverage
Fabrice Canel, Microsoft Bing (reported, tidak sebuah pertama-party doc)
- Responding untuk apakah Bing mendukung
schema.org/ProductGroup, Canel mengatakan Bing melakukan belum mendukung ini, tetapi itu ini adalah “on our radar” (terjemahan) “pada kami radar” dan team adalah “closely monitoring its adoption.” (terjemahan) “closely monitoring -nya adoption.” Coverage Relayed melalui mesin pencari Roundtable’s coverage dari sebuah September 2024 exchange pada X; sebuah sekunder report dari sebuah pertama-party statement, tidak sebuah Microsoft documentation halaman.
sebuah menyelesaikan ProductGroup JSON-LD contoh
Google’s own doc contoh adalah intentionally minimal — satu variant, Tidak offers. Di sini’s sebuah
fuller, single-halaman (nested hasVariant) versi dengan dua variants, offers, gtin,
image, dan brand — shape Anda’d sebenarnya ship. Note variesBy menggunakan penuh
schema.org URLs, dan productGroupID adalah sebuah plain string.
{
"@context": "https://schema.org/",
"@type": "ProductGroup",
"name": "Wool winter coat",
"description": "A warm wool winter coat, available in several sizes and colors.",
"url": "https://www.example.com/winter-coat",
"brand": {
"@type": "Brand",
"name": "ExampleCo"
},
"productGroupID": "44E01",
"variesBy": [
"https://schema.org/size",
"https://schema.org/color"
],
"hasVariant": [
{
"@type": "Product",
"sku": "44E01-S-GRN",
"gtin": "0123456789012",
"name": "Wool winter coat, small, green",
"image": "https://www.example.com/photos/44E01-S-GRN.jpg",
"size": "small",
"color": "Green",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/winter-coat?size=small&color=green",
"price": "119.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"sku": "44E01-L-BLU",
"gtin": "0123456789029",
"name": "Wool winter coat, large, blue",
"image": "https://www.example.com/photos/44E01-L-BLU.jpg",
"size": "large",
"color": "Blue",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/winter-coat?size=large&color=blue",
"price": "119.99",
"priceCurrency": "USD",
"availability": "https://schema.org/OutOfStock"
}
}
]
}Hal untuk notice:
ProductGroupmemiliki Tidakoffers/pricedari -nya own — price lives pada setiap variant’sOffer, karena group tidak sebuah single sellable hal.- setiap variant carries sebuah unique
sku(dan di sini sebuahgtin), -nya ownimage, -nya ownavailability, dansize/colornilai itu match apavariesBydeclared. - Availability adalah per-variant — kecil green coat adalah
InStock, besar blue satuOutOfStock. itu’s correct cara untuk tangani sebuah partially-stocked group (see out-dari-stock products guide untuk cara sinyal ini tanpa dropping variant).
multi-halaman (flat) variant dari yang sama setup
jika setiap variant lives pada -nya own URL, Anda tidak nest — setiap halaman carries -nya own
self-berisi Product itu poin back up dengan isVariantOf dan shared group ID
melalui inProductGroupWithID:
{
"@context": "https://schema.org/",
"@type": "Product",
"sku": "44E01-S-GRN",
"gtin": "0123456789012",
"name": "Wool winter coat, small, green",
"image": "https://www.example.com/photos/44E01-S-GRN.jpg",
"size": "small",
"color": "Green",
"inProductGroupWithID": "44E01",
"isVariantOf": {
"@type": "ProductGroup",
"productGroupID": "44E01",
"variesBy": [
"https://schema.org/size",
"https://schema.org/color"
]
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/winter-coat/small-green",
"price": "119.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}setiap variant halaman repeats ini pattern dengan -nya own IDs dan offer, dan yang sama
productGroupID ("44E01") ties them together. pertahankan itu ID identical di seluruh semua
variant halaman dan aligned dengan Anda Merchant Center item_group_id.
seharusnya Anda gunakan ProductGroup, dan yang pattern?
Walk tree untuk land pada right markup decision untuk Anda setup.
ProductGroup atau plain Product — dan nested atau flat?
umum ProductGroup mistakes
traps, dan apa sebenarnya benar:
| Mistake | Reality |
|---|---|
Treating ProductGroup sebagai sebuah replacement untuk Product | ini adalah sebuah wrapper/parent. setiap variant adalah masih sebuah penuh Product dengan -nya own sku/gtin, price, image, dan availability. ProductGroup itself tidak offered untuk sale — jangan put sebuah single offers/price pada ini. |
Writing variesBy sebagai plain strings ("color", "size") | ini harus gunakan penuh schema.org URLs (https://schema.org/color). Plain strings lulus JSON-LD validation, dan dalam praktik grouping tidak trigger (Google tidak document itu spesifik failure, so verify ini pada Anda own markup) — single sebagian besar umum mistake di ini topic. |
Assuming productGroupID dan Merchant Center’s item_group_id adalah yang sama auto-synced field | mereka’re terpisah sistem — pada-halaman schema (pencarian organik) vs. product feed (Shopping/free listings). Tidak ada apa pun syncs them; gunakan matching nilai dengan sengaja. |
membuat productGroupID sebuah URL | ini adalah sebuah plain text identifier (parent sku), e.g. "44E01". jangan di atas-apply variesBy penuh-URL aturan di sini — berbeda field, berbeda aturan. |
Shrugging off sebuah productGroupID typo pada satu variant halaman | di multi-halaman setups, sebuah mismatched ID drops itu variant out dari group dengan Tidak error thrown, di my testing — Google documents match requirement tetapi tidak mismatch perilaku, so ini adalah observed, tidak officially specified. |
| Marking up variants itu memiliki Tidak distinct URL | Variants harus menjadi preselectable melalui sebuah distinct URL (kueri params adalah fine). JS-hanya state perubahan dengan Tidak URL dapat’t menjadi validated atau terindeks sebagai variants. |
| Assuming Bing membaca ProductGroup like Google melakukan | sebagai dari Sept 2024 (Fabrice Canel, melalui mesin pencari Roundtable), Bing melakukan tidak consume ProductGroup markup. Bing Shopping variants jalankan melalui Microsoft Advertising’s feed-side itemGroupId, tidak pada-halaman schema. |
| Expecting ProductGroup untuk meningkatkan rankings | ini aids understanding dan merchant-listing eligibility — ini adalah tidak sebuah peringkat factor. “Eligible” (terjemahan) “Eligible” adalah tidak “guaranteed,” (terjemahan) “guaranteed,” dan ini adalah certainly tidak sebuah boost. |
| Trusting “valid” (terjemahan) “valid” untuk berarti “berfungsi” (terjemahan) “berfungsi” | Validation catches syntax dan diperlukan-property gaps, tidak silent semantic failures. Plain-string variesBy dan mismatched IDs keduanya validate dan masih jangan berfungsi — periksa them oleh hand. |
ProductGroup implementation checklist
berfungsi melalui ini di order — setiap item maps untuk sebuah spesifik gotcha covered di atas.
- Decide Anda pattern pertama. semua variants selectable pada satu URL → nested
(
hasVariant). setiap variant pada -nya own URL → flat (isVariantOf+inProductGroupWithID). jangan mix patterns pada yang sama group. - pertahankan setiap variant sebuah penuh
Product. setiap satu masih memiliki -nya ownsku/gtin,image,offers, danavailability—ProductGrouptidak pernah carries sebuah singlepricedari -nya own. - Tulis
variesBysebagai penuh schema.org URLs, e.g.https://schema.org/colordanhttps://schema.org/size— tidak"color"/"size". ini adalah #1 implementation mistake; ini validates either cara, dan grouping diam-diam tidak trigger tanpa URL form di my testing (tidak sesuatu Google documents), so periksa ini oleh eye. - Set
productGroupIDsebagai sebuah plain-text identifier (parent sku, e.g."44E01") — tidak pernah sebuah URL. berbeda aturan darivariesBy; jangan conflate them. - Match
productGroupID(atauinProductGroupWithID) di seluruh setiap variant. Google documents match requirement tetapi tidak apa happens jika ini adalah violated; di my testing, sebuah typo pada satu variant halaman drops ini dari group dengan Tidak error. - Memberikan setiap variant sebuah unique ID melalui
skuataugtin. - Konfirmasi setiap variant memiliki sebuah distinct, preselectable URL (kueri params adalah
fine, e.g.
?size=small&color=green). sebuah JS-hanya state perubahan dengan Tidak URL dapat’t menjadi validated atau terindeks sebagai -nya own variant. - Align
productGroupIDdengan Merchant Center’sitem_group_id. mereka’re terpisah sistem dan tidak ada apa pun auto-syncs them — gunakan yang sama nilai pada purpose. - server-render fast-mengubah fields (
price,availability) di mana mungkin — Google warns dynamically-generated markup dapat membuat Shopping melakukan crawl lebih sedikit frequent dan reliable. - Validate, lalu verify oleh hand. Jalankan Rich hasil Test dan
schema.org Validator — lalu manually re-periksa
variesByURLs danproductGroupIDmatching, since keduanya lulus validation bahkan ketika rusak. - jika Anda juga target Bing, jangan rely pada ProductGroup — ini tidak consumed
di semua (per Microsoft’s Fabrice Canel, Sept 2024). Tangani Bing Shopping
variants melalui Microsoft Advertising’s feed-side
itemGroupIdalih-alih.
ProductGroup quick-reference
productGroupID vs. item_group_id vs. inProductGroupWithID
| Field | Lives di | Format | Feeds |
|---|---|---|---|
productGroupID | pada-halaman JSON-LD, pada ProductGroup (atau pada sebuah variant Product melalui isVariantOf) | Plain text (e.g. "44E01") | pencarian organik’s understanding dari halaman |
inProductGroupWithID | pada-halaman JSON-LD, pada sebuah variant Product (multi-halaman/flat pattern) | Plain text, harus match group’s productGroupID | sama sebagai di atas — flat-pattern tautan back untuk group |
item_group_id | Google Merchant Center product feed | Plain text | Shopping ads dan free listings |
Tidak ada apa pun auto-syncs ini di seluruh sistem — gunakan sama nilai di semua three so organic dan Shopping agree pada yang SKUs belong together.
Nested vs. flat pattern
Nested (hasVariant) | Flat (isVariantOf + inProductGroupWithID) | |
|---|---|---|
| Ketika untuk gunakan | Single-halaman situs — semua variants selectable pada satu URL | Multi-halaman situs — setiap variant memiliki -nya own URL |
| Canonical URL untuk group | Satu (url pada ProductGroup) | None — Tidak single URL mewakili group |
| Di mana group properties langsung | pada ProductGroup, yang nests setiap variant Product | Repeated pada setiap variant halaman, melalui isVariantOf |
| Variant → group tautan | Variant adalah nested di dalam hasVariant | Variant references parent dengan isVariantOf + inProductGroupWithID |
Property format aturan
| Property | Correct format | Wrong format |
|---|---|---|
variesBy | Penuh schema.org URL: https://schema.org/color | Plain string: "color" (validates; dalam praktik tidak group — tidak sebuah terdokumentasi Google failure mode) |
productGroupID | Plain text parent sku: "44E01" | sebuah URL |
sku / gtin (per variant) | Unique per variant | Shared/reused di seluruh variants |
Catch #1 implementation mistake: variesBy sebagai plain strings
variesBy nilai itu skip penuh schema.org URL prefix adalah single sebagian besar umum
mistake di ini topic — JSON-LD masih validates, so tidak ada apa pun errors out, dan di my
testing grouping diam-diam tidak trigger (Google’s docs memerlukan penuh-URL form tetapi
jangan document apa happens jika Anda skip ini). ini snippets catch ini secara langsung alih-alih
relying pada eyeballing markup.
Regex: flag sebuah buruk variesBy array di mentah JSON-LD
Jalankan ini di atas extracted JSON-LD sumber (e.g. sebuah Screaming Frog custom extraction export,
atau apa pun mentah HTML/text dump) untuk temukan variesBy arrays containing sebuah nilai itu tidak sebuah
penuh schema.org URL:
"variesBy"\s*:\s*\[\s*((?:"(?!https://schema\.org/)[^"]*"\s*,?\s*)+)\]"variesBy"\s*:\s*\[— matches mulai dari property dan -nya opening bracket, allowing untuk whitespace formatting differences.(?:"(?!https://schema\.org/)[^"]*"\s*,?\s*)+— capture group: matches satu atau lebih quoted strings di mana sebuah negative lookahead(?!https://schema\.org/)aturan out apa pun itu sudah dimulai dengan correct prefix. jika ini group matches apa pun di semua, setidaknya satu entry di array adalah sebuah buruk plain string like"color"atau"size"alih-alih sebuah penuh URL.- sebuah match berarti: berhenti dan perbaiki itu array sebelum shipping — ini akan validate bersih dan masih fail untuk trigger grouping.
Chrome DevTools Console snippet: audit langsung halaman’s JSON-LD
Paste ke Console pada apa pun halaman Anda expect untuk carry ProductGroup markup. ini pulls
setiap JSON-LD block, walks ke ProductGroup objects (including ones nested di bawah
isVariantOf), dan reports apa pun variesBy entry itu tidak sebuah penuh schema.org URL:
(function () {
const blocks = [...document.querySelectorAll('script[type="application/ld+json"]')];
const findings = [];
blocks.forEach((block, i) => {
let data;
try {
data = JSON.parse(block.textContent);
} catch (e) {
findings.push(`Block ${i}: invalid JSON (${e.message})`);
return;
}
const items = Array.isArray(data) ? data : [data];
items.forEach((item) => {
const groups = [];
if (item['@type'] === 'ProductGroup') groups.push(item);
if (item.isVariantOf && item.isVariantOf['@type'] === 'ProductGroup') groups.push(item.isVariantOf);
groups.forEach((g) => {
const bad = (g.variesBy || []).filter((v) => !String(v).startsWith('https://schema.org/'));
if (bad.length) findings.push(`Block ${i}: bad variesBy values -> ${JSON.stringify(bad)}`);
if (g.productGroupID && /^https?:\/\//.test(g.productGroupID)) {
findings.push(`Block ${i}: productGroupID looks like a URL, should be plain text -> ${g.productGroupID}`);
}
});
});
});
console.log(findings.length ? findings.join('\n') : 'No ProductGroup issues found in this page\'s JSON-LD.');
})();XPath untuk Screaming Frog: extract productGroupID di seluruh variant halaman
gunakan custom extraction untuk pull productGroupID nilai straight out dari JSON-LD
script tag, lalu bandingkan extracted nilai di seluruh Anda di-crawl variant URLs untuk spot sebuah
mismatch:
//script[@type="application/ld+json"]Extract penuh text dari setiap matching node, lalu periksa extracted productGroupID
(dan inProductGroupWithID pada flat/multi-halaman setups) adalah identical di seluruh setiap URL
itu’s supposed untuk belong untuk yang sama group — sebuah single differing nilai berarti itu halaman
memiliki mungkin dropped out dari group dengan Tidak error thrown, berdasarkan testing (Google’s
docs memerlukan match tetapi jangan document mismatch perilaku).
Uji pemahaman Anda: ProductGroup Schema
Five quick pertanyaan pada ProductGroup, -nya core properties, dan gotchas. Pick sebuah jawaban untuk setiap, lalu periksa.
Resources worth Anda time
My related writing
I haven’t published sebuah piece secara khusus pada ProductGroup schema — ini artikel adalah dedicated treatment. closest berdekatan hal I’ve ditulis itu inform ini:
- Google menggunakan ~40 Canonicalization Sinyal — Di sini’s Apa itu berarti — “keep Anda sinyal consistent” (terjemahan) “pertahankan sinyal consistent” discipline itu underpins matching
productGroupIDdi seluruh variants (dan aligning ini denganitem_group_id). - Myth dari Duplicate konten Penalty (mesin pencari Land) — mengapa grouping variants sebagai satu item di options, alih-alih fearing them sebagai duplicates, adalah right mental model. ada Tidak duplicate-konten penalty untuk “perbaiki” (terjemahan) “perbaiki” dengan ProductGroup — ini adalah tentang understanding, tidak avoiding sebuah fine.
untuk strategy layer — apakah sebuah variant seharusnya bahkan mendapatkan -nya own URL, dan bagaimana Shopify/WooCommerce/BigCommerce/Magento differ — see product variant SEO guide pada ini situs. untuk fundamentals, schema markup dan data terstruktur hubs, dan sibling Product schema deep dive.
dari sekitar industry
- Product variant data terstruktur (Google Search Central) — authoritative reference; baca ini alongside ini untuk penuh property tables.
- menambahkan data terstruktur mendukung untuk Product Variants (Google Search Central blog) — Feb 2024 announcement.
- Item group ID [item_group_id] (Google Merchant Center Help) — feed-side attribute dan -nya schema.org cross-references.
- baru Google Search mendukung untuk Product Variant data terstruktur (mesin pencari Roundtable) — Feb 2024 launch recap, dengan John Mueller’s verbatim LinkedIn post.
- Bing melakukan tidak mendukung ProductGroup markup (mesin pencari Roundtable) — Fabrice Canel statement (Sept 2024).
- Google menambahkan mendukung untuk product variants (mesin pencari Land) — sama-day announcement coverage.
- Google untuk Display Lebih Product Variants dengan baru Markup (mesin pencari Journal) — SEJ take pada launch.
- Schema piece: ProductGroup (Yoast Developer Portal) — nyata JSON-LD contoh dan Yoast’s default
productGroupID-dari-SKU perilaku (plugin-spesifik). - cara implement ProductGroup schema (Go Fish Digital) — plain-English “why this exists” (terjemahan) “mengapa ini ada” framing.
- schema.org/ProductGroup — vocabulary itself, straight dari sumber.
Log perubahan
Diperbarui 20 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.
Diperbarui 18 Jul 2026.
Ringkasan editorial dan detail perubahan yang tercatat.Detail perubahan
-
Catatan perubahan terperinci saat ini tersedia dalam bahasa Inggris.
Perbandingan lengkap tidak tersedia — tidak ada cuplikan sebelumnya yang diarsipkan untuk revisi ini.