SEO
Schema markup for product and article pages
Schema markup is structured data in the HTML that names the thing on the page: a Product with an Offer, a BreadcrumbList, an Article. Google and AI systems use it when it matches visible content. They ignore it when it is stuffed, duplicated, or invented. This note is for product and article templates on Magento, Shopify, WooCommerce and custom PHP, not for a plugin that injects every schema.org type “just in case”.
I am Alan Vo, Gold Coast, eighteen years of storefronts. Google’s structured data introduction is the policy I work to: use the required properties, match the page, test with the rich results tool. Magento-specific product graphs are in Magento product schema for Google and AI search. This post is the cross-platform version: what to ship, how to test, what never to fake.
What schema markup Google actually uses on product pages
Schema markup Google actually uses on product pages is Product plus Offer, with name, image, price, currency and availability that match the buy box, plus breadcrumbs when they are on the page. Extra types do not make a thin PDP richer.
Google documents product structured data separately from the generic intro. The intro still matters because the failure modes are the same: markup in a tag manager that never appears in the HTML Google fetched, markup that contradicts the visible price, and markup for a type the page is not.
On a PDP I want:
Product: name, description, image (absolute URLs), sku if you have it, brand if you have it, gtin only if realOffer(orAggregateOfferwhen that is the honest model):price,priceCurrency,availability,urlAggregateRatingandReviewonly when reviews are visible to a guest in HTMLBreadcrumbListmatching the visible crumbs- Merchant listing extras (shipping, returns) when you are chasing those surfaces in your market and the policies are true
I use JSON-LD in a single script. Microdata in Magento Luma templates still exists. Mixing both with different prices is a defect. JSON-LD is easier to keep in a ViewModel or a Liquid snippet. If a theme already prints microdata on the product name and price, I either complete that microdata so it is valid or I remove it and keep JSON-LD as the only graph. Two incomplete formats is how Search Console fills with "Missing field 'offers'" on a page that looks fine to a merchandiser.
Shopify themes often output Product JSON-LD already. Apps add a second graph. I view-source and count. One product graph.
WooCommerce and Yoast-class plugins output Product data that can drift from the actual sale price or from tax display. Same rule: guest HTML and guest JSON-LD must agree.
Articles and journals: Article or BlogPosting with headline, datePublished, author, image. Do not put Product on a lookbook post unless it is actually a product URL. Do not put Article on a Magento PDP.
FAQ schema: only if the FAQ is visible. Magento merchants love a hidden accordion of keyword questions. Google has tightened FAQ rich results over the years. I still only mark up what is on the page, and I do not build fake Q&A for ranking.
HowTo, Recipe, Event: only on pages that are those things. A chocolate mix builder is still a Product, not a Recipe, unless you are actually publishing a recipe document.
Why schema markup still matters in 2026
Schema markup still matters in 2026 because rich results and AI shopping answers parse Offer data, and Google still validates required fields. A correct title without an Offer is a blue link. A correct Offer can be a product snippet. Neither replaces on-page SEO. Together they make a document machines can quote.
What changed is enforcement and the second audience. Google’s Merchant listing requirements grew (shipping, returns in many cases). AI crawlers read the same JSON-LD when robots.txt lets them in. Fake AggregateRating is more likely to be a policy problem than a growth hack.
Theme migrations drop schema. Hyva, Horizon, and block themes all override product templates. I treat schema as a release-checklist item, not a one-time plugin install.
How to ship schema markup without fake reviews
You ship schema markup without fake reviews by generating JSON-LD from the same price, stock and review query the template uses, then testing the live URL, not a staging SKU with dummy stars. If there are no reviews, omit rating fields.
Implementation pattern I use:
- Server-render JSON-LD in the product or article template.
- Escape names and descriptions so a quote in a product name does not break the script.
- Use ISO currency codes and numeric prices.
- Map stock to Schema.org availability enums honestly.
- Absolute URLs for
urlandimage. - One
@graphor one top-level Product. Breadcrumbs can sit beside it in the graph.
Reviews: Magento native reviews, Shopify product reviews that are in the HTML, WooCommerce comments if they are actually reviews. Third-party widgets must SSR the count and average or I leave ratings out. I will not copy a marketplace star average onto a PDP that has zero on-site reviews.
Variants: Shopify variant URLs vs Magento configurables. Markup the URL Google is asked to index. If the canonical is the parent, the Offer is the representative or default variant that matches the page. Client-side swatch changes that never update the fetched HTML will not update Google’s Offer.
Articles: dateModified when you actually edited the post. Author as a Person with a name you stand behind. Do not mark a category archive as an Article.
Testing: Google rich results test, Search Console enhancements, and curl. If a module only injects JSON-LD for the Googlebot user-agent, that is cloaking-adjacent. Serve the same graph to everyone.
I also keep Organization or WebSite JSON-LD on the homepage, not copied onto every PDP unless the theme already does it cleanly. Repeating a huge Organization block on 20,000 SKUs is noise.
Production checklist for schema markup
- Inventory types you actually need: Product, Offer, BreadcrumbList, Article. Delete the rest from the plugin’s “enable all” screen.
- View-source ten PDPs: simple, variant, bundle or custom option, out of stock, reviewed and unreviewed.
- Count
ld+jsonscripts. Merge or remove duplicates.
- Validate required Product and Offer fields against the visible buy box.
- Strip
AggregateRatingwhere review HTML is missing.
- Align BreadcrumbList with visible breadcrumbs and with real 200 URLs.
- Validate two articles: dates, headline, image, author.
- Recheck after every theme or app install.
- Watch Search Console product rich result errors by example URL.
- Confirm robots.txt is not blocking the PDP you marked up.
- Confirm images in schema return 200 and are crawlable.
- Document the source of price (incl tax or excl) so the next developer does not “fix” it twice.
What breaks schema markup
Two SEO apps. Always.
Price rules and customer groups. Guest schema vs logged-in HTML.
CDN cache of JSON-LD with an old special price.
Relative image paths.
Product name in schema from SKU code, H1 from a marketing title.
Review apps that invent reviewCount.
Shopify app blocks that inject JSON-LD in a way that duplicates the theme.
WordPress page builders that put the product in a widget and the schema on a different URL.
I do not fake reviews to “qualify for stars”. That is the one rule I will not negotiate. Rich results are optional. Manual actions are not worth a star.
How to measure schema markup
You measure schema markup with Search Console enhancement reports, rich result test pass rate on a SKU sample, and snippet appearance, not with a claim that JSON-LD “boosted traffic 30 percent”. I will not invent that number.
Valid items should rise. Invalid items should name a field you can fix. If impressions on product rich results exist in your market, watch them after a fix, with a lag for recrawl.
AI citations are harder to measure. I still want the Offer to be true so a quoted price is not a complaint.
On jewellery and food Magento or Shopify PDPs, photography is the LCP element and schema is the machine caption. Both have to be right. Neither replaces a page that can check out.
Related work on this site
Schema markup has to survive luxury photography and custom product flows. I shipped Shopify Plus for Tamannaah Fine Jewellery, where the PDP has to feel precise enough to buy on a phone, and Magento for KitKat Chocolatory, where mix, engrave and print are the product, not a generic simple SKU. Those templates are where a Product graph either matches the buy box or becomes a second, lying page. I would rather omit stars than invent them.
Schema markup FAQ
What schema markup should a product page include?
Schema markup on a product page should include Product and Offer with matching name, image, price, currency and availability, plus BreadcrumbList when breadcrumbs are visible. Add ratings only when reviews are in the HTML. Skip extra types that the page is not.
Is schema markup a ranking factor?
Schema markup is not a simple ranking boost. It helps Google understand the page and can enable rich results. Rankings still depend on crawl, uniqueness, links and the document. Treat markup as eligibility, not as a keyword trick.
Can I add schema markup only in Google Tag Manager?
You can add schema markup in Google Tag Manager, and I still prefer it in the theme. GTM can fire late, get blocked by consent, or differ from the HTML. Google’s fetch may not see the same graph a browser sees after tags run.
Does schema markup require Magento or Shopify apps?
Schema markup does not require a marketplace app. A small template snippet that reads the same product object as the PDP is enough. Apps are useful until they duplicate graphs or invent reviews. View-source is the test.
Keep reading
Contact if you want this kind of work on a live store.