Shopify camera lens schema for AI shopping agents: isAccessoryOrSparePartFor, lens mount lock-in, and crop factor compatibility
A camera lens is useless if it doesn't fit the buyer's body. AI shopping agents know this — but only if your JSON-LD tells them the mount. Without isAccessoryOrSparePartFor and a machine-readable mount value, AI agents treat every lens as a generic accessory and guess at compatibility from the product title string.
isAccessoryOrSparePartFor in their JSON-LDadditionalProperty — mount is only in the title stringContents
- Why mount strings in product titles fail AI agents
- The 8 lens mount reference table
- Crop factor and image circle: the compatibility math
- The 3 APS-C vs full-frame mounting scenarios
- Third-party lenses and the compatibleWith pattern
- isAccessoryOrSparePartFor: linking lens to camera mount
- Complete JSON-LD example: Sony FE zoom lens
- Dawn Liquid snippet for lens.* metafields
- 5 common mistakes
- FAQ
Why mount strings in product titles fail AI agents
Camera lens product titles encode the lens mount in natural language: "Tamron 28-75mm f/2.8 Di III VXD G2 for Sony E-Mount" or "Sigma 35mm f/1.4 DG DN Art (Canon RF)". The mount is there — but it's embedded in a string that AI shopping agents must parse rather than read from a structured field.
This creates three failure modes:
- Mount name ambiguity. "Sony E-Mount", "Sony FE mount", "E-mount", "FE-mount", and "Sony α FE" all refer to the same physical mount. Without a canonical value in
additionalProperty, an AI agent matching "Sony FE" against a listing that says "E-Mount" may treat them as different mounts and exclude the product from the results. - Third-party product code pollution. Sigma's DG DN Art naming convention means "DG = full-frame image circle, DN = mirrorless design, Art = optical quality line" — none of which an AI agent knows without a specification table. "Sigma 35mm f/1.4 DG DN Art for L-Mount" buries the critical mount identifier after product-line codes that are meaningless to a shopping agent parsing a title string.
- APS-C vs full-frame ambiguity within the same mount. The Sony E-mount accepts both APS-C format lenses (designed for A6xxx APS-C bodies) and full-frame FE lenses (designed for A7/A9 full-frame bodies). "E-Mount" in the title doesn't tell an AI agent whether the lens covers the full-frame sensor or only the APS-C crop. Buying an APS-C E-mount lens for a full-frame A7 IV causes severe vignetting — the image circle is too small for the sensor.
The fix requires two machine-readable signals: additionalProperty.lensMount with a canonical mount name, and additionalProperty.imageCoverage with the sensor format the lens covers. Together they give AI agents the filter they need to match lenses to bodies without parsing title strings.
The 8 lens mount reference table
Use these canonical mount names in your additionalProperty — not brand-specific abbreviations like "RF", "Z", or "FE" without the manufacturer prefix, which are ambiguous across ecosystems.
| Canonical Mount Name | Manufacturer(s) | Native sensor formats | Flange distance | Key disambiguation |
|---|---|---|---|---|
| Canon RF | Canon | Full-Frame (primary); APS-C (RF-S designation) | 20mm | Canon RF-S lenses (APS-C format) use the RF physical mount but have a smaller image circle — they vignette on full-frame RF bodies |
| Nikon Z | Nikon | Full-Frame / FX (Z5 II, Z6 III, Z7 III); APS-C / DX (Z30, Z50, Zfc) | 16mm | The widest inner diameter (55mm) of any mirrorless mount; Nikon DX Z lenses are APS-C format only |
| Sony E-Mount | Sony | Full-Frame (FE designation); APS-C (E designation) | 18mm | "FE" indicates full-frame image circle on E-mount — not a different physical mount. A6xxx APS-C bodies accept both FE and E lenses; A7/A9/A1 full-frame bodies accept FE natively but auto-crop when an APS-C E lens is mounted |
| Fujifilm X-Mount | Fujifilm | APS-C only (X-T5, X-S20, X100VI series) | 17.7mm | Fujifilm's GFX medium format system is a completely separate mount — do not conflate X-Mount with GFX Mount in structured data |
| L-Mount | Leica (SL/CL), Panasonic (S-series), Sigma (fp, fp L) | Full-Frame primarily; Leica CL is APS-C | 20mm | L-Mount Alliance (2018): Leica, Panasonic, and Sigma lenses are fully cross-compatible across all three brands' bodies — one of the few true cross-brand native mount standards |
| Micro Four Thirds (MFT) | OM System (OM-1 II, OM-5), Panasonic (GH7, G9 II, S9) | Micro Four Thirds (2× crop factor; 17.3×13mm sensor) | 19.25mm | Full cross-brand compatibility: OM System lenses mount natively on Panasonic MFT bodies and vice versa. Image circle covers MFT sensor only — not compatible with APS-C or full-frame without significant vignetting |
| Canon EF (legacy) | Canon | Full-Frame (EF); APS-C (EF-S — DO NOT adapt to RF full-frame) | 44mm | Canon EF lenses adapt to RF bodies via the Mount Adapter EF-EOS R with full function retention. Canon EF-S (APS-C) lenses physically cannot mount on RF bodies due to the rear element protrusion clearance issue — this is a physical incompatibility, not a software limitation |
| Nikon F (legacy) | Nikon | Full-Frame (FX); APS-C (DX) | 46.5mm | Nikon F lenses adapt to Z bodies via FTZ II adapter. AF-S and AF-I lenses (built-in AF motor) retain autofocus. Older AF lenses with screwdriver drive do NOT autofocus on Z bodies — the Z mount has no AF screwdriver coupling |
In additionalProperty, use the canonical mount name from the first column exactly. For image circle coverage, use a separate PropertyValue entry with "Full-Frame", "APS-C", or "Micro Four Thirds" as the value — do not combine mount and format into a single string.
Crop factor and image circle: the compatibility math
The reason format matters more than mount is image circle coverage. Every lens projects a circular image onto the sensor. The sensor sits in the center of that circle. If the sensor is smaller than the image circle, everything works. If the sensor is larger than the image circle, the corners go dark — vignetting.
| Lens format | Image circle diameter | Sensor diagonal it covers | Crop factor (vs FF) |
|---|---|---|---|
| Full-Frame (FF / FX) | 43.3mm | 36×24mm (1,152mm²) | 1.0× |
| APS-C (Sony/Nikon DX) | 28.4mm | 23.5×15.6mm (~367mm²) | 1.5× |
| APS-C (Canon EF-S / RF-S) | 27.3mm | 22.3×14.9mm (~332mm²) | 1.6× |
| Micro Four Thirds (MFT) | 21.6mm | 17.3×13mm (~225mm²) | 2.0× |
| Medium Format (GFX 100S II) | 55mm+ | 43.8×32.9mm (~1,441mm²) | 0.79× |
The sensor diagonal is the critical number. A full-frame sensor has a 43.3mm diagonal. An APS-C lens projects a 28.4mm circle. 28.4mm < 43.3mm — the circle cannot cover the corners of the FF sensor. This is why an APS-C E-mount lens on a Sony A7 IV creates visible vignetting in all four corners.
The 3 APS-C vs full-frame mounting scenarios
There are three distinct scenarios when APS-C and full-frame formats interact. Each needs a different encoding in your structured data:
| Scenario | Outcome | additionalProperty note to include |
|---|---|---|
| Full-frame lens on APS-C body e.g., Sony FE 24-70mm f/2.8 on Sony A6700 |
Works — no vignetting. 43.3mm circle covers 28.4mm APS-C sensor with margin. Effective focal length multiplied by 1.5× crop factor (35-105mm equivalent on A6700). | "APS-C Compatible: Yes — 1.5× crop factor applies, effective focal length 1.5× stated focal length on APS-C body" |
| APS-C lens on full-frame body e.g., Sony 16-50mm E (APS-C) on Sony A7 IV |
Vignetting without crop mode. 28.4mm circle cannot cover 43.3mm FF sensor diagonal. Camera may auto-crop to APS-C mode (reducing resolution) if OEM lens — third-party lenses may not trigger auto-crop. | "Full-Frame Compatible: No — APS-C image circle only (28.4mm). Vignetting will occur on full-frame bodies unless APS-C crop mode is manually enabled." |
| MFT lens on APS-C or full-frame body e.g., OM System 12-45mm f/4 PRO on any non-MFT body |
Physical incompatibility. Different mount flange; cannot attach without an adapter. Even with adapter, MFT image circle (21.6mm) is smaller than APS-C sensor diagonal (28.4mm) — vignetting regardless. | "Format: Micro Four Thirds only. Not compatible with APS-C or full-frame bodies — different mount and insufficient image circle for sensors larger than MFT." |
The second scenario — APS-C lens on full-frame body — is the one that generates the most returns. It's also the scenario most commonly enabled by AI agents recommending lenses based on mount name alone without format scope. The isAccessoryOrSparePartFor ProductGroup for an APS-C lens must reference an APS-C-scoped group ("Sony APS-C Mirrorless Cameras"), not the full E-Mount ecosystem that includes full-frame A7 bodies.
Third-party lenses and the compatibleWith pattern
Third-party lens manufacturers — Sigma, Tamron, Tokina, Viltrox, Laowa, Venus Optics — produce lenses in multiple mounts for the same optical formula. A Sigma 35mm f/1.4 Art ships in Canon RF, Nikon Z, Sony E-Mount, L-Mount, and previously Canon EF and Nikon F variants. Each variant is a separate product that needs its own isAccessoryOrSparePartFor and compatibleWith entries.
The compatibleWith property lists specific camera bodies where compatibility has been verified. For a third-party Sony FE lens, this typically includes the major A7/A9 bodies:
"compatibleWith": [
{
"@type": "Product",
"name": "Sony Alpha 7 IV (ILCE-7M4)",
"brand": { "@type": "Brand", "name": "Sony" }
},
{
"@type": "Product",
"name": "Sony Alpha 7R V (ILCE-7RM5)",
"brand": { "@type": "Brand", "name": "Sony" }
},
{
"@type": "Product",
"name": "Sony Alpha 9 III (ILCE-9M3)",
"brand": { "@type": "Brand", "name": "Sony" }
},
{
"@type": "Product",
"name": "Sony Alpha 1 II (ILCE-1M2)",
"brand": { "@type": "Brand", "name": "Sony" }
},
{
"@type": "Product",
"name": "Sony ZV-E1 (Full-Frame Vlog Camera)",
"brand": { "@type": "Brand", "name": "Sony" }
}
]
For Sigma's cross-mount naming conventions, include the Sigma product line code as an additionalProperty so buyers searching by Sigma's own nomenclature can still find the lens via structured data:
{
"@type": "PropertyValue",
"name": "Sigma Product Line Code",
"value": "DG DN Art",
"description": "DG = full-frame image circle; DN = mirrorless-native optical design (optimized for short flange distance); Art = Sigma Contemporary Art line (maximum optical performance priority)"
}
The description field explanation of the Sigma code is not redundant — it gives AI agents the context to correctly associate "Sigma Art" with "maximum optical quality" in buyer-facing responses, and to understand "DG" as a full-frame signal when image circle coverage isn't stated separately.
Adapter compatibility: Canon EF on RF bodies
If you sell legacy Canon EF or Nikon F lenses alongside the bodies that use the Canon EF-EOS R adapter or Nikon FTZ II adapter, encode adapter compatibility explicitly. The buyer pool for EF lenses is substantially expanded by RF body owners who use the adapter:
{
"@type": "PropertyValue",
"name": "RF Mount Adapter Compatible",
"value": "Yes — Canon Mount Adapter EF-EOS R (sold separately)",
"description": "All EF lens functions retained on Canon RF bodies including autofocus, image stabilization, and aperture control. Compatible adapters: Canon Mount Adapter EF-EOS R (standard), Canon Control Ring Mount Adapter EF-EOS R (adds control ring), Canon Drop-In Filter Mount Adapter EF-EOS R (adds ND/CPL filter slot)."
}
For Nikon F lenses, include the AF motor caveat that generates the most buyer confusion:
{
"@type": "PropertyValue",
"name": "Nikon Z Mount Adapter Compatible",
"value": "Yes — Nikon FTZ II Mount Adapter (sold separately)",
"description": "Autofocus available ONLY for lenses with built-in AF motor (AF-S, AF-I designation). Older AF lenses with screwdriver-drive coupling do NOT autofocus on Z bodies — Nikon Z mount has no AF coupling screw. AF-P lenses: autofocus supported. All lenses retain aperture control and exposure metering."
}
isAccessoryOrSparePartFor: linking lens to camera mount
The schema.org/isAccessoryOrSparePartFor property creates the machine-readable "this product is an accessory for" relationship. For camera lenses, it links the lens to the camera mount ecosystem it belongs to — allowing AI shopping agents to filter lens results by the buyer's camera body without having to parse mount names from title strings.
The target of isAccessoryOrSparePartFor should be a ProductGroup representing the mount ecosystem, not an individual camera body. This is because a lens is an accessory for the entire Canon RF ecosystem, not just the R5 Mark II:
"isAccessoryOrSparePartFor": {
"@type": "ProductGroup",
"name": "Canon RF Full-Frame Mirrorless Cameras",
"description": "Canon EOS R3, R5 Mark II, R5, R6 Mark II, R6, R8, R50 (full-frame RF bodies). Also compatible with Canon APS-C RF-S bodies (EOS R7, R10, R50) with 1.6× crop factor.",
"url": "https://www.bhphotovideo.com/c/browse/canon-rf-cameras/ci/22959"
}
The description field within the ProductGroup is the right place to document crop factor behavior on APS-C RF bodies — this is a note about the relationship between the lens and a subset of bodies in the ecosystem, not a property of the lens itself.
For APS-C format lenses where the ProductGroup scope must be restricted to APS-C bodies only, scope the ProductGroup name and description explicitly:
"isAccessoryOrSparePartFor": {
"@type": "ProductGroup",
"name": "Sony APS-C Mirrorless Cameras (E-Mount, APS-C sensor)",
"description": "Sony Alpha A6700, A6600, A6400, A6100, ZV-E10 II — APS-C bodies only. NOT compatible without vignetting on Sony full-frame bodies (A7, A9, A1 series) unless APS-C crop mode is manually enabled.",
"url": "https://www.sony.com/en/products/cameras/aps-c/"
}
The "NOT compatible without vignetting" language in the ProductGroup description is the machine-readable incompatibility signal. AI shopping agents parse this to correctly exclude the lens from results when the buyer specifies a full-frame body.
Complete JSON-LD example: Sony FE zoom lens
A complete Product structured data block for a Tamron 28-75mm f/2.8 Di III VXD G2 in Sony FE mount, as it would appear in a <script type="application/ld+json"> tag in the product page <head>:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Tamron 28-75mm f/2.8 Di III VXD G2 for Sony FE (Model A063)",
"description": "Full-frame standard zoom lens for Sony E-Mount mirrorless cameras. 28-75mm range with constant f/2.8 aperture. Optimized for Sony A7 and A9 series full-frame bodies. Includes moisture-resistant construction and internal zoom design. Not an OEM Sony lens — third-party with Sony E-Mount protocol compatibility.",
"brand": {
"@type": "Brand",
"name": "Tamron"
},
"sku": "A063S",
"gtin13": "4960371006505",
"isAccessoryOrSparePartFor": {
"@type": "ProductGroup",
"name": "Sony Full-Frame Mirrorless Cameras (E-Mount FE)",
"description": "Sony Alpha 7 IV, 7R V, 7C II, 7S III, 9 III, 1 II, ZV-E1 — full-frame E-Mount bodies. Also usable on Sony APS-C E-Mount bodies (A6700, A6600) with 1.5× crop factor, effective focal length 42-112mm f/2.8."
},
"compatibleWith": [
{ "@type": "Product", "name": "Sony Alpha 7 IV (ILCE-7M4)", "brand": { "@type": "Brand", "name": "Sony" } },
{ "@type": "Product", "name": "Sony Alpha 7R V (ILCE-7RM5)", "brand": { "@type": "Brand", "name": "Sony" } },
{ "@type": "Product", "name": "Sony Alpha 7C II (ILCE-7CM2)", "brand": { "@type": "Brand", "name": "Sony" } },
{ "@type": "Product", "name": "Sony Alpha 9 III (ILCE-9M3)", "brand": { "@type": "Brand", "name": "Sony" } },
{ "@type": "Product", "name": "Sony Alpha 1 II (ILCE-1M2)", "brand": { "@type": "Brand", "name": "Sony" } }
],
"additionalProperty": [
{
"@type": "PropertyValue",
"name": "Lens Mount",
"value": "Sony E-Mount"
},
{
"@type": "PropertyValue",
"name": "Image Circle Coverage",
"value": "Full-Frame (43.3mm image circle — covers 36×24mm FF sensor with no vignetting)"
},
{
"@type": "PropertyValue",
"name": "Focal Length",
"value": "28-75mm (zoom)",
"description": "Standard to short telephoto range. On Sony APS-C bodies: effective 42-112mm (1.5× crop factor)."
},
{
"@type": "PropertyValue",
"name": "Maximum Aperture",
"value": "f/2.8 (constant throughout zoom range)"
},
{
"@type": "PropertyValue",
"name": "Optical Stabilization",
"value": "No optical stabilization (OS)",
"description": "Relies on in-body image stabilization (IBIS) from compatible Sony bodies. Sony A7 IV: 5.5-stop IBIS. Sony A7R V: 8-stop IBIS with lens coordination."
},
{
"@type": "PropertyValue",
"name": "Autofocus Motor",
"value": "VXD linear motor (Voice coil eXtreme-torque Drive)",
"description": "Tamron's VXD AF motor: high-speed, silent autofocus compatible with Sony's Fast Hybrid AF (phase-detect + contrast-detect). Full eye-tracking and animal-tracking AF compatibility on A7 IV and A9 III."
},
{
"@type": "PropertyValue",
"name": "Filter Thread Diameter",
"value": "67mm"
},
{
"@type": "PropertyValue",
"name": "Minimum Focus Distance",
"value": "19cm (wide end) / 38cm (tele end)"
},
{
"@type": "PropertyValue",
"name": "Weather Sealing",
"value": "Yes — moisture-resistant construction",
"description": "Tamron moisture-resistant construction with sealing at critical joints. Not IP-rated — no independent certification number. Suitable for light rain; not submersion."
},
{
"@type": "PropertyValue",
"name": "Zoom Type",
"value": "Internal zoom (barrel does not extend during zoom)"
},
{
"@type": "PropertyValue",
"name": "Tamron Product Line Code",
"value": "Di III VXD G2",
"description": "Di III = designed exclusively for mirrorless cameras (Di = Digitally Integrated design; III = mirrorless-only); VXD = VXD linear AF motor; G2 = second generation of this optical design."
}
],
"offers": {
"@type": "Offer",
"price": "699.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"priceValidUntil": "2026-07-01",
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": ["https://schema.org/ReturnByMail"],
"returnFees": "https://schema.org/FreeReturn"
}
}
}
Dawn Liquid snippet for lens.* metafields
Add the following metafields to your camera lens products in Shopify Admin (Settings → Custom data → Products), then use this snippet in sections/main-product.liquid to output lens-specific structured data:
{% comment %} Camera lens structured data — place in main-product.liquid {% endcomment %}
{% assign is_camera_lens = false %}
{% if product.metafields.lens.mount != blank %}
{% assign is_camera_lens = true %}
{% endif %}
{% if is_camera_lens %}
{% assign lens_mount = product.metafields.lens.mount | default: '' %}
{% assign lens_format = product.metafields.lens.format | default: '' %}
{% assign lens_focal = product.metafields.lens.focal_length | default: '' %}
{% assign lens_aperture = product.metafields.lens.max_aperture | default: '' %}
{% assign lens_filter = product.metafields.lens.filter_thread | default: '' %}
{% assign lens_mfd = product.metafields.lens.min_focus_distance | default: '' %}
{% assign lens_af = product.metafields.lens.af_motor | default: '' %}
{% assign lens_os = product.metafields.lens.optical_stabilization | default: '' %}
{% assign lens_sealed = product.metafields.lens.weather_sealed | default: false %}
{% assign lens_zoom_type = product.metafields.lens.zoom_type | default: '' %}
{% assign lens_compatible_group = product.metafields.lens.compatible_body_group | default: '' %}
{% assign lens_compatible_url = product.metafields.lens.compatible_body_url | default: '' %}
{% endif %}
Metafield definitions for your Shopify store (namespace: lens):
| Metafield key | Type | Example value |
|---|---|---|
lens.mount |
Single line text | Sony E-Mount |
lens.format |
Single line text | Full-Frame (43.3mm image circle — covers 36×24mm FF sensor) |
lens.focal_length |
Single line text | 28-75mm (zoom) |
lens.max_aperture |
Single line text | f/2.8 (constant throughout zoom range) |
lens.filter_thread |
Single line text | 67mm |
lens.min_focus_distance |
Single line text | 19cm (wide) / 38cm (tele) |
lens.af_motor |
Single line text | VXD linear motor — silent, full Eye AF support |
lens.optical_stabilization |
Single line text | No — relies on Sony body IBIS |
lens.weather_sealed |
True/False | true |
lens.zoom_type |
Single line text | Internal zoom (barrel does not extend) |
lens.compatible_body_group |
Single line text | Sony Full-Frame Mirrorless Cameras (E-Mount FE) |
lens.compatible_body_url |
URL | https://www.sony.com/en/products/cameras/full-frame/ |
5 common mistakes
Using "E-mount" and "FE" as synonyms in additionalProperty
"E-mount" is the physical mount specification. "FE" is a format designation meaning full-frame coverage on the E-mount. They describe different dimensions of the lens. A lens can be "E-mount format, APS-C coverage" (a crop lens) or "E-mount format, full-frame coverage" (an FE lens). Using "E-mount" alone for the lens mount and skipping the image coverage value means AI agents cannot distinguish APS-C crop lenses from full-frame FE lenses within the Sony ecosystem — the most consequential compatibility filter on any Sony lens listing.
Using isRelatedTo instead of isAccessoryOrSparePartFor
isRelatedTo expresses "this product has a general association with another product" — it carries no compatibility or accessory semantics. AI shopping agents parse isAccessoryOrSparePartFor specifically to identify accessories for a given body. Using isRelatedTo for the lens-to-camera relationship produces a product that looks related to a camera mount but does not signal "this is an accessory designed to fit this mount" — the distinction between product association and accessory relationship is exactly what AI agents use to filter lens-compatible results.
One product with mount variants instead of one product per mount
Creating a single Shopify product with "Mount" as a variant option (Canon RF / Nikon Z / Sony FE) forces all mount variants to share a single isAccessoryOrSparePartFor — which must either be left blank or reference all mount ecosystems simultaneously. The result is a lens that AI agents cannot confidently assign to any specific mount query. Create one product per mount. The operational overhead is real but the structured data benefit is essential: each mount variant needs its own ProductGroup reference and its own compatibleWith body list.
Omitting crop factor behavior for full-frame lenses sold on APS-C-heavy stores
A 50mm full-frame lens sold on a store where many buyers have APS-C bodies becomes a 75mm effective on those bodies. This effective focal length change is a purchase decision signal — a landscape photographer looking for a "wide 24mm" experience buying a 24mm FF lens for their APS-C body gets 36mm effective, not wide. Include the crop factor note in additionalProperty: "APS-C Compatible: Yes — 1.5× crop factor applies on APS-C bodies (1.6× on Canon APS-C). Effective focal length: 75mm on Sony/Nikon APS-C." The buyer who knows this buys correctly; the buyer who doesn't gets a surprise.
Missing adapter compatibility for legacy mount lenses
Canon EF lenses with an adapter-compatible ProductGroup entry reach every Canon RF body owner — a market that is now far larger than the EF DSLR body installed base. Without "RF Mount Adapter Compatible: Yes — Canon Mount Adapter EF-EOS R" in additionalProperty and a corresponding isAccessoryOrSparePartFor ProductGroup for RF bodies, you exclude your EF lens from every "Canon RF compatible lens" query. The adapter users are buying used EF lenses specifically because they retain full function on RF bodies — they're the highest-intent buyers in the Canon lens market, and they're invisible to your listing if you don't encode adapter compatibility.
FAQ
Should I use isAccessoryOrSparePartFor to link to every individual camera body, or to a ProductGroup?
For third-party lenses and first-party lenses that fit all bodies with a given mount, link to a ProductGroup representing the full mount ecosystem — e.g., "Canon RF Full-Frame Mirrorless Cameras". This is lower maintenance and correctly captures the full compatibility scope. Reserve individual Product links within compatibleWith for bodies where you've explicitly verified compatibility. The distinction: isAccessoryOrSparePartFor establishes the category relationship ("this is a Canon RF lens"), while compatibleWith lists verified specific models ("confirmed working on EOS R5 Mark II, R6 Mark II, R3"). Both together give AI agents the broad filter and the confidence check.
How do I handle a third-party lens available in multiple mounts — one product or one per mount?
One Shopify product per mount variant. A Sigma 35mm f/1.4 Art for Canon RF and the same lens for Sony FE are different products from the perspective of every compatibility signal — mount, image circle coverage, autofocus protocol, and compatibleWith bodies all differ. Using product variants for mount selection forces the isAccessoryOrSparePartFor to be ambiguous across all mount variants simultaneously, which breaks the compatibility filter. Create separate products with separate mount-specific ProductGroup references.
How do I encode an APS-C format lens so AI agents warn buyers with full-frame bodies?
Two signals create the machine-readable warning: (1) Set "Image Circle Coverage" to "APS-C only (28.4mm circle — not compatible with full-frame 36×24mm sensor without vignetting)". The word "vignetting" is the key term AI agents parse to surface the incompatibility warning. (2) Scope isAccessoryOrSparePartFor to APS-C bodies only — "Sony APS-C Mirrorless Cameras (E-Mount, APS-C)" rather than the broader E-Mount ecosystem. Without this scope restriction, an AI agent sees "Sony E-Mount" and considers the lens compatible with all E-Mount bodies including full-frame A7.
What is the difference between isAccessoryOrSparePartFor and compatibleWith for camera lenses?
isAccessoryOrSparePartFor establishes what product category this is an accessory for — "what mount ecosystem does this lens belong to?" at a category level. It typically points to a ProductGroup. compatibleWith lists specific products that have been confirmed to work together — "which exact camera models does this work with?" Use both. isAccessoryOrSparePartFor without compatibleWith gives mount scope but no model-level confidence. compatibleWith without isAccessoryOrSparePartFor buries the mount relationship inside a list of body names that AI agents must reverse-engineer.
Should I encode adapter compatibility for Canon EF lenses on Canon RF bodies?
Yes — adapter compatibility is a significant buyer pool. For Canon EF lenses, add a second isAccessoryOrSparePartFor referencing "Canon RF Mirrorless Bodies (via Mount Adapter EF-EOS R)" and add an additionalProperty "RF Adapter Compatible: Yes — Canon Mount Adapter EF-EOS R (sold separately; all EF functions including IS and autofocus are retained with the official Canon adapter)." For Nikon F lenses, encode the AF motor caveat: AF-S/AF-I lenses autofocus via FTZ II adapter; older screwdriver-drive AF lenses do not. This prevents returns from buyers who expected full adapter parity across all legacy Nikon F lenses.
Is your camera lens catalog AI-ready?
CatalogScan checks your Shopify store for missing isAccessoryOrSparePartFor, orphaned lens mount data, and APS-C vs full-frame signals that AI shopping agents need for compatibility filtering.