Guide Product Variant SEO
Quand to give chaque product variant its propre URL vs. canonical to the base, ProductGroup + hasVariant schema (Feb 2024), and how Shopify, WooCommerce, BigCommerce, and Magento differ.
Langues
1 indice probant sur cette page
- Outil en ligne associéSchema Markup Validator
A product sold in nombreux options (size, color, storage) generates near-duplicate URLs. Consolidate the ones with aucun standalone search demand to a base URL with a canonical, and give an indexable URL seulement to variants que have leur propre demand AND peut carry unique content. Google's par défaut is a separate URL per variant canonicaling to the parameter-free base — but SearchPilot trouvé a 22% uplift from doing the reverse (base canonicals to the meilleur variant), so context wins. Mark the relationship up with ProductGroup + hasVariant (Feb 2024). Platforms differ: Shopify auto-canonicals every ?variant=ID to the base, BigCommerce has the cleanest built-in handling, WooCommerce/Magento depend on plugins or config. Schema describes the relationship; it doesn't faire a variant rank.
TL;DR — A product variant is the même product in a différent option — a shirt in red vs. blue, a phone in 128GB vs. 512GB. The SEO question is: devrait chaque option obtenir its own page in Google, or devrait ils tout share un? The rule of thumb: give a variant its propre page seulement si personnes en réalité search pour it (comme “navy blue trench coat”) and vous pouvez écrire something genuinely différent à propos de it. Sinon, point tout the variant URLs back to un principal page so Google treats les as un — en utilisant a balise canonical.
Ce que a product variant is
A variant is un version of a product that’s sold in multiple options. Courant ones: size, color, material, storage capacity, scent, pattern, fit. A unique “trench coat” pourrait be sold in three colors and five sizes — that’s 15 buyable combinations of the même coat.
Evidence for this claim A product variant is a product option distinguished by properties such as size or color. Scope: Schema.org and Google model variants through ProductGroup and Product relationships. Confidence: high · Verified: Schema.org: ProductGroupThe problem is que stores souvent créer a separate web adresse (URL) pour chaque un. Fifteen near-identical pages pour un coat. Multiply que à travers a catalog — 200 products with 20 variants chaque is 4 000 pages — and you’ve got a pile of look-alike URLs que confuse moteur de recherches and waste leur temps.
The two choses que peut go incorrect
- Diluted signals. Quand the même content lives at nombreux URLs, the votes que devrait faire one page strong (liens, clicks) obtenir split à travers tout of les. Aucun unique version is as strong as it pourrait be.
- Wasted exploration. Moteur de recherches have a limited appetite pour how nombreux pages of yours they’ll récupérer. Burning que on 15 near-identical coat pages signifie fewer visits to votre actually-different pages.
There’s aucun penalty pour ce — Google doesn’t punish vous pour contenu dupliqué. But lune pages simplement don’t perform as bien as ils pourrait. The fix is telling Google qui URL is the “real” un.
The simple decision
Pour chaque variant, demander two questions:
- Fait anyone search pour ce spécifique variant? (Utiliser a keyword outil — fait “navy trench coat” obtenir searches on its propre?)
- Peut I faire lune page genuinely différent? (Unique photos, copy, specs.)
- Yes to les deux → give it its propre page que peut rank.
- Aucun to soit → fold it into un principal page with a balise canonical (a petit bit of code que dit “the real version of this page is over here”). Evidence for this claim Google recommends consistent canonical URLs for ecommerce variant URL patterns. Scope: Canonicalization is a hint; independently useful variants may warrant separate canonical URLs. Confidence: high · Verified: Google: Ecommerce URL structure
La plupart colors and sizes are a “no” — nobody searches “medium” or “the blue one” by itself, so ils belong on un shared page. A handful of standout variants earn leur propre page.
Ce que à propos de my platform?
La plupart platforms handle the basics pour vous. Shopify, Par exemple, automatically indique
Google que tout ceux ?variant=... web addresses are really simplement the un principal
product page — qui is the correct appel pour la plupart stores. The connexe
product page SEO guide covers the rest of ce que
rend a product page rank.
Vouloir the complet version — Google’s exact guidance, the données structurées que groupes variants ensemble, the platform-by-platform differences, and the un tester que flips the conventional advice on its head? Switch to the Avancé tab.
TL;DR — Variants créer near-duplicate URLs; the job is sorting qui deserve independent ranking and qui to consolidate. Google’s par défaut: a separate URL per variant (chemin segment or requête parameter) with the parameter-free base as the canonical. Reverse it — base canonicaling to a high-demand variant — quand a spécifique variant has the search demand and the unique content to earn it (SearchPilot mesuré a 22% organic uplift doing exactly ce). Mark the relationship up with
ProductGroup+hasVariant(Feb 2024); single-page sites besoin un URL canonique pour the groupe, multi-page sites besoin complet self-contained markup par page, andvariesBydoit utiliser complet schema.org URLs. Garder canonical, lien internes, and sitemap consistent —rel=canonicalis a hint, pas a directive. Platform defaults differ and tout besoin auditing.
The tension, stated plainly
Every variant is a fork in the road. Give it its propre crawlable URL and you’ve créé a near-duplicate que splits popularité des liens and eats budget d’exploration. Select it seulement via JavaScript with aucun URL modifier and que spécifique variant state has aucun adresse of its propre — it can’t be crawled, indexé, or ranked as a distinct entity, separate from the question of si Google renders lune page’s JavaScript at tout. The correct réponse isn’t a blanket rule — it’s a per-variant judgment appel driven by two inputs: fait ce variant have its propre search demand, and peut vous give it genuinely unique content. Everything ci-dessous is in service of making que appel correctement and alors implementing it cleanly. Ce is the variant-specific deep dive que sits alongside product page SEO; que guide covers the whole PDP, ce un zooms in on the variant decision.
Ce que Google en réalité recommends
Google’s ecommerce Structure d’URL guidance is explicit que variants devrait obtenir crawlable URLs, pas JS-only state changements.
Evidence for this claim Google recommends crawlable URLs for product variants that it should discover. Scope: Use links with href values and stable URL structures; JavaScript state alone may not expose each variant. Confidence: high · Verified: Google: Ecommerce URL structureIts recommended structures: “A path segment, such as /t-shirt/green” or “A
requête parameter, tel as /t-shirt?color=green.” Les deux are fine — pick un and
be consistent.
Pour the canonical, the par défaut is to consolidate to the clean base: “Utiliser l’URL
with the requête parameter omitted as l’URL canonique. Ce peut aider Google meilleur
comprendre the relationship entre product variants.” And pour path-based variants:
“Pour products with unique URLs per variant, inclure the canonical product URL on
tout variant pages en utilisant a <link rel="canonical"> tag.”
The whole point is reducing redundant retrievals. Google: “Minimize the number of alternative URLs que retourner the même content” — because “the même content may be retrieved multiple times by the robot d’exploration si Google thinks two URLs are différent but result in the même page being renvoyé.” That’s the crawl-budget cost of variant sprawl in un sentence.
Quand a variant earns its propre indexable page
First ask whether the variant has measurable standalone search demand. If not, consolidate it to the preferred product URL. If demand exists, ask whether the page can provide meaningfully distinct copy, media, specifications, and offer data. If not, consolidate. If both conditions are met, use a distinct, self-canonical variant URL and align the canonical, internal links, and sitemap with that choice.
© Patrick Stox LLC · CC BY 4.0 ·
The par défaut (“canonical everything to the base”) is correct pour the overwhelming majority of variants. Nobody searches “size medium” or “the third blue” in isolation, so ceux devrait consolidate. But some variants are réel, standalone requêtes — “512GB iPhone 15 Pro,” “navy blue trench coat,” “extra-wide running shoes.” Pour ceux, two conditions les deux have to hold avant vous split les out:
- There’s measurable search demand pour que variant. Pull volume pour “[product] + [variant]” in a keyword outil. Zero volume → consolidate.
- Vous pouvez give lune page genuinely unique content — its propre copy, images, specs, reviews. Si vous pouvez’t differentiate it, an indexed-but-thin variant page is worse que consolidation.
Ce is the hybrid approach: un master product page, plus dedicated variant URLs only pour high-demand requêtes vous pouvez en réalité differentiate. Worth being clair à propos de ce que ce is: Google’s docs tell vous variants besoin addressable URLs and a canonical strategy, but the demand-plus-unique-content gate itself is practitioner decision-making (the même approach Yoast recommends), pas a Google eligibility requirement or a guarantee que a qualifying variant va rank. Spin up a separate indexable URL sans unique content and you’ve recreated the duplicate-content problem vous were trying to éviter.
The counterintuitive partie: canonical direction isn’t fixed
Here’s où conventional advice cracks. SearchPilot ran a controlled split tester que did the opposite of the par défaut — ils modifié the principal product page’s canonical from self-referential to point at a spécifique variation page. Le résultat: “the best estimate being a 22% uplift to organic traffic to those pages.”
The context que made it fonctionner: le site had déjà made variants indexable with self-referential canonicals, but ceux variant pages “were pas getting indexé consistently, and were pas receiving as beaucoup trafic organique as had been hoped.” Pointing the principal page’s canonical at the best-known variant concentrated the signals où the demand en réalité was.
The lesson isn’t “always reverse your canonicals.” SearchPilot is careful ici:
“Every ecommerce website’s setup va be différent selon a lot of factors,
notamment the number of variations per product, the maillage interne structure, and
the lifetime of products on the website. Ce approach may pas fonctionner pour everyone.”
The lesson is que canonical direction is a decision, pas a par défaut — point it
at whichever URL has the demand and le contenu to deserve indexation. Pour how
Google picks a canonical quand votre signals disagree, voir
canonicalization — là are roughly
40 signals at play, and the rel=canonical tag is a strong un but pas the seulement un.
Garder votre signals consistent
A balise canonical is a hint, pas a command. Google peut and va pick a différent canonical que the un vous declared si votre autre signals contradict it — qui is exactly ce que “Duplicate, Google chose a different canonical” in Search Console signifie. The fix is consistency: l’URL vous pouvezonicalize to devrait be the même URL vous lien to internally and the même URL vous liste in votre sitemap. Quand the balise canonical points un façon and votre lien internes point un autre, you’ve handed Google a raison to override vous. (Ce is the même consistency discipline que governs faceted navigation, où filter URLs créer the même near-duplicate sprawl.)
The product variant and selected-offer contract
Pour every crawlable or feed-submitted variant URL, the systems ci-dessous doit identifier the même sellable selection. Evidence for this claim Google recommends crawlable URLs for product variants that it should discover. Scope: Use links with href values and stable URL structures; JavaScript state alone may not expose each variant. Confidence: high · Verified: Google: Ecommerce URL structure
| Couche | Contract |
|---|---|
| Requested URL | Encodes the intended product and variant state in a stable, shareable formulaire. |
| Visible PDP | Loads the intended product identity, selected attributes, SKU, price, currency, and availability; a fresh navigation reproduces the state. |
| Canonical/indexability | Follows the declared parent-product or indexable-variant strategy. |
| Données structurées | Uses the matching product/groupe identity, SKU/GTIN, attributes, Offer.url, price, currency, and availability. |
| Merchant or agent feed | Sends the même item ID, groupe ID, offer facts, and a landing URL que recreates the submitted variant. |
| Cart and checkout | Adds que exact SKU and revalidates the represented price, currency, and availability sans silently substituting un autre variant. |
En d’autres termes, the visible PDP, rendered Product JSON-LD, feed item, selected
variant, cart, and checkout devrait agree on product identity, SKU, groupe ID,
selected attributes, price, currency, and availability. Checkout may legitimately
revalidate fast-changing stock, delivery, tax, or price. Quand the state changements, it
devrait expliquer the modifier au lieu de completing a différent offer sous the même
selection. Postcode-dependent fulfillment peut refine the general availability
affiché avant emplacement is connu, but the publié offer ne doit pas claim a state
the backend déjà knows is faux.
A parent-product strategy peut expose selectable variants pendant que consolidating leur URLs to the parent. An indexable-variant strategy exige chaque qualified variant to reconstruct itself, self-canonicalize, recevoir crawlable lien internes, and carry variant-specific page and offer données. Mixing the two strategies—tel as self-canonical variant URLs whose lien internes and sitemap encore point seulement to the parent—creates contradictory evidence.
Evidence for this claim Google recommends crawlable URLs for product variants that it should discover. Scope: Use links with href values and stable URL structures; JavaScript state alone may not expose each variant. Confidence: high · Verified: Google: Ecommerce URL structureNe faites pas utiliser a fragment tel as #blue-large quand a feed, server, robot d’exploration, or external
agent doit requête a spécifique variant. Navigateurs ne faites pas send the fragment in the HTTP
requête, so the origin ne peut pas select a différent réponse from it and feed validators
ne peut pas rely on it as a distinct landing-page state. Utiliser a chemin or requête parameter
quand the selection doit be addressable outside the already-running navigateur page.
Google’s JavaScript SEO guidance
explique pourquoi fragment-based content states are unreliable pour search.
ProductGroup données structurées (the Feb 2024 mettre à jour)
In February 2024 Google ajouté structured-data prise en charge pour product variants via the
nouveau ProductGroup type. It’s the pris en charge façon to tell Google “ce blue size-M
shirt and ce red size-L shirt are the même product in différent options.” It
doesn’t faire variants rank — données structurées aids understanding and rich-result
eligibility, pas rankings — but it’s how vous faire the parent-child relationship
machine-readable. Evidence for this claim Google supports ProductGroup structured data to describe product variants and their varying properties. Scope: Valid markup aids understanding and eligibility but does not guarantee ranking or display. Confidence: high · Verified: Google: Product variants structured data
The pieces:
ProductGroup— the parent type. Google’s current documentation listes seulementnameas required at the ProductGroup level;productGroupID(the parent SKU/ID) andvariesByare recommended, pas requis — though skipping les defeats the point of the markup, since Google nécessitevariesByto know qui attribute en réalité distinguishes the variants. Evidence for this claim Google supports ProductGroup structured data to describe product variants and their varying properties. Scope: Valid markup aids understanding and eligibility but does not guarantee ranking or display. Confidence: high · Verified: Google: Product variants structured datahasVariant— nests chaqueProductvariant sous the parent groupe (Approach 1, the plus compact and recommended un).isVariantOf— the inverse: ajouté to chaqueProductto lien it back to its parent groupe (Approach 2, qui may suit some CMS setups meilleur).variesBy— listes the variant-defining properties, and ce is the la plupart courant pitfall: it doit utiliser complet schema.org URLs commehttps://schema.org/colorandhttps://schema.org/size, pas the short strings"color"/"size".
Single-page vs. multi-page matters. Google: “Pour single-page sites, là doit be
seulement un distinct URL canonique pour the overall ProductGroup que tout variants
belong to.” But “pour multi-page sites… chaque page doit have complet and
self-contained markup pour the entities défini on que page.” So si every variant
has its propre URL, every variant page carries its propre complet markup — vous don’t
share un block à travers les.
Chaque variant Product nécessite a unique @id, a unique sku or gtin, its propre
variant attributes (color, size), an isVariantOf pointer to the parent, and an
Offer whose url matches the current page. The usual échecs are manquant unique
variant IDs, an inconsistent productGroupID entre parent and variants, and the
variesBy-must-be-a-full-URL trap ci-dessus. Validate with the Résultats enrichis Tester, alors
Inspection d’URL, alors sitemap submission.
Qui variants belong in the markup?
Markup devrait décrire the catalog shoppers peut en réalité select, pas every
combination a configurator pourrait theoretically produce. Inclure a variant quand it
has a stable identity tel as a SKU or GTIN, represents a réel attribute
combination, is reachable via the current product experience, belongs to the
même product groupe, and has an offer state le site peut garder current. The visible
selector, variant URL strategy, and ProductGroup graph devrait décrire the même
définir. Evidence for this claim Google supports ProductGroup structured data to describe product variants and their varying properties. Scope: Valid markup aids understanding and eligibility but does not guarantee ranking or display. Confidence: high · Verified: Google: Product variants structured data
Ne faites pas generate the Cartesian product of every color, size, material, accessory, and service option quand nombreux combinations ne faites pas exist or ne peut pas be purchased. Que creates an enormous, misleading entity graph with invented products and stale offers. A one-page selector peut nest its réel variants; variant-specific pages besoin complet markup pour the entities on chaque page. A configurable or made-to-order product devrait mark up the genuine purchasable product and current offer—pas manufacture thousands of hypothetical SKUs solely pour schema.
Budget d’exploration: the scale problem
Variant URL proliferation is a courant crawl-budget drain on grand ecommerce sites,
though how beaucoup it en réalité costs vous dépend on votre catalog’s scale and Google’s
existing demande d’exploration pour votre domain — it isn’t a fixed universal cost. The
200-products-×-20-variants = 4 000-near-duplicate-URLs math is a worked exemple to
montrer the shape of the problem, pas a mesuré average pour every site. Budget d’exploration
is an efficiency concern, pas a ranking factor — but on a grand catalog, explorer
wasted on redundant variant URLs is explorer pas spent on votre nouveau and mis à jour pages.
Don’t estimate votre réel exposure from the arithmetic alone: pull Search
Console’s Statistiques d’exploration report (Settings → Statistiques d’exploration) to voir how beaucoup of
Googlebot’s activity on votre site is hitting variant URLs, or vérifier server logs
directement pour ?variant=/path-segment variant hits versus total explorer requêtes.
Consolidating low-value variants to a canonical base, over temps, reduces the explorer
pressure ceux redundant URLs créer.
Platform-by-platform behavior
The defaults differ, and tout of les besoin auditing:
- Shopify appends
?variant=IDautomatically and canonicals every un of ceux parameter URLs back to the base/products/<slug>. That’s the correct appel pour the vast majority of stores — it consolidates everything cleanly. The catch: it consolidates everything, so si vous en réalité vouloir a high-demand variant to rank independently, Shopify’s automatic canonicalization fonctionne contre vous, and third-party apps and custom themes parfois break the canonical entirely. - WooCommerce donne vous complet URL contrôler, qui signifie the canonical handling rides on votre SEO plugin (Yoast, Rank Math). The supplémentaire wrinkle is attribute archive pages, qui peut generate leur propre duplicate URLs on top of the variants.
- BigCommerce is widely regarded by practitioners as having the strongest out-of-the-box canonical handling of the four — variant URLs are natively canonicalized. Treat que as a practitioner assessment plutôt que something Google or BigCommerce documents as a formal guarantee, and confirmer current behavior contre votre propre platform version avant relying on it.
- Magento généralement exige manual configuration or extensions, and parce que layered navigation and product variants les deux produce duplicate URLs, the two problems compound si vous don’t adresse les deux.
On Bing specifically, Bing Webmaster Outils offers URL Normalization — a code-free façon to consolidate parameter variants sans ajout a balise canonical to every page, qui Microsoft itself has appelé “better than canonical” pour ce utiliser.
Myths worth killing
- “Variants cause a duplicate-content penalty.” Là is aucun duplicate-content penalty. The cost is signal dilution and explorer waste, pas a punitive action — but the outcome (weaker rankings) peut feel the même, so it encore matters.
- “Always canonical every variant to the base.” SearchPilot’s 22% result montre the reverse peut win. Direction is contextual.
- “
?color=greenparameters are bad for SEO.” Google explicitly recommends requête parameters or chemin segments. Parameters are fine with the correct canonical. - “ProductGroup schema makes variants rank better.” It aids understanding and rich-result eligibility; it n’est pas a ranking signal.
- “Shopify handles all variant SEO so I’m done.” Its par défaut consolidation is correct pour la plupart products but actively empêche high-value variants from ranking independently, and apps break it.
- “JS-only variant selection (no URL change) is best.” Google crawls the par défaut page state. A variant reachable seulement via JavaScript with aucun URL modifier has aucun separate adresse, so it can’t be crawled, indexé, or ranked as its propre entity — that’s an addressability problem, pas proof que Google can’t render JavaScript at tout (Google fait render JS, but warns que dynamically-generated Product markup peut be crawled moins frequently and reliably).
Où ce sits in the cluster
Ce is the variant-specific companion to product page SEO, qui covers the complet product detail page. The canonical mechanics live in canonicalization; the closely connexe filter-URL version of the même near-duplicate problem lives in faceted navigation. Pour the bigger picture, voir Ecommerce SEO.
AI summary
A condensed prendre on the Avancé version:
- Product variant SEO = sorting qui variants deserve leur propre indexable URL and qui to consolidate to a base URL with a canonical. Driven by two inputs: standalone search demand + ability to ajouter unique content.
- Google’s par défaut: a separate URL per variant (chemin segment
/t-shirt/greenor requête parameter/t-shirt?color=green) with the parameter-free base as the canonical. Les deux URL shapes are explicitly endorsed. - The counterintuitive finding: SearchPilot’s controlled tester pointed the main product canonical at a spécifique variant and saw a 22% organic uplift. Canonical direction is a decision, pas a fixed par défaut — but it’s context-dependent.
- Give a variant its propre page seulement si it has its propre search demand AND vous pouvez give it genuinely unique content. Sinon consolidate.
ProductGroup+hasVariant(Feb 2024) marks up the variant relationship. Single-page sites besoin un URL canonique pour the groupe; multi-page sites besoin complet self-contained markup par page.variesBydoit utiliser complet schema.org URLs (https://schema.org/color, pas"color"). Chaque variant nécessite a uniquesku/gtinandisVariantOf. Schema aids understanding, pas rankings.- Garder canonical, lien internes, and sitemap consistent —
rel=canonicalis a hint, pas a directive (“Google chose a different canonical” = contradictory signals). - Budget d’exploration: 200 products × 20 variants = 4 000 near-duplicate URLs; consolidation reduces the waste.
- Platforms: Shopify auto-canonicals every
?variant=IDto the base (correct by par défaut, but blocks independent variant ranking, and apps break it); BigCommerce has the cleanest built-in handling; WooCommerce/Magento depend on plugins/config. Bing’s URL Normalization is a code-free consolidation alternative. - Aucun duplicate-content penalty — the cost is dilution and explorer waste, pas a fine.
Documentation officielle
Primary-source documentation pour product variants and leur canonicals.
Google — variant URLs & canonicals
- Designing a Structure d’URL pour ecommerce sites — the path-segment vs. query-parameter variant guidance and the “omit the parameter for the canonical” rule.
- Consolidate duplicate URLs (rel=“canonical”)) — how to specify a canonical and pourquoi it’s a hint, pas a directive.
Google — variant données structurées
- Product variant données structurées (ProductGroup) —
ProductGroup,hasVariant,isVariantOf,variesBy,productGroupID, and the single-page vs. multi-page rules. - Ajout données structurées prise en charge pour product variants (Feb 2024 blog) — the announcement introducing the nouveau properties.
- Intro to product données structurées — product snippets vs. merchant listings, the parent context pour variant markup.
Bing / Microsoft
- Bing Webmaster Guidelines — Bing’s canonical and duplicate-content stance.
- Meilleur que canonical; URL Normalization (Bing Webmaster Blog) — le code-free parameter-consolidation fonctionnalité in Bing Webmaster Outils.
- Fait Contenu dupliqué Hurt SEO and AI Search Visibility? (Dec 2025) — Bing on signal dilution from duplicate/near-duplicate URLs.
Quotes from the source
On-the-record statements from Google and Bing, plus the un controlled tester in ce space. Chaque lien is a deep lien que jumps to the quoted passage.
Google — variant Structure d’URL
- “Use the URL with the query parameter omitted as the canonical URL. This can help Google better understand the relationship between product variants.” — Recherche Google Central. Jump to quote
- “For products with unique URLs per variant, include the canonical product URL on all variant pages using a
<link rel="canonical">tag.” — Recherche Google Central. Jump to quote - “The same content may be retrieved multiple times by the crawler if Google thinks two URLs are different but result in the same page being returned.” — Recherche Google Central. Jump to quote
Google — ProductGroup données structurées
- “For single-page sites, there must be only one distinct canonical URL for the overall
ProductGroupthat all variants belong to.” — Recherche Google Central. Jump to quote
SearchPilot — controlled split tester
- “the best estimate being a 22% uplift to organic traffic to those pages.” — SearchPilot cas study on canonicalizing to spécifique variation pages. Jump to quote
- “Every ecommerce website’s setup will be different depending on a lot of factors, including the number of variations per product, the internal linking structure, and the lifetime of products on the website. This approach may not work for everyone.” — SearchPilot. Jump to quote
John Mueller, Google
Remarque: the research réussir did pas surface a unique clean, on-the-record Mueller
quote spécifique to product variants. His widely cited general guidance — que
you’d créer separate pages seulement quand there’s something genuinely unique utilisateurs
are looking pour, que a self-referential rel=canonical clarifies qui URL
vous vouloir indexé, que a canonical is a hint Google may override, and que
là is aucun duplicate-content penalty — is paraphrased throughout ce article
plutôt que quoted, and Mueller’s February 2024 LinkedIn remarque simply shared
Google’s propre ProductGroup announcement. Treat tout of it as relayed, pas
verbatim.
Variant decision & implementation checklist
Decide (per variant)
- Pulled keyword volume pour “[product] + [variant]” — is là standalone search demand?
- Peut the variant page carry genuinely unique content (copy, images, specs, reviews)?
- Yes to les deux → give it its propre indexable URL (self-referential canonical).
- Aucun to soit → consolidate to the base URL via canonical (or a unique JS-swap page with aucun extrune URLs).
Implement l’URLs
- Variants are réel crawlable URLs (chemin segment or requête parameter) — pas JS-only state with aucun URL modifier.
- Un consistent URL scheme (don’t mix chemin + parameter pour the même axis sans a clair canonical plan).
- Query-parameter variants you’re consolidating → canonical to the parameter-free base.
- Path-based variants you’re consolidating → canonical to the parent product URL.
Garder signals consistent
- The canonical target = l’URL utilisé in lien internes = l’URL in le sitemap.
- Aucun “Duplicate, Google chose a different canonical” in Search Console (si là is, votre signals contradict chaque autre).
Données structurées
-
ProductGroupprésent withname(requis) plusproductGroupIDandvariesBy(recommended, but the markup isn’t utile sans les). -
variesByuses complet schema.org URLs (https://schema.org/color), pas short strings. - Chaque variant
Producthas a uniquesku/gtinand anisVariantOf(or is nested viahasVariant). - Multi-page site → every variant page carries complet, self-contained markup.
- Validated in Résultats enrichis Tester → Inspection d’URL → sitemap.
Scale / explorer
- Estimated total variant URLs (products × variants) — flagged si it’s a crawl-budget concern on a grand catalog.
- Platform par défaut audited (Shopify/WooCommerce/BigCommerce/Magento) — pas assumed correct.
The decision framework
1. The two-question gate (run it per variant).
- Does ce variant have its propre search demand? (keyword volume pour the variant)
- Can I give it genuinely unique content?
- Les deux yes → propre indexable URL, self-referential canonical.
- Soit aucun → consolidate. La plupart colors/sizes échouer the gate and devrait consolidate; a handful réussir and earn leur propre page.
2. Three URL strategies, by ce que vous decided.
- Propre URL + self-referential canonical — pour variants que réussi the gate. Chaque ranks pour its propre requête.
- Propre URL + canonical to a base/parent — pour crawlable-but-consolidated variants. Garde les accessible pendant que concentrating signals on un URL. (Choisir which URL is the canonical target by demand — usually the base, parfois the meilleur variant; voir model 3.)
- Unique page, JS variant swap, aucun extrune URLs — zero duplicate risk, zero individual-ranking ability. Fine quand aucun variant has standalone demand.
3. Canonical direction is a choice, pas a par défaut. The textbook déplacer is base ← variants (everything consolidates to the clean base). But SearchPilot’s +22% tester montre base → best-variant peut win quand the demand and content live on a spécifique variant. Demander: which URL has the demand and the unique content? Point the canonical là.
4. Signal consistency beats quelconque unique tag.
rel=canonical is a hint. Lien internes, sitemap entries, and the balise canonical
doit tout nom the même URL, or Google may pick its propre canonical. Consistency is how
vous raise confidence in the choice.
5. Schema describes; it doesn’t rank.
ProductGroup + hasVariant rend the parent-child relationship machine-readable
and helps rich-result eligibility — sequence it after lune page is bon, pas as a
ranking lever.
6. Platform par défaut ≠ fait. Every platform has a par défaut variant behavior (Shopify auto-canonicals to base, BigCommerce cleanest, WooCommerce/Magento depend on config). Audit it contre the decision vous en réalité made pour votre high-value variants — the par défaut optimizes pour consolidation, qui is incorrect pour the variants vous want to rank.
Platform par défaut variant behavior — cheat sheet
| Platform | Par défaut variant URL | Canonical handling | Watch out pour |
|---|---|---|---|
| Shopify | ?variant=ID appended automatically | Auto-canonicals every ?variant=ID to base /products/<slug> | Consolidates everything — blocks high-demand variants from ranking independently; apps/themes peut break it |
| WooCommerce | Entièrement customizable | Rides on votre SEO plugin (Yoast / Rank Math) | Attribute archive pages créer extra duplicate URLs on top of variants |
| BigCommerce | Native variant URLs | Strongest out-of-the-box; variant URLs natively canonicalized | Least to fix — but encore confirmer high-value variants aren’t over-consolidated |
| Magento | Manual / extension-dependent | Exige config or extensions | Layered navigation + variants les deux spawn duplicate URLs — compounding |
Variant canonical rule
- Query-parameter variants (
?color=green) you’re consolidating → canonical to the parameter-free base. - Path-based variants (
/t-shirt/green) you’re consolidating → canonical to the parent product URL. - Variants que réussi the demand + unique-content gate → self-referential canonical so ils peut rank.
- Même URL in canonical + lien internes + sitemap, toujours.
ProductGroup quick-reference
| Piece | Ce que it fait | Gotcha |
|---|---|---|
ProductGroup | Parent type pour the variant définir | Seulement name is required; productGroupID and variesBy are recommended (but nécessaire to faire the markup utile) |
hasVariant | Nests variants sous the groupe (Approach 1) | Plus compact; recommended |
isVariantOf | Liens a variant back to the groupe (Approach 2) | Suits some CMS setups |
variesBy | Listes varying properties | Doit be complet schema.org URLs (https://schema.org/color) |
productGroupID | Parent SKU/ID | Doit match entre parent and variants |
per-variant sku/gtin | Unique variant ID | Chaque variant doit be unique |
- Single-page site → un URL canonique pour the whole groupe.
- Multi-page site → complet, self-contained markup on every variant page.
Myths to kill
- Aucun duplicate-content penalty — simplement dilution + explorer waste.
- Canonical direction isn’t fixed (SearchPilot: base→variant = +22%).
- Requête parameters are fine with the correct canonical.
- Schema ≠ ranking signal.
- Shopify’s auto-canonical is correct by default but blocks independent variant ranking.
- JS-only variant swaps (aucun URL modifier) have aucun separate adresse — pas crawlable/rankable as leur propre entity, qui isn’t the même as “Google can’t render JavaScript.”
Devrait ce variant have its propre indexable URL?
Choose a variant URL strategy
Product-variant mistakes to éviter
Give every color and size an indexable page
Platform-generated URLs ne sont pas evidence of search demand. Consolidate variants que lack les deux standalone demand and distinct content.
Assume the canonical direction is universal
The clean base is Google’s par défaut recommendation, but the correct target is l’URL que deserves indexation. Tester unusual cas and garder tout canonical signals aligned.
Treat a balise canonical as a directive
Lien internes and sitemap entries que point elsewhere give Google raisons to select a différent canonical. Utiliser the même choisi URL everywhere.
Ajouter ProductGroup schema as a ranking tactic
Variant markup describes relationships and supports rich-result eligibility. It ne fait pas replace utile pages, demand, or authority.
Utiliser short valeurs in variesBy
Valeurs tel as "color" ne sont pas the documented formulaire. Utiliser complet schema.org URLs tel as https://schema.org/color.
Diagnosing product-variant problems
Search Console dit “Duplicate, Google chose a different canonical”
Probable causer: the declared canonical conflicts with lien internes, sitemap membership, redirections, or page similarity. Fix: choisir l’URL que devrait rank and align every signal on it. Confirmer in Inspection d’URL après Google recrawls lune pages.
A high-demand variant jamais apparaît in search
Probable causer: the platform canonicals every variant to the base or exposes the variant seulement as JavaScript state. Fix: give the qualified variant a crawlable URL, distinct content, a self-canonical, lien internes, and sitemap inclusion. Confirmer que the rendered page and selected canonical match.
ProductGroup validation reports relationship errors
Probable causer: variants lack unique IDs, the productGroupID differs, or variesBy uses short property noms. Fix: faire chaque entity unique, utiliser un parent identifier, and utiliser complet schema.org property URLs. Re-run validation on the final HTML.
Offer URLs disagree with the visible variant
Probable causer: a shared schema template outputs the base URL or the incorrect SKU on every variant. Fix: render variant-specific Offer.url, identifiers, attributes, price, and availability, alors comparer the markup with the visible selection.
ProductGroup with two variants
The suivant simplified JSON-LD montre the parent-child relationship. Production markup encore nécessite to match the visible page and Google’s current product requirements.
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"@id": "https://example.com/shirt#group",
"name": "Trail Shirt",
"productGroupID": "TS-100",
"variesBy": ["https://schema.org/color", "https://schema.org/size"],
"hasVariant": [
{
"@type": "Product",
"@id": "https://example.com/shirt/blue-medium#product",
"name": "Trail Shirt - Blue - Medium",
"sku": "TS-100-BLU-M",
"color": "Blue",
"size": "M",
"isVariantOf": { "@id": "https://example.com/shirt#group" },
"offers": {
"@type": "Offer",
"url": "https://example.com/shirt/blue-medium"
}
},
{
"@type": "Product",
"@id": "https://example.com/shirt/green-large#product",
"name": "Trail Shirt - Green - Large",
"sku": "TS-100-GRN-L",
"color": "Green",
"size": "L",
"isVariantOf": { "@id": "https://example.com/shirt#group" },
"offers": {
"@type": "Offer",
"url": "https://example.com/shirt/green-large"
}
}
]
}Chaque variant has a distinct @id, SKU, attributes, and offer URL, pendant que les deux point to the même groupe. Si the variants live on separate pages, chaque page nécessite self-contained markup pour the entities it defines.
Triage a variant catalog with explicit evidence
Paste a CSV export with product groupe, variant URL, variant attributes, canonical, internal-link target, sitemap membership, keyword demand, and content-difference notes.
Audit this product-variant CSV. For each variant, recommend one of: independent indexable URL, crawlable URL canonicalized to a parent, or single-page variant state.
Apply this gate:
1. Independent indexing requires verified standalone search demand.
2. Independent indexing also requires genuinely distinct content.
3. Canonical, internal links, and sitemap URL must agree.
4. Do not infer demand from the existence of a URL or invent search volume.
Return: product group, variant, recommendation, evidence, missing evidence, canonical target, internal-link change, sitemap action, and structured-data check. Mark uncertain rows NEEDS HUMAN REVIEW.
CSV:
[PASTE CSV] Trouver contradictory variant canonical signals in a explorer export
Export au moins Address, Canonical Link Element 1, Inlinks, and Indexability from votre robot d’exploration, alors adapt the column noms ci-dessous. The script groupes courant ?variant= URLs and flags rows whose canonical target differs from the parameter-free product URL.
import csv
import sys
from urllib.parse import urlsplit, urlunsplit, parse_qsl, urlencode
def without_variant(url):
parts = urlsplit(url)
query = [(k, v) for k, v in parse_qsl(parts.query) if k != "variant"]
return urlunsplit((parts.scheme, parts.netloc, parts.path, urlencode(query), ""))
with open(sys.argv[1], newline="", encoding="utf-8-sig") as source:
for row in csv.DictReader(source):
url = row["Address"]
if "variant=" not in url:
continue
expected = without_variant(url)
declared = row.get("Canonical Link Element 1", "").strip()
if declared != expected:
print({"variant": url, "declared": declared, "expected_base": expected})Extract variant liens from a product page
Utiliser ce XPath in Screaming Frog custom extraction to collect courant parameterized variant liens:
//a[contains(@href,'variant=')]/@hrefRun ce in the Chrome DevTools Console to comparer chaque lié variant with its canonical après opening ceux pages in a robot d’exploration or tester harness:
console.table(
[...document.querySelectorAll('a[href*="variant="]')].map((a) => ({
text: a.textContent.trim(),
url: new URL(a.href, location.href).href,
})),
); Outils pour variant decisions and validation
- Balisage de données structurées Validator — validate the vocabulary, IDs,
ProductGrouprelationships, and Google-facing product requirements in pasted JSON-LD or HTML. - Rich-Result Eligibility Checker — voir qui product rich-result requirements the current markup satisfies and qui requis fields are manquant.
- Google Résultats enrichis Tester — vérifier que Google peut parse the deployed product and variant markup.
- Recherche Google Console Inspection d’URL — comparer the declared and Google-selected canonical pour representative variants.
- Recherche Google Console Page Indexation — trouver variant URLs grouped into duplicate or alternate-canonical buckets.
- Ahrefs Keywords Explorer — vérifier si a spécifique product-plus-variant requête has suffisant demand to réussir the two-question gate.
- Screaming Frog or Ahrefs Site Audit — explorer variant URLs and comparer canonicals, lien internes, indexability, and sitemap membership at scale.
Prove the variant implementation fonctionne
Validate the canonical plan
Tester to run: explorer representative base and variant URLs, alors comparer réponse status, declared canonical, internal-link target, and sitemap membership. Attendu result: independent variants self-canonical; consolidated variants consistently point to the choisi product URL. Échec interpretation: the theme, sitemap, or navigation is emitting a competing signal. Monitoring window: HTML signals are immediate; Google’s selected canonical updates après recrawling. Rollback trigger: a qualified independent variant is consolidated away or the base product becomes non-canonical unexpectedly.
Validate ProductGroup markup
Tester to run: run the final rendered HTML via the Balisage de données structurées Validator and Google’s Résultats enrichis Tester. Attendu result: un stable groupe ID, unique variant identifiers, complet variesBy URLs, and offer URLs que match the visible variants. Échec interpretation: the schema template is incomplete or the visible page and markup disagree. Monitoring window: validation is immediate; search appearance dépend on Google’s recrawl and eligibility systems. Rollback trigger: the release removes valid product eligibility or reports the incorrect price, availability, or variant.
Inspect Google’s selected canonical
Tester to run: utiliser Inspection d’URL on representative high-demand and consolidated variants. Attendu result: Google’s selection matches the intended strategy pour chaque class. Échec interpretation: signals remain inconsistent or the supposedly distinct variant n’est pas distinct suffisant. Monitoring window: wait pour recrawling plutôt que repeatedly requesting indexation. Rollback trigger: traffic-bearing variant pages disappear après the canonical modifier.
Product-variant SEO metrics
Canonical consistency rate
Metric: share of variant URLs whose declared canonical, internal-link target, and sitemap treatment match the approved strategy. Ce que it indique vous: si templates consistently implement the decision made pour chaque variant class. How to pull it: join explorer exports pour canonicals and inlinks with sitemap URLs. Benchmark / realistic range: the implementation target is complet consistency pour audited variants; track exceptions explicitly plutôt que accepting silent drift. Cadence: après template releases and monthly on grand catalogs.
Variant index coverage by strategy
Metric: indexé share of independent variants and exclusion raison pour consolidated variants. Ce que it indique vous: si pages intended to rank peut index pendant que duplicate variants consolidate as planned. How to pull it: classify Page Indexation exports by the catalog’s variant strategy. Benchmark / realistic range: comparer réel state with the approved inventory; a universal index-rate target voudrait mix two intentionally différent classes. Cadence: monthly.
Organic performances of independent variants
Metric: clicks, impressions, conversions, and landing-page revenue pour variants deliberately donné leur propre URLs. Ce que it indique vous: si the extrune page and maintenance cost is justified by réel demand. How to pull it: groupe exact variant URLs in Search Console and analytics. Benchmark / realistic range: comparer contre chaque variant’s pre-change baseline and its parent product; ne faites pas generalize le résultat of un site’s tester. Cadence: monthly and après major catalog changements.
Ressources utiles
My connexe writing
- Google Uses ~40 Canonicalization Signals — Here’s Ce que Que Signifie — the signal liste and the canonical-as-hint framing que underpins variant decisions.
- The Beginner’s Guide to SEO technique — où canonicalization and explorer efficiency fit the bigger picture.
From autour the industry
- 14 Façons to Améliorer Ecommerce Product Pages pour le SEO (Ahrefs) — the broader product-page guide que inclut variant canonical guidance.
- Fait canonicalising to plus spécifique product pages améliorer SEO performances? (SearchPilot) — the controlled split tester behind the 22% finding; the seulement réel experimental données in ce space.
- Ecommerce Product Variations Optimization Guide (Yoast) — the hybrid-approach framework (master page + dedicated URLs pour high-demand variants seulement).
- Recherche Google Adds Prise en charge Pour Product Variant Données structurées (Moteur de recherche Roundtable) — coverage of the Feb 2024 ProductGroup launch.
- Optimizing Product Variants in eCommerce (WordLift) — schema-implementation focus (remarque the vendor tie-in).
- Product Variants SEO: 7 Strategies (HI Agency) — a checklist-format practitioner prendre.
- r/TechSEO — the community pour canonical/index debugging.
On ce site
- Product page SEO, faceted navigation, and canonicalization — the directement connexe deep dives.
Stats worth citing
- +22% trafic organique from canonicalizing the main product page to a spécifique variation page — the reverse of the textbook par défaut — in SearchPilot’s controlled split tester. Source
- The variant-sprawl arithmetic: 200 products × 20 variants = 4 000 near-duplicate URLs a robot d’exploration has to evaluate — the concrete shape of the crawl-budget cost variants créer. (Worked exemple, pas a mesuré study.)
- Feb 2024: Google introduced
ProductGroup+hasVariant/isVariantOf/variesBystructured-data prise en charge pour variants — the pris en charge façon to groupe variant pages. Source
The SearchPilot uplift is a unique controlled tester on un site; the company itself notes the approach “may not work for everyone.” The 4 000-URL figure is an illustrative worked exemple, pas a mesuré average. Treat les deux as directional.
Testez vos connaissances: Product Variant SEO
Five rapide questions on quand to split variants out, quand to consolidate, and how to mark les up. Pick an réponse pour chaque, alors vérifier.
Journal des modifications
Mis à jour le 29 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.
Mis à jour le 29 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.
Mis à jour le 18 juil. 2026.
Résumé éditorial et détails enregistrés des changements.Détails des changements
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
-
Les notes détaillées des changements sont actuellement disponibles en anglais.
Comparaison complète indisponible — aucun instantané antérieur n’a été archivé pour cette révision.