Each hasVariant entry points back at the containing ProductGroup via
isVariantOf: { "@id": … }. Empirical question: does Google emit exactly one
Merchant listing per variant (not one per variant squared), and does it avoid
flagging the resolved isVariantOf reference as an invalid object type?