Resources · 38

Keep product variants consistent from URL to cart

Align selected option, identity, image, price, stock, markup and purchase.

· 7 min

Fictional empty cyber inventory vault: three anonymous network modules in an aluminum case, blank tags, burgundy box and brass lamp

What this guide helps achieve

  • Identify each variant
  • Test direct links
  • Synchronize the offer
  • Handle stockouts

Quick check

  • Does each sold combination have a stable identifier?
  • Does a direct link preselect the right option?
  • Do image, price and stock match the cart?
  • Does markup describe the same offer?
  • What happens after a stockout?

Step-by-step method

  1. 01

    Model group and options

    Separate common product attributes from each variant’s differences. Define identifiers, selectable dimensions and combinations actually sold.

    Deliverable: product, group and variant matrix.

  2. 02

    Test direct URLs

    Open each variant URL without a session. Check the preselected option, image, price, availability and add-to-cart action.

    Deliverable: verified direct-link set.

  3. 03

    Unify displayed data

    Trace the source of truth for price, currency, stock and promotion. Compare page, cart, feed and structured data at the same time.

    Deliverable: data-flow map and timestamped discrepancies.

  4. 04

    Describe the group accurately

    If using ProductGroup markup, associate variants and IDs according to Google guidance and make every page understandable on its own.

    Deliverable: checked markup examples.

  5. 05

    Exercise unusual states

    Replay stockout, expired discount, unavailable option and return from cart. Avoid showing an offer that cannot be purchased.

    Deliverable: transition cases and fixes.

  6. 06

    Watch divergence

    Sample published variants after catalog changes. Measure propagation delay and assign corrections.

    Deliverable: discrepancy dashboard.

Management indicators

IndicatorWhat it measuresFirst action
IdentityVariants with ID and distinguishing attributesFix the model
Direct linkURLs selecting the intended optionRepair selection
AgreementPrice and stock aligned through cartFix data flows
PropagationDelay after catalog changesReduce stale copies

Common pitfalls

  • An URL that does not activate its variant
  • Structured offer differing from the cart
  • Confusing a visual choice with a purchasable variant
  • Stale inventory in an external feed

Frequently asked questions

Does every variant need its own page?

Site structure varies, but Google expects each variant to be preselectable through a distinct URL.

Can markup fix poor catalog data?

No. It must faithfully describe the visible and purchasable offer.

Why test without a session?

To confirm a shared link opens the right variant without relying on a locally saved choice.

Product identity: GTIN and variants

A reliable catalog lets visitors find the same variant on the page, in the feed, in the cart and through support. Start by separating the trade-item identifier, internal reference, variant group and selling terms. A check digit can detect a composition error; alone it cannot resolve identity or offer inconsistencies.

Sources consulted on 23 October 2026. Calculation follows the GS1 modulo-10 algorithm; the 2017 NZ guide is cited only for that algorithm. Illustrative lengths and representations are checked against GS1 guideline 1.1.0 of December 2025. CIE test cases are distinguished from GS1 documentation examples.

GS1 · 2D Barcodes at Retail POS Implementation Guideline · Release 1.1.0 · ratified December 2025 · §4.3 / Table 4-2

Six concepts to separate in the data model

Six concepts to separate in the data model
ConceptCatalog rolePitfall to avoid
GTINIdentifies a trade item under GS1 rules.A coherent check digit attests neither allocation, authenticity nor availability.
SKUInternal reference used to manage a variant in a merchant system.An internal reference is not automatically a GTIN; document its scope and rules.
ProductGroupDescribes common properties and variant grouping in markup.The group does not replace the Product entities needed for variants.
productGroupID / inProductGroupWithIDLinks variants to a consistent group identifier.If both levels supply this identifier, they must match under Google guidance.
ProductDescribes a variant using specific attributes and a distinct identifier.Do not show the group color or size when the page selects another variant.
OfferDescribes selling terms attached to the offered product.Price, currency and availability must match the choice that can actually be bought.

Six variesBy properties recognized in Google documentation

This list records the six properties supported by Google for variesBy on the review date. It is not an inventory of all Schema.org. Describe only axes actually offered by the catalog.

Six variesBy properties recognized in Google documentation
Full propertyAcceptance use
https://schema.org/colorColor genuinely selectable on the page.
https://schema.org/sizeSize consistent with the selection and cart.
https://schema.org/suggestedAgeSuggested age, without inferring a legal permission or regulatory compliance.
https://schema.org/suggestedGenderSuggested gender audience, when relevant to this catalog.
https://schema.org/materialMaterial distinguishing the sold variants.
https://schema.org/patternPattern distinguishing the sold variants.

Google Search Central · Product variant structured data · Updated 2026-09-08 · consulted 2026-10-23

Local GTIN check-digit reader

Enter a complete string of 8, 12, 13 or 14 digits 0–9, including its final check digit. Spaces, hyphens, GS1 AI prefixes, compressed barcodes and Digital Link URLs are not accepted. The reader preserves leading zeros and shows the weights applied to every digit before the check digit.

Local length and modulo-10 check only. No GS1 registry query, GTIN allocation, brand identification, barcode reading or offer validation. Fourteen-position representation formats the same identifier; it creates no new GTIN. The result remains an arithmetic check. Multi-digit changes can preserve the same check digit: this check does not detect every input error.

GS1 New Zealand · Bar coding basic user guide · Version 3.1 · September 2017 · printed p.57 / PDF p.61 · check-digit algorithm

Eight documentation examples and acceptance cases

I01 · Eight-digit GS1 example

95200002

Check digit matches the entered digits. Allocation and product not verified.

Illustrative GS1 Table 4-2 example. The last digit is 2; a coherent key describes neither price nor stock.

Received length
8
Weighted sum
38
Reached multiple of 10
40
Expected check digit
2
Received check digit
2
Fourteen-position representation
00000095200002
Calculation on the digits before the check digit
Position from leftDigitWeightProduct
19327
2515
3236
4010
5030
6010
7030

GS1 · 2D Barcodes at Retail POS Implementation Guideline · Release 1.1.0 · ratified December 2025 · §4.3 / Table 4-2

I02 · Twelve digits with a leading zero

012345000058

Check digit matches the entered digits. Allocation and product not verified.

GS1 example: retain the leading zero in the string. Integer conversion would erase part of the received representation.

Received length
12
Weighted sum
42
Reached multiple of 10
50
Expected check digit
8
Received check digit
8
Fourteen-position representation
00012345000058
Calculation on the digits before the check digit
Position from leftDigitWeightProduct
1030
2111
3236
4313
54312
6515
7030
8010
9030
10010
115315

GS1 · 2D Barcodes at Retail POS Implementation Guideline · Release 1.1.0 · ratified December 2025 · §4.3 / Table 4-2

I03 · Thirteen-digit GS1 example

9521101530001

Check digit matches the entered digits. Allocation and product not verified.

Illustrative GS1 example. The expected check digit is 1. Then link the identifier to the variant actually offered.

Received length
13
Weighted sum
49
Reached multiple of 10
50
Expected check digit
1
Received check digit
1
Fourteen-position representation
09521101530001
Calculation on the digits before the check digit
Position from leftDigitWeightProduct
1919
25315
3212
4133
5111
6030
7111
85315
9313
10030
11010
12030

GS1 · 2D Barcodes at Retail POS Implementation Guideline · Release 1.1.0 · ratified December 2025 · §4.3 / Table 4-2

I04 · Same identifier represented in fourteen positions

09521101530001

Check digit matches the entered digits. Allocation and product not verified.

The GS1 table prefixes the previous example with zero. This 14-position representation creates no new trade item and must not be confused with a newly allocated GTIN-14.

Received length
14
Weighted sum
49
Reached multiple of 10
50
Expected check digit
1
Received check digit
1
Fourteen-position representation
09521101530001
Calculation on the digits before the check digit
Position from leftDigitWeightProduct
1030
2919
35315
4212
5133
6111
7030
8111
95315
10313
11030
12010
13030

GS1 · 2D Barcodes at Retail POS Implementation Guideline · Release 1.1.0 · ratified December 2025 · §4.3 / Table 4-2

I05 · Final digit changed for testing

9521101530002

Check digit differs from that expected for the entered digits.

CIE case derived from I03: only the last digit changes from 1 to 2. Arithmetic must flag the mismatch without inventing another product.

Received length
13
Weighted sum
49
Reached multiple of 10
50
Expected check digit
1
Received check digit
2
Calculation on the digits before the check digit
Position from leftDigitWeightProduct
1919
25315
3212
4133
5111
6030
7111
85315
9313
10030
11010
12030
I06 · Length not accepted by the reader

9521101530

Input rejected: 8, 12, 13 or 14 digits 0–9, with no spaces or separators.

Ten digits match none of the four accepted lengths. The reader does not complete a truncated reference.

I07 · Leading space to fix at the source

9521101530001

Input rejected: 8, 12, 13 or 14 digits 0–9, with no spaces or separators.

The reader rejects separators and spaces without silent normalization. Examine the import rule before bulk-changing identifiers.

I08 · Limit of an arithmetic-only check

00000000000000

Check digit matches the entered digits. Allocation and product not verified.

All-zero CIE case: sum and check digit are mathematically coherent. The reader proves no GS1 allocation or product existence; this example is not an identifier to use in a catalog.

Received length
14
Weighted sum
0
Reached multiple of 10
0
Expected check digit
0
Received check digit
0
Fourteen-position representation
00000000000000
Calculation on the digits before the check digit
Position from leftDigitWeightProduct
1030
2010
3030
4010
5030
6010
7030
8010
9030
10010
11030
12010
13030

Direct URL and markup: check the right model

Direct URL and markup: check the right model
ArchitectureGoogle guidanceJourney check
Single page with selectorsOne distinct canonical URL for the ProductGroup; every variant remains preselectable by URL.Open a shared link without remembered choices: correct image, price, availability and the right variant added to cart.
Variants across multiple pagesNo single canonical URL represents the ProductGroup; each page independently defines the entities it describes.Check group identity on each page and references to other variants without relying on a remote page to understand the local entity.
Variant changeSelected content must stay consistent with the variant recoverable through its URL.Check back navigation, reload, copied link and cart; retain an understandable unavailable state after stockout.

Six checks connecting identity and purchase

Six checks connecting identity and purchase
CIE caseEvidence to collectDecision criterion
C-ID · Catalog importRaw value, field type, length and any check-digit error.Preserve the string and zeros; isolate rejected records for source correction without automatically allocating new identifiers.
C-GROUP · Same familyGroup ID and variant identifiers on two pages.Do not mix groups; repeated relationships agree even after partial synchronization.
C-OFFER · Price and currencyPage, markup, feed and cart observed for one variant at one time.Amount and currency remain consistent; discrepancies prevent a consistency conclusion.
C-STOCK · Stockout after selectionStock-change journey and the actual displayed message.An unavailable variant is not silently replaced with another cart reference.
C-CACHE · Shared variantLink opened without a session and after selecting another option.Cache and local state do not substitute another variant’s image, price or identity.
C-KEYBOARD · Variant selectorKeyboard journey, focus and selection announcement.Selection is accessible, useful updates are understandable and focus remains usable after change.

For search and visitor experience, stable entities and understandable offers matter more than accumulating identifiers. Markup must describe real data; this reader grants no Google eligibility and guarantees no rich result. Tie fixes to the source catalog, then retest the direct link and cart.

Provenance, editions and credits

Six-property selection and variant guidance adapted from the cited Google documentation under CC BY 4.0 unless otherwise noted. GS1 is credited for facts and numeric examples; original CIE explanations, acceptance cases and code. No GS1 or Google endorsement is implied. Google · CC BY 4.0

GS1 New Zealand · Bar coding basic user guide · SHA-256: 4c7dcaac8453a588e917d7571c908b7058153c65679f42a8359b1455149da4a2

GS1 · 2D Barcodes at Retail POS Implementation Guideline · SHA-256: aadf1b655dd9866a24befef1486ee50a9bd10f3447bda8c35346eb2cb8844b50

Google Search Central · Product variant structured data · SHA-256: f793d8e2d48afe66ef0cdd796fe2401e05913a21fd219c1931cb7f1ef0dae5fe

Google Developers · Site Policies · Google documentation attribution and licensing

Official references

References consulted: . The method and worksheet propose checks to adapt to your context; they do not constitute certification.