Google expanded the documentation for merchant listing structured data this week to close a gap that has long separated on-page markup from Merchant Center feed data: sale timing and product categorization now have explicit, documented rules.
The update adds a new “Sale duration” section explaining how to set validFrom, validThrough, and priceValidUntil on either an Offer or a PriceSpecification node. Those schema.org properties tell Google exactly when a discounted price starts and stops applying, mirroring how the sale_price_effective_date attribute works inside a Merchant Center feed.
The documentation also now details support for the Product.category property, which can be declared using either a plain Text string or a CategoryCode value. That addition maps directly to two feed attributes ecommerce teams already manage: product_type, the merchant’s own taxonomy, and google_product_category, Google’s standardized classification system.
Search Engine Land’s Barry Schwartz reported the documentation change and the stated reason behind it: bringing the schema.org markup on a product page in line with what the same merchant already submits through its Merchant Center feed.
That alignment goal is the real story. Google pulls two separate signals for the same product: the feed a merchant uploads to Merchant Center and the structured data embedded in the page itself. When those two sources disagree on price, sale dates, or category, Google has to pick one or discard both. A sale badge that appears in the feed but lacks a matching validThrough date on the page risks being dropped from free listings or shopping-related rich results. A product filed under one google_product_category in the feed and a different Product.category value on the page creates the same kind of conflict.
Retailers running frequent promotions carry the most exposure. A site that changes prices during flash sales without updating priceValidUntil in its markup can end up showing a stale discount to Google well after the sale ended, or lose the sale price display entirely once Google’s freshness checks catch the mismatch. Category markup carries a quieter but steady cost. Any product missing a Product.category value, or one whose value drifts from the feed’s classification, becomes a candidate for exclusion from category-specific Shopping surfaces.
Neither addition requires new technology. validFrom, validThrough, and priceValidUntil are established schema.org properties that Google is now documenting explicitly for this use case, and Product.category with CategoryCode support has existed in the schema.org vocabulary for years. What changed is that Google now states plainly how it wants these fields used and why, giving feed managers a documented target instead of a guess.
Ecommerce SEO and feed teams should treat this as a near-term audit, not a future project. Pull a sample of product pages currently running time-limited discounts and confirm validFrom and validThrough (or priceValidUntil) sit on the Offer node and match the feed’s sale_price_effective_date. Then cross-check Product.category values against product_type and google_product_category to close classification gaps before Google’s freshness checks flag them first.
Search Engine Land, reported by Barry Schwartz, published July 7, 2026.