Skip to content

Default Snippets Reference

This document describes all pre-installed rich snippets included with the SEO Rich Snippets module.

Snippet Installation Tiers

Snippets are installed in tiers based on priority and common usage:

  • Tier 1: Primary Ecommerce Snippets (Product, Organization, WebSite)
  • Tier 2: High-Value Enhancements (FAQPage, ItemList, ProductGroup)
  • Tier 3: Business Information (Store, LocalBusiness, AboutPage, ContactPage)
  • Tier 4: Media and Content (VideoObject, Article, BlogPosting)
  • Tier 5: Additional Schemas (Event, Recipe, HowTo)

Tier 1: Primary Ecommerce Snippets

Product

Identifier: product Page Type: Product pages Status: Active by default

The main product schema with offers, reviews, and ratings.

{
    "@context": "https://schema.org/",
    "@type": "Product",
    "name": "{{product.name}}",
    "description": "{{product.shortDescription}}",
    "sku": "{{product.sku}}",
    "image": "{{product.image}}",
    "@djson if product.manufacturer": {
        "brand": {
            "@type": "Brand",
            "name": "{{product.manufacturer}}"
        }
    },
    "offers": "{{snippet.offer}}",
    "@djson if product.reviewCount": {
        "aggregateRating": "{{snippet.aggregate-rating}}",
        "review": {
            "@djson for productReviews as review": "{{snippet.review}}"
        }
    }
}

Features: - Product information (name, SKU, image, description) - Brand information (conditional) - Nested offer with pricing and availability - Aggregate rating (conditional on reviews existing) - Individual reviews with loop

Dependencies: - {{snippet.offer}} - Offer snippet - {{snippet.aggregate-rating}} - AggregateRating snippet - {{snippet.review}} - Review snippet

Offer

Identifier: offer Status: Active (reusable component)

Product offer with pricing, availability, shipping, and return policy.

{
    "@type": "Offer",
    "url": "{{product.productUrl}}",
    "priceCurrency": "{{store.currencyCode}}",
    "price": "{{product.finalPrice}}",
    "priceValidUntil": "{{enum.priceValidUntil}}",
    "availability": "{{enum.availability.InStock}}",
    "itemCondition": "{{enum.itemCondition.NewCondition}}",
    "seller": "{{snippet.organization}}",
    "shippingDetails": "{{snippet.shipping-details}}",
    "hasMerchantReturnPolicy": "{{snippet.merchant-return-policy}}"
}

Features: - Current price and currency - Price valid until date - Availability status - Item condition (new/used) - Seller organization - Shipping details - Return policy

Dependencies: - {{snippet.organization}} - Organization snippet - {{snippet.shipping-details}} - ShippingDetails snippet - {{snippet.merchant-return-policy}} - ReturnPolicy snippet

Shipping Details

Identifier: shipping-details Status: Active (reusable component)

{
    "@type": "OfferShippingDetails",
    "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "{{store.currencyCode}}"
    },
    "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
    },
    "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": {
            "@type": "QuantitativeValue",
            "minValue": 0,
            "maxValue": 1,
            "unitCode": "DAY"
        },
        "transitTime": {
            "@type": "QuantitativeValue",
            "minValue": 3,
            "maxValue": 7,
            "unitCode": "DAY"
        }
    }
}

Customization: Update handling/transit times and destination based on your shipping policy.

Merchant Return Policy

Identifier: merchant-return-policy Status: Active (reusable component)

{
    "@type": "MerchantReturnPolicy",
    "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
    "merchantReturnWindow": {
        "@type": "QuantitativeValue",
        "value": 30,
        "unitText": "Day"
    },
    "returnMethod": "https://schema.org/ReturnByMail",
    "returnFees": "https://schema.org/FreeReturn"
}

Customization: Update return window and fees based on your policy.

Review

Identifier: review Status: Active (reusable component)

{
    "@type": "Review",
    "reviewRating": {
        "@type": "Rating",
        "ratingValue": "{{review.rating}}",
        "bestRating": "5"
    },
    "author": {
        "@type": "Person",
        "name": "{{review.nickname}}"
    },
    "reviewBody": "{{review.detail}}",
    "datePublished": "{{review.createdAt}}"
}

Usage: Used inside Product snippet with @djson for productReviews as review loop.

Aggregate Rating

Identifier: aggregate-rating Status: Active (reusable component)

{
    "@type": "AggregateRating",
    "ratingValue": "{{product.ratingValue}}",
    "reviewCount": "{{product.reviewCount}}",
    "bestRating": "5",
    "worstRating": "0"
}

Note: ratingValue is automatically converted from Magento's 0-100 scale to Google's 1-5 scale.

Organization

Identifier: organization Page Type: Homepage Status: Active by default

Company information for Google Knowledge Graph.

{
    "@context": "https://schema.org/",
    "@type": "Organization",
    "name": "{{config.general.store_information.name}}",
    "url": "{{config.web.secure.base_url}}",
    "logo": "{{config.web.secure.base_url}}media/logo/default/logo.svg",
    "address": "{{snippet.organization-address}}",
    "sameAs": "{{snippet.organization-social-links}}",
    "contactPoint": {
        "@type": "ContactPoint",
        "contactType": "customer service",
        "telephone": "{{config.general.store_information.phone}}",
        "email": "{{config.trans_email.ident_general.email}}"
    }
}

Required Configuration: - Store name (Stores → Configuration → General → Store Information) - Store phone and address - Upload logo to pub/media/logo/default/logo.svg

Dependencies: - {{snippet.organization-address}} - Organization address - {{snippet.organization-social-links}} - Social media links

Organization Address

Identifier: organization-address Status: Active (reusable component)

{
    "@type": "PostalAddress",
    "streetAddress": "{{config.general.store_information.street_line1}}",
    "addressLocality": "{{config.general.store_information.city}}",
    "postalCode": "{{config.general.store_information.postcode}}",
    "addressCountry": "{{config.general.store_information.country_id}}"
}

Identifier: organization-social-links Status: Disabled (requires customization)

[
    "https://www.facebook.com/yourpage",
    "https://www.instagram.com/yourpage",
    "https://www.twitter.com/yourpage",
    "https://www.linkedin.com/company/yourcompany",
    "https://www.youtube.com/channel/yourchannel"
]

Customization: Update with your actual social media URLs, then enable the snippet.

WebSite

Identifier: website Page Type: Homepage Status: Active by default

Enables Google search box in search results.

{
    "@context": "https://schema.org/",
    "@type": "WebSite",
    "url": "{{config.web.secure.base_url}}",
    "potentialAction": {
        "@type": "SearchAction",
        "target": "{{config.web.secure.base_url}}catalogsearch/result/?q={q}",
        "query-input": "required name=q"
    }
}

WebPage

Identifier: webpage Status: Disabled (enable as needed)

Generic webpage schema.

{
    "@context": "https://schema.org/",
    "@type": "WebPage",
    "name": "{{page.title}}",
    "description": "{{page.description}}",
    "url": "{{page.url}}",
    "publisher": "{{snippet.organization}}"
}

Identifier: breadcrumb-list Page Types: Product, Category pages Status: Active by default

Breadcrumb navigation for better search results.

{
    "@context": "https://schema.org/",
    "@type": "BreadcrumbList",
    "itemListElement": {
        "@djson for breadcrumbs as breadcrumb": {
            "@type": "ListItem",
            "position": "{{breadcrumb.position}}",
            "name": "{{breadcrumb.label}}",
            "item": "{{breadcrumb.link}}"
        }
    }
}

Features: - Automatically loads breadcrumbs from page - Shows navigation trail (Home → Category → Product) - Improves search result display

Tier 2: High-Value Enhancements

FAQPage

Identifier: faq-page Status: Disabled (demo content - customize before enabling)

{
    "@context": "https://schema.org/",
    "@type": "FAQPage",
    "mainEntity": [
        {
            "@type": "Question",
            "name": "What is your return policy?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "We accept returns within 30 days of purchase. Items must be unused and in original packaging."
            }
        },
        {
            "@type": "Question",
            "name": "How long does shipping take?",
            "acceptedAnswer": {
                "@type": "Answer",
                "text": "Standard shipping takes 5-7 business days. Express shipping is available for 2-3 day delivery."
            }
        }
    ]
}

Customization: 1. Update questions and answers for your business 2. Assign to FAQ CMS page 3. Enable snippet

ItemList

Identifier: item-list Page Type: Category pages Status: Disabled (requires custom implementation)

Product listing for category pages.

{
    "@context": "https://schema.org/",
    "@type": "ItemList",
    "itemListElement": {
        "@djson for products as product": {
            "@type": "ListItem",
            "position": "{{product.position}}",
            "url": "{{product.productUrl}}",
            "name": "{{product.name}}"
        }
    }
}

Note: Requires custom variable provider to supply products collection on category pages.

ProductGroup

Identifier: product-group Page Type: Product pages (configurable products) Status: Disabled (requires variant implementation)

For configurable products with variants.

{
    "@context": "https://schema.org/",
    "@type": "ProductGroup",
    "name": "{{product.name}}",
    "description": "{{product.description}}",
    "url": "{{product.productUrl}}",
    "brand": {
        "@type": "Brand",
        "name": "{{product.manufacturer}}"
    },
    "productGroupID": "{{product.sku}}",
    "hasVariant": {
        "@djson for productVariants as variant": {
            "@type": "Product",
            "name": "{{variant.name}}",
            "sku": "{{variant.sku}}",
            "image": "{{variant.image}}",
            "offers": {
                "@type": "Offer",
                "price": "{{variant.finalPrice}}",
                "priceCurrency": "{{store.currencyCode}}",
                "availability": "https://schema.org/InStock"
            }
        }
    }
}

Note: Requires custom implementation to provide productVariants collection.

Tier 3: Business Information

Store

Identifier: store Status: Disabled (requires configuration)

Physical store location with opening hours.

{
    "@context": "https://schema.org/",
    "@type": "Store",
    "name": "{{config.general.store_information.name}}",
    "image": "{{config.web.secure.base_url}}media/store/storefront.jpg",
    "telephone": "{{config.general.store_information.phone}}",
    "address": "{{snippet.organization-address}}",
    "geo": {
        "@type": "GeoCoordinates",
        "latitude": "40.7128",
        "longitude": "-74.0060"
    },
    "url": "{{config.web.secure.base_url}}",
    "openingHoursSpecification": {
        "@djson for storeHours as hours": {
            "@type": "OpeningHoursSpecification",
            "dayOfWeek": "{{hours.day}}",
            "opens": "{{hours.open}}",
            "closes": "{{hours.close}}"
        }
    }
}

Customization: 1. Update geo coordinates 2. Add storefront image 3. Implement storeHours variable provider 4. Enable snippet

LocalBusiness

Identifier: local-business Page Type: Contact page Status: Disabled (requires configuration)

For businesses with physical locations.

{
    "@context": "https://schema.org/",
    "@type": "LocalBusiness",
    "name": "{{config.general.store_information.name}}",
    "description": "{{store.description}}",
    "telephone": "{{config.general.store_information.phone}}",
    "email": "{{config.trans_email.ident_general.email}}",
    "url": "{{config.web.secure.base_url}}",
    "logo": "{{config.web.secure.base_url}}media/logo/default/logo.svg",
    "image": "{{config.web.secure.base_url}}media/store/storefront.jpg",
    "address": "{{snippet.organization-address}}",
    "geo": {
        "@type": "GeoCoordinates",
        "latitude": "40.7128",
        "longitude": "-74.0060"
    },
    "openingHours": "Mo-Fr 10:00-18:00",
    "priceRange": "$$"
}

AboutPage

Identifier: about-page Status: Disabled (assign to About Us page)

{
    "@context": "https://schema.org/",
    "@type": "AboutPage",
    "name": "About Us",
    "description": "Learn more about our company and mission",
    "url": "{{config.web.secure.base_url}}about-us",
    "mainEntity": "{{snippet.organization}}"
}

ContactPage

Identifier: contact-page Page Type: Contact page Status: Disabled (demo)

{
    "@context": "https://schema.org/",
    "@type": "ContactPage",
    "name": "Contact Us",
    "description": "Get in touch with our team",
    "url": "{{config.web.secure.base_url}}contact",
    "mainEntity": {
        "@type": "Organization",
        "name": "{{config.general.store_information.name}}",
        "contactPoint": {
            "@type": "ContactPoint",
            "telephone": "{{config.general.store_information.phone}}",
            "email": "{{config.trans_email.ident_general.email}}",
            "contactType": "customer service"
        }
    }
}

Customization Examples

Example 1: Add Social Proof to Product

Edit the Product snippet to include trust badges:

{
    "@type": "Product",
    "name": "{{product.name}}",
    "offers": "{{snippet.offer}}",
    "@djson if product.reviewCount": {
        "aggregateRating": "{{snippet.aggregate-rating}}"
    },
    "award": "Best Product 2024",
    "isSimilarTo": "https://example.com/similar-product"
}

Example 2: Multi-Language Organization

Create separate Organization snippets per language:

English (Store View: en)

{
    "@type": "Organization",
    "name": "My Store",
    "description": "The best online store"
}

German (Store View: de)

{
    "@type": "Organization",
    "name": "Mein Geschäft",
    "description": "Der beste Online-Shop"
}

Example 3: Extended Product Information

Add additional product properties:

{
    "@type": "Product",
    "name": "{{product.name}}",
    "weight": {
        "@type": "QuantitativeValue",
        "value": "{{product.weight}}",
        "unitCode": "KGM"
    },
    "material": "{{product.material}}",
    "color": "{{product.color}}"
}

Testing Snippets

Google Rich Results Test

  1. Visit https://search.google.com/test/rich-results
  2. Enter your page URL
  3. Review detected schemas
  4. Fix any errors

Expected Results

Product Page: - Product snippet with offer - Aggregate rating (if reviews exist) - BreadcrumbList - Organization (on homepage only)

Category Page: - BreadcrumbList - ItemList (if enabled)

Homepage: - Organization - WebSite

Troubleshooting

Snippet Not Appearing

  1. Check snippet is Active
  2. Verify Page Type matches current page
  3. Check Store View assignment
  4. Flush all caches
  5. View page source for application/ld+json

Invalid Schema

  1. Test with Google Rich Results Tool
  2. Validate JSON with JSONLint
  3. Check for unresolved variables ({{...}})
  4. Enable pretty debug mode

Missing Data

  1. Check required Magento configuration (store info, email)
  2. Verify product has all required attributes
  3. Check variable names match exactly
  4. Review debug logs

Best Practices

  1. Start Simple - Enable Product, Organization, WebSite first
  2. Test Thoroughly - Always validate with Google Rich Results Test
  3. Keep Updated - Review snippets when Magento configuration changes
  4. Use Conditionals - Hide optional sections when data doesn't exist
  5. Nest Wisely - Reuse snippets via {{snippet.identifier}} to reduce duplication
  6. Monitor Performance - Disable unused snippets
  7. Document Changes - Note customizations for future reference

Next Steps