Why compatibility needs structure
A recommendation such as “battery doorbell for 2.4 GHz Wi-Fi without existing wiring” cannot be answered from the phrase “easy installation.” It requires explicit power, network, installation, and exclusion facts.
Worked case: Ring Australia Battery Video Doorbell
Observed public facts on July 27, 2026 included:
| Dimension | Public fact |
|---|---|
| primary power | built-in rechargeable battery |
| optional wiring | 8–24 VAC within documented limits |
| network | 2.4 GHz Wi-Fi |
| recommended upload | 2 Mbps |
| installation | approximately five minutes |
| operating range | -20°C to 50°C |
| dimensions | 6.19 × 2.30 × 12.65 cm |
| feature qualification | selected alerts require a subscription |
This is strong evidence because unsupported conditions are documented alongside supported ones.
Step 1: define typed fields
In Shopify admin:
Settings → Custom data → Products
Create fields appropriate to the catalog, for example:
compatibility.power_source single-line text or controlled list
compatibility.wiring_range single-line text
compatibility.wifi_bands list of single-line text
compatibility.minimum_upload measurement or text
compatibility.operating_range structured text/metaobject
compatibility.exclusions list of single-line text
compatibility.subscription_notes rich text
Use metaobjects when several related fields repeat across product families. Avoid one giant rich-text field if buyers filter or compare individual dimensions.
Step 2: publish visible semantic HTML
{% assign wifi_bands = product.metafields.compatibility.wifi_bands.value %}
<section class="product-compatibility" aria-labelledby="compatibility-heading">
<h2 id="compatibility-heading">Compatibility and requirements</h2>
<dl>
{% if product.metafields.compatibility.power_source.value != blank %}
<div>
<dt>Power</dt>
<dd>{{ product.metafields.compatibility.power_source.value | escape }}</dd>
</div>
{% endif %}
{% if wifi_bands != blank %}
<div>
<dt>Wi-Fi</dt>
<dd>{{ wifi_bands | join: ', ' | escape }}</dd>
</div>
{% endif %}
{% if product.metafields.compatibility.minimum_upload.value != blank %}
<div>
<dt>Recommended upload speed</dt>
<dd>{{ product.metafields.compatibility.minimum_upload.value | escape }}</dd>
</div>
{% endif %}
</dl>
{% if product.metafields.compatibility.exclusions.value != blank %}
<h3>Not compatible with</h3>
<ul>
{% for exclusion in product.metafields.compatibility.exclusions.value %}
<li>{{ exclusion | escape }}</li>
{% endfor %}
</ul>
{% endif %}
</section>
A definition list gives each value a visible label. Do not rely on icons, tooltips, or an image of a specification table.
Step 3: separate product and policy claims
“Works without a subscription” and “selected smart alerts require a subscription” can both be true for different features. Record the scope:
base_functions:
- live view
- two-way talk
subscription_functions:
- selected person or package alerts
terms_url: canonical subscription policy
Link the policy instead of copying volatile prices into every product description.
Step 4: connect compatibility to variants
Voltage, plug, size, device generation, or regional certification may differ by variant. Store those values on variants or linked metaobjects when they are not shared by the parent product.
Expected result
A shopper and retrieval client can answer:
- what conditions are required
- what is supported
- what is explicitly unsupported
- whether a subscription changes feature availability
- which market the specification applies to
Common failures
- compatibility exists only in a PDF
- icons have no text labels
- accordion content loads only after an API request
- a universal Product description mixes regional voltage
- accessory compatibility lists outdated device generations
- subscription conditions are omitted from marketing summaries
Verification
Fetch the canonical product HTML and search the decisive values:
curl -sSL https://example.com/products/example-product -o product.html
rg -n '2.4 GHz|8.?24 VAC|subscription|not compatible|upload speed' product.html
Verify mobile, selected variants, and one intentionally incompatible product.
Community discussion
Add to the article
Ask a technical question, share a storefront result, or challenge a conclusion with evidence.