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.

Pertama kali diterbitkan: 27 Jun 2026 · Terakhir diperbarui: 3 Agu 2026 · Lanjutan

«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 (Google’s Feb 2024 addition) wraps variant Product objects di bawah satu parent so Google understands “sama item, berbeda options.” (terjemahan) “sama item, berbeda options.” ini adalah additive — setiap variant mempertahankan penuh Product markup (sku/gtin, offers, image, availability). tautan them dengan hasVariant (nested, single-halaman situs) atau isVariantOf + inProductGroupWithID (flat, multi-halaman situs); declare varying axes dengan variesBy — 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 sebuah productGroupID (plain text parent sku, tidak sebuah URL). productGroupID adalah tidak Merchant Center’s item_group_id — terpisah sistem, tidak ada apa pun auto-syncs them, so gunakan matching nilai pada purpose. hanya name adalah 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 variants

payoff 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.

Bukti untuk klaim ini ProductGroup groups variant Product entities; it does not replace the Product data required for individual variants. Cakupan: Google Search product-variant guidance; each purchasable variant retains its relevant Product and Offer data. Tingkat keyakinan: tinggi · Diverifikasi: Google: Product variants

three core properties

ProductGroup menambahkan parent hubungan; ini tidak pernah replaces Product markup pada setiap sellable variant. Sumber: Patrick Stox

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 pada ProductGroup: hanya name (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.

  • productGroupID adalah sebuah schema.org / pada-halaman data terstruktur field. ini feeds pencarian organik’s understanding dari halaman.
  • item_group_id adalah 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.
Bukti untuk klaim ini Merchant Center item_group_id groups variants in product data, while ProductGroup.productGroupID and Product.inProductGroupWithID are on-page structured-data properties. Google's docs cross-reference the concepts but do not establish automatic synchronization or a universal requirement that the literal values match across feed and markup. Cakupan: product data Tingkat keyakinan: tinggi · Diverifikasi: Item group ID [item_group_id]

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.

Tambahkan catatan pakar

Sematkan kutipan pakar

Orang baru? Buat profilnya yang belum diklaim di /admin/experts/ → Sematkan kutipan pakar terlebih dahulu.