How to Use This Schema Markup Audit Checklist
Schema markup tells search engines—and AI answer engines—exactly what your page content means. For ecommerce stores, missing or broken structured data translates directly into lost rich results: no star ratings in SERPs, no price displays, no availability callouts. This checklist covers the 12 schema elements that matter most for product-driven sites, each with a defined pass condition and a clear fail condition so your audit produces actionable results rather than vague observations.
Run this audit using Google's Rich Results Test, Schema.org's validator, and a crawl tool that can extract JSON-LD from page source. Check your highest-revenue product pages first, then category pages, then site-wide templates. A single broken template can invalidate schema across thousands of URLs.
Product-Level Schema Checks (Items 1–5)
1. Product Type Declaration — PASS: Every product page contains a schema.org/Product type declared in JSON-LD. FAIL: The page uses Microdata inconsistently, mixes markup formats, or omits the Product type entirely. JSON-LD in the document head is the format Google explicitly recommends; Microdata embedded in HTML is error-prone during template updates.
2. Name Property — PASS: The 'name' property matches the H1 exactly, with no truncation or appended SKU codes that don't appear on-page. FAIL: The name is pulled from a backend field that differs from the visible product title, creating a mismatch that Google's quality algorithms flag.
3. Description Property — PASS: A 'description' property is present and contains at least one complete sentence describing the product. FAIL: The field is empty, contains only a product code, or duplicates the name property verbatim.
4. SKU and MPN Properties — PASS: Either 'sku' or 'mpn' (or both) are populated with the manufacturer or internal identifier shown elsewhere on the page. FAIL: Both are absent, or the value is a placeholder like '0' or 'N/A'. These identifiers are critical for Google Shopping surface eligibility.
5. Brand Property — PASS: The 'brand' property is present and contains a schema.org/Brand object with a 'name' value matching the brand displayed on the page. FAIL: Brand is a plain string rather than a nested object, or the field is missing entirely. Nested Brand objects improve entity recognition.
Offer and Pricing Schema Checks (Items 6–8)
6. Offer Type and Price — PASS: An 'offers' property is present, typed as schema.org/Offer, with a numeric 'price' and an ISO 4217 'priceCurrency' code (e.g., 'USD'). FAIL: Price is formatted as a string with a currency symbol inside it ('$29.99'), which parsers misread. The price value must be a number; currency goes in the separate priceCurrency field.
7. Availability — PASS: The 'availability' property uses a full schema.org URL (e.g., 'https://schema.org/InStock') that matches actual inventory status. FAIL: The field uses a shorthand like 'InStock' without the namespace, or the declared status contradicts the page's visible stock message. Mismatches trigger Google's structured data manual actions.
8. PriceValidUntil — PASS: Sale prices include a 'priceValidUntil' date in ISO 8601 format (YYYY-MM-DD) that has not already passed. FAIL: The property is absent on sale pages, or the date is in the past—both cause Google to suppress price-related rich results for that listing.
Review and Rating Schema Checks (Items 9–10)
9. AggregateRating — PASS: Pages with customer reviews include an 'aggregateRating' property with both 'ratingValue' and 'reviewCount' populated from real, on-page review data. FAIL: The rating is hard-coded in the schema but not visibly displayed to users, or the review count in markup differs from the count shown on the page. Google's guidelines prohibit structured data that describes content not visible to users.
10. Individual Review Markup — PASS: If individual reviews are displayed, at least a sample is marked up with schema.org/Review, including 'author', 'datePublished', and 'reviewBody'. FAIL: Only AggregateRating is present but full review text is visible on-page with no accompanying Review markup, leaving signal on the table for AI-powered answer engines that parse review content.
Site-Level and Technical Schema Checks (Items 11–12)
11. BreadcrumbList — PASS: Every product and category page includes a BreadcrumbList schema with 'ListItem' entries that mirror the visible breadcrumb trail, using correct 'position' integers starting at 1. FAIL: Breadcrumb schema is present but positions are non-sequential, duplicated, or the URLs in 'item' properties return 4xx errors. Broken breadcrumb schema suppresses the breadcrumb display in SERPs, which reduces click-through rates on category-driven queries.
12. Sitelinks Searchbox (Homepage Only) — PASS: The homepage includes a WebSite schema block with a 'potentialAction' of type SearchAction, pointing to a functional internal search URL with the query parameter correctly templated. FAIL: The SearchAction URL is hardcoded without the query placeholder, the internal search returns no results, or the schema exists on non-homepage URLs. Google only renders the Sitelinks Searchbox for the canonical homepage, so placement elsewhere wastes crawl processing.
Completing the Audit: Priority Order and Validation Tools
Fix items in this order: Offer/Availability errors first (they trigger manual actions), then AggregateRating mismatches (they affect rich result eligibility immediately), then Product-type completeness (affects long-tail discovery), then BreadcrumbList and SearchAction (affect display but not indexing). Address template-level errors before page-level errors—one corrected template can resolve thousands of failures simultaneously.
Validate every fix using Google's Rich Results Test before pushing to production. After deployment, monitor the 'Enhancements' section of Google Search Console for at least 14 days. Search Console reporting lags by several days, so a clean Rich Results Test result that later shows errors in Search Console usually indicates a caching or server-rendering problem, not a schema logic error. Confirm that your schema renders in the fully-executed DOM, not just in raw HTML source, especially if you use a JavaScript-heavy storefront.