---
title: "Can variants (size, color) be addressed? · Specoria"
description: "Can variants (size, color) be addressed?: An agent can fulfil “size M in navy” only if the variant is defined with its own URL and price."
source_url: "https://specoria.com/method/checks/variants/"
lang: "en"
---

[← All checks](https://specoria.com/method/checks/)
variants

# Can variants (size, color) be addressed?

Why it matters An agent can fulfil “size M in navy” only if the variant is defined with its own URL and price.

**Category**
Product data

**Weight**
2 of 100 points

**Critical blocker**
No. If it fails, it only costs its own weight.

**Applies to**
Online stores

**Effort**
1-2 days · developer

**Score model**
v2.4

## How we measure it

Variants described as ProductGroup + hasVariant in structured data pass; if there are at least two colour variants, each colour needs its own distinct image, otherwise it’s a partial pass (size-only variants aren’t checked for images). If the page has a size/colour selector but no such data: options with their own URLs are a partial pass, options without fail. Products without a selector are not applicable.

### What the result page says

These are the sentences in the test result; “…” is replaced by what we found on your site.

- Passed Variants are defined with ProductGroup + hasVariant or separate offers.
- Partial Variants open at their own URLs, but structured data has no ProductGroup + hasVariant.
- Partial Colour variants don’t each declare their own image, so an agent asked for “the black one” can’t show the right photo.
- Failed There’s a size/color picker, but variants don’t open at their own URLs; an agent can’t pick the right variant and link to it.

## How to fix it

**Target:** Every variant opens at its own URL; structured data uses ProductGroup + hasVariant and variesBy.

### Example code

`{
"@type": "ProductGroup",
"name": "Sample product",
"productGroupID": "GROUP-001",
"variesBy": ["https://schema.org/size", "https://schema.org/color"],
"hasVariant": [
{ "@type": "Product", "sku": "GROUP-001-M", "size": "M",
"offers": { "@type": "Offer", "price": "49.90", "priceCurrency": "USD", "url": "https://example.com/products/sample?size=M" } }
]
}`
Example values (example.com, product name, price) are placeholders; replace them with your own.

### How to verify it yourself

Open a variant URL (e.g. ?variant=… or ?size=M) in a new tab: the right option and price should load.

### Fix it with an AI coding agent

Paste this into Claude Code, Cursor or another coding agent working on your store’s code. Review the change before you deploy it.

`You are working on my online store. Specoria’s agent readiness test checks the item below. Fix it so AI shopping agents can read the store and act on it.

## 1. Can variants (size, color) be addressed? (variants)
Target: Every variant opens at its own URL; structured data uses ProductGroup + hasVariant and variesBy.
Example fix (adapt it to this codebase and platform; example values are placeholders):
```
{
"@type": "ProductGroup",
"name": "Sample product",
"productGroupID": "GROUP-001",
"variesBy": ["https://schema.org/size", "https://schema.org/color"],
"hasVariant": [
{ "@type": "Product", "sku": "GROUP-001-M", "size": "M",
"offers": { "@type": "Offer", "price": "49.90", "priceCurrency": "USD", "url": "https://example.com/products/sample?size=M" } }
]
}
```
Reference: https://specoria.com/method/checks/variants/

## Rules
- First look through the codebase and tell me which files or templates you will change, before editing anything.
- Change only what these checks need, and keep the visible page and the structured data saying the same thing.
- Never invent prices, stock, shipping or return terms, reviews or product identifiers (GTIN): take them from the store’s real data or ask me.
- Don’t block or slow down real visitors and don’t add tracking.
- After deploying, run the free test again at https://specoria.com/ to verify the fix.`

## Specifications and guidance

- [schema.org/ProductGroup ↗](https://schema.org/ProductGroup)
- [Google: product variants ↗](https://developers.google.com/search/docs/appearance/structured-data/product-variants)

The check is based on these open sources; links go to the publisher’s own pages.

## Where it sits in the 196-criteria framework

The result of this check counts as evidence for these items of the readiness framework:

- `2.9` Variants are modelled correctly

[The framework and its source →](https://specoria.com/method/#criteria)

[← PreviousReviews and rating](https://specoria.com/method/checks/reviews/)[Next →Machine-readable return policy](https://specoria.com/method/checks/returns-machine/)

[Run the free test](https://specoria.com/method/checks/variants/#test) [See the sample report →](https://specoria.com/reports/sample-report/)

## Related

- [Product structured data (schema.org)](https://specoria.com/method/checks/product-schema/)
- [Price, currency, availability and URL](https://specoria.com/method/checks/offer-complete/)
- [Agent Readiness Index 2027](https://specoria.com/index/) How the benchmarked stores scored, with open data
- [Glossary and formulas](https://specoria.com/glossary/) Every metric, defined the way we compute it

FREE TEST

## Test your store now

Enter your store’s address: 27 checks on your public pages, the way a shopping agent reads them.

The free test runs in your browser and needs JavaScript. [Request the free deep audit by email instead →](https://specoria.com/#contact)

Your result opens on its own page. Want the full picture? The free deep audit and panel come next, by email.
