When Your Products Have No Structured Data
If your diagnostic testing revealed that Google’s Rich Results Test finds no Product schema on your pages, you’re dealing with a complete absence of structured data markup. This is actually the easiest scenario to fix, as you’ll be implementing clean, new schema without worrying about conflicting existing code.
Understanding Why Schema Might Be Missing
Several factors can lead to missing Product schema on Shopify stores:
Minimal Theme Implementation: Some Shopify themes, particularly custom or heavily modified ones, don’t include comprehensive structured data markup.
App Conflicts: Poorly designed apps might remove existing schema or prevent proper schema implementation.
Theme Updates: Updating your Shopify theme can sometimes remove custom schema implementations.
Developer Oversights: Custom theme development might focus on visual design while overlooking SEO-critical structured data.
The Complete Product Schema Solution
Here’s the comprehensive JSON-LD schema markup that will resolve your price mismatch errors by ensuring Google receives the same accurate data that ShoppingFeeder provides in your feed.
Step-by-Step Implementation
Step 1: Access Your Theme Files
- From your Shopify admin, navigate to Online Store > Themes
- Click “Actions” > “Edit code” on your live theme
- In the Templates folder, open
product.liquid
Step 2: Add the Schema Markup
Insert this code in your product.liquid
file, ideally near the top of the file but after any existing liquid variable declarations:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "{{ product.title | escape }}",
"description": "{{ product.description | strip_html | strip_newlines | escape }}",
"sku": "{{ product.selected_or_first_available_variant.sku }}",
"mpn": "{{ product.selected_or_first_available_variant.barcode }}",
"brand": {
"@type": "Brand",
"name": "{{ product.vendor | escape }}"
},
"image": [
{% for image in product.images limit: 5 %}
"{{ image | img_url: 'master' }}"{% unless forloop.last %},{% endunless %}
{% endfor %}
],
"offers": {
"@type": "Offer",
"url": "{{ shop.url }}{{ product.url }}",
"priceCurrency": "{{ cart.currency.iso_code }}",
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency }}",
"priceValidUntil": "{{ 'now' | date: '%Y' | plus: 1 }}-12-31",
"availability": "{% if product.selected_or_first_available_variant.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}",
"itemCondition": "https://schema.org/NewCondition",
"seller": {
"@type": "Organization",
"name": "{{ shop.name | escape }}"
}
}
}
</script>
Step 3: Handle Variant-Specific Pricing
The schema above uses product.selected_or_first_available_variant
, which works well for most scenarios. However, if your store heavily relies on variant-specific pricing and you need dynamic updates when customers select different options, you’ll need additional JavaScript implementation (covered in Guide 4).
Key Elements Explained
Price Formatting: The money_without_currency
filter ensures the price appears as a numeric value, matching the format Google expects and your ShoppingFeeder feed provides.
Currency Handling: Using cart.currency.iso_code
ensures the currency matches your customer’s locale and your feed settings.
Availability Logic: The conditional availability setting automatically reflects your Shopify inventory status.
Image Array: Including multiple product images helps Google better understand your products and can improve performance in Google Shopping.
Testing Your Implementation
After saving your changes:
- Wait 10-15 minutes for changes to propagate
- Test a product page using Google’s Rich Results Test
- Verify that all key fields appear correctly:
- Product name, description, and brand
- Accurate pricing that matches your ShoppingFeeder data
- Proper currency formatting
- Availability status
- Product images
Troubleshooting Common Issues
Liquid Syntax Errors: Double-check that all Liquid tags are properly closed and formatted. A single syntax error can break the entire schema.
Price Formatting Problems: If prices appear with currency symbols in the schema, review the money_without_currency
filter implementation.
Missing Product Data: Ensure your products have the required fields (title, description, price) filled out in your Shopify admin.
Validation and Monitoring
Once implemented, your product pages will provide Google with the same accurate, real-time data that ShoppingFeeder delivers through your feed. This alignment will resolve price mismatch errors and improve your Google Shopping performance.
Monitor your Google Merchant Center account over the next 24-48 hours to confirm that price mismatch errors decrease as Google re-crawls your updated product pages.