Schema is partially in place — Shopify's defaults give Watch Vault WebSite, BreadcrumbList, Product, and BlogPosting for free. The score is held back by what's missing: zero LocalBusiness / Organization / Store across 100 % of pages despite a brick-and-mortar; no FAQPage on the FAQs page; no AggregateRating on the Reviews page; no CollectionPage or ItemList on collection PLPs; no SearchAction for sitelinks searchbox; and the Product schema is missing key fields (sku, mpn, itemCondition, multiple images, aggregateRating, hasMerchantReturnPolicy).
Current Coverage
| Type | Pages | Coverage | Verdict |
| WebSite | 100 | 100 % | OK (but minimal: only @type/name/url) |
| BreadcrumbList | 95 | 95 % | OK |
| Product | 24 | 100 % of PDPs | Present, missing fields (see below) |
| BlogPosting | 12 | 92 % of blog posts | No author |
| Organization | 0 | 0 % | Missing |
| LocalBusiness / Store / JewelryStore | 0 | 0 % | Missing — CRITICAL for local pack |
| FAQPage | 0 | 0 % | Missing on /pages/faqs |
| AggregateRating / Review | 0 | 0 % | Missing on /pages/watchvault_reviews |
| CollectionPage / ItemList | 0 | 0 % | Missing on 47 collection pages |
| SearchAction (sitelinks searchbox) | 0 | 0 % | Missing |
| AboutPage / ContactPage | 0 | 0 % | Missing (lower priority) |
Existing Product Schema — Quality Detail
Sample: Rolex GMT-Master II Pepsi PDP.
{
"@type": "Product",
"name": "Rolex GMT-Master II Red Blue Pepsi Jubilee Bracelet Steel 40MM 126710BLRO",
"image": "https://…/57_…_1024x1024.jpg",
"description": "<p><strong>Bezel Color:</strong> Blue</p>…<19 KB of HTML>",
"brand": {"@type": "Brand", "name": "Rolex"},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": 22895.0,
"availability": "http://schema.org/OutOfStock",
"url": "…?variant=42397487038530",
"seller": {"@type": "Organization", "name": "Watch Vault"},
"priceValidUntil": "2027-05-10"
}
}
Gaps to fix on Product
- image is a single URL — should be an array of all gallery images (typically 5–10 per watch)
- description is HTML-escaped from the spec sheet; Google strips HTML, but the dense unstructured prose adds no retrieval signal
- Missing: sku, mpn, gtin13, productID, category, itemCondition (must be UsedCondition for a pre-owned dealer), material, model, color, hasMerchantReturnPolicy, shippingDetails
- No aggregateRating or review on PDPs — even a single review per product unlocks star ratings in SERPs
- availability: OutOfStock on this product — sold-out items still in sitemap; either unpublish + 410 or add mainEntityOfPage + lifecycle hints
Ready-to-Paste Schema — Site-wide JewelryStore
Drop into layout/theme.liquid <head>. JewelryStore is a more specific subtype of LocalBusiness + Store.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "JewelryStore",
"@id": "https://watchvault.us/#organization",
"name": "Watch Vault",
"url": "https://watchvault.us",
"logo": "https://watchvault.us/cdn/shop/files/{{ settings.logo_image_handle }}.png",
"image": "https://watchvault.us/cdn/shop/files/{{ settings.storefront_image_handle }}.jpg",
"description": "Houston's premier luxury watch buyer and seller. Buy and sell pre-owned Rolex, Patek Philippe, Audemars Piguet, Cartier, Omega, IWC, Tudor, Panerai, and 30+ luxury brands at our Bellaire, TX showroom and online.",
"telephone": "+1-281-516-5977",
"email": "mike@watchvault.us",
"address": {
"@type": "PostalAddress",
"streetAddress": "4722 Richmond Ave",
"addressLocality": "Houston",
"addressRegion": "TX",
"postalCode": "{{ FILL_ZIP }}",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": "{{ FILL_LAT }}",
"longitude": "{{ FILL_LON }}"
},
"openingHoursSpecification": [
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "10:00", "closes": "18:00" },
{ "@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "10:00", "closes": "17:00" }
],
"priceRange": "$1,000 - $250,000+",
"currenciesAccepted": "USD",
"paymentAccepted": "Cash, Wire Transfer, Credit Card, Crypto",
"areaServed": [
{"@type":"City","name":"Houston"},
{"@type":"City","name":"Bellaire"},
{"@type":"City","name":"Sugar Land"},
{"@type":"City","name":"The Woodlands"},
{"@type":"State","name":"Texas"}
],
"sameAs": [
"https://www.instagram.com/{{ INSTAGRAM_HANDLE }}",
"https://www.facebook.com/{{ FACEBOOK_HANDLE }}",
"https://www.youtube.com/{{ YOUTUBE_HANDLE }}",
"https://maps.app.goo.gl/{{ GBP_PLACE_ID_SHORTLINK }}"
]
}
</script>
Homepage WebSite + SearchAction
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://watchvault.us/#website",
"url": "https://watchvault.us/",
"name": "Watch Vault",
"publisher": { "@id": "https://watchvault.us/#organization" },
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://watchvault.us/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
</script>
FAQ Page Schema
For /pages/faqs (3,530 words across 8 H2 questions, currently zero schema).
<script type="application/ld+json">
{
"@context":"https://schema.org",
"@type":"FAQPage",
"mainEntity":[
{
"@type":"Question",
"name":"What luxury watch brands do you buy and sell?",
"acceptedAnswer":{"@type":"Answer","text":"Watch Vault buys and sells Rolex, Patek Philippe, Audemars Piguet, Cartier, Omega, IWC, Tudor, Panerai, and 30+ other luxury watch brands. Visit our Houston showroom or send photos for an online quote."}
},
/* ...one per Q/A on the page */
]
}
</script>
Reviews Page — AggregateRating + Review
{
"@context":"https://schema.org",
"@type":"JewelryStore",
"@id":"https://watchvault.us/#organization",
"aggregateRating":{
"@type":"AggregateRating",
"ratingValue":"4.9",
"reviewCount":"{{ FILL_TOTAL_REVIEWS }}"
},
"review":[
{"@type":"Review","author":{"@type":"Person","name":"Mike L."},
"datePublished":"2025-08-12",
"reviewRating":{"@type":"Rating","ratingValue":"5"},
"reviewBody":"…"}
/* one per testimonial */
]
}
Source legality reminder
If reviews are sourced from Google or Yelp, ensure attribution complies with their TOS. Yelp prohibits non-Yelp display of Yelp reviews; Google reviews can be displayed if attributed.
Product Schema Enrichment
{
"sku": "{{ variant.sku }}",
"mpn": "{{ product.metafields.specs.reference_number }}",
"itemCondition": "https://schema.org/UsedCondition",
"category": "Luxury Watch > {{ collection.title }}",
"image": [
"{{ product.images[0] | image_url: width: 1200 }}",
"{{ product.images[1] | image_url: width: 1200 }}",
"{{ product.images[2] | image_url: width: 1200 }}"
],
"additionalProperty": [
{"@type":"PropertyValue","name":"Reference Number","value":"{{ ref_number }}"},
{"@type":"PropertyValue","name":"Movement","value":"{{ movement }}"},
{"@type":"PropertyValue","name":"Case Size","value":"{{ case_size }}"},
{"@type":"PropertyValue","name":"Material","value":"{{ material }}"},
{"@type":"PropertyValue","name":"With Papers","value":"{{ has_papers }}"},
{"@type":"PropertyValue","name":"With Box","value":"{{ has_box }}"}
],
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 7,
"returnMethod": "https://schema.org/ReturnByMail"
}
}
Collection Pages — CollectionPage + ItemList
{
"@context":"https://schema.org",
"@type":"CollectionPage",
"name":"{{ collection.title }}",
"description":"{{ collection.description | strip_html }}",
"url":"{{ shop.url }}{{ collection.url }}",
"mainEntity":{
"@type":"ItemList",
"numberOfItems":{{ collection.products_count }},
"itemListElement":[
{% for product in collection.products limit:24 %}
{"@type":"ListItem","position":{{ forloop.index }},
"url":"{{ shop.url }}{{ product.url }}",
"name":"{{ product.title | escape }}"}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
}
Validation Plan
- After deployment, run all schema through Google Rich Results Test
- Run validation on a representative sample (5 PDPs from different price tiers, 5 collections, 1 of each page type)
- Check for warnings (not just errors) — priceValidUntil, availability, image format are common
- After publishing FAQPage and AggregateRating, monitor Search Console rich-result coverage report
Action Items
Why: Zero Organization, LocalBusiness, or Store schema on any page despite a confirmed Houston brick-and-mortar. Largest single missed opportunity for local pack + AI Overview citations.
How: Drop the JewelryStore snippet from §5.1 above into layout/theme.liquid <head>. Fill FILL_* placeholders (zip 77027, lat/lon, social handles, hours, founded year). Use canonical phone +1-281-516-5977.
Acceptance: https://watchvault.us/ HTML contains "@type":"JewelryStore"; valid in Rich Results Test; addressLocality, geo.latitude, openingHoursSpecification, sameAs all populated.
Apply the §5.5 enrichment block. Bind:
- sku ← variant.sku
- mpn ← product.metafields.specs.reference_number
- itemCondition ← https://schema.org/UsedCondition (sitewide for pre-owned)
- image ← array of all product.images
- additionalProperty ← list of spec metafields
- hasMerchantReturnPolicy ← inline reference to return policy
Acceptance: Validate all 1,629 PDPs via Rich Results Test API; ≥ 99 % pass with no warnings.
Page exists with 8 H2s and 3,530 words but emits no FAQPage schema. Misses rich-result accordion in SERP and is significantly under-cited by AI Overviews.
Convert each FAQ Q+A in pages/faqs.liquid into a structured pair, then emit FAQPage JSON-LD per the §5.3 example above.
Acceptance: Rich Results Test shows valid FAQPage; SERP search for [watch vault faqs] shows accordion expand within 1–2 weeks.
Currently only BreadcrumbList. Apply the §5.6 example above.
Acceptance: All collection pages emit CollectionPage + ItemList JSON-LD; valid in Rich Results Test.
Page has 3,480 words of testimonials but no Review/AggregateRating schema — no SERP star ratings. Apply §5.4 example. If reviews are sourced from Google or Yelp, ensure attribution complies with their TOS.
Pull recent ★★★★★ reviews from GBP via Shopify app or static review snippet. Emit Review JSON-LD inline so the widget contributes to rich-result eligibility on the homepage.