seo-ecommerce
Installation
SKILL.md
seo-ecommerce (M18)
Conditional commerce module: it only runs when commerce signals are detected, then audits and completes product structured data. Reference: references/schema-tier1.md (Product + Offer, Review/AggregateRating rows).
Audits
Working from the PageSnapshot (rendered_dom if present, else raw_html):
- Commerce gate: detect commerce signals (price/currency text, add-to-cart/buy controls,
Product/Offerschema,og:type=product). If none, every M18 finding isnot_applicable(severity 0) — do not force product schema onto non-commerce pages. - Product + Offer:
Producthasname,image;Offerhasprice,priceCurrency,availability(schema.org/InStocketc.). Perreferences/schema-tier1.md. - AggregateRating / Review: if ratings are visibly shown, expect
AggregateRating(ratingValue,reviewCount/bestRating) and/orReview(author). Never mark up ratings not visible on the page. - Page → schema → feed consistency (Tier 2): schema
price/priceCurrency/availabilitymust match visible on-page values and the Merchant Center feed. Mismatches risk disapproval and lost rich results. - Faceted navigation: filter/sort URLs (
?color=,?sort=) should canonicalize to the clean product/category URL or benoindex, to avoid index bloat and duplicate-content dilution. - Variants / ProductGroup: multi-variant products should use
ProductGroupwithhasVariantandvariesBy, not duplicate standaloneProductblocks per SKU.
Fixes
- AUTO (
fixable: auto): generate complete, validProduct/Offer/AggregateRatingJSON-LD inferred from the DOM (name, image, price, currency, availability, visible rating) inside a single@graphwith a stable@id. The block is a diff forfix. - PROPOSED (
fixable: proposed): canonical/noindextags for faceted URLs andProductGrouprestructuring — drafts requiring per-item accept. - ADVISORY (
fixable: advisory): price / availability mismatches between page, schema, and feed — the store backend/feed is the source of truth, so the tool never writes these. Never invent prices, currencies, availability, or ratings — ask the user or leave a clearly-marked TODO placeholder.