Google merchant listings: sale duration & category
Google has expanded support for merchant listing structured data with two central properties: sale duration and Product.category. The update brings product markup in Google Search closer to the feed logic of Google Merchant Center. For e-commerce teams maintaining structured data on product pages, this means clearer guidance and less friction between markup, feed attributes, and shopping visibility.
Merchant listings are Google's structured data format for product offers in organic search. They complement classic product markup and help merchants transmit prices, availability, and offer details consistently. Until now, the official documentation lacked detailed guidance on promotional time frames and product categories – Google is now closing those gaps.
Sale duration: controlling promotional price periods precisely
Google added a new section on sale duration to the merchant listing help document. It explains how merchants can use the schema.org properties validFrom, validThrough, and priceValidUntil to define the effective range for reduced prices. The guide includes best practices and examples for placement on Offer or PriceSpecification nodes.
According to Google, the implementation aligns with usage in Merchant Center. The feed attribute sale_price_effective_date has a direct counterpart in structured data. Merchants who previously marked sale prices in markup without a clear validity period risked conflicting displays or outdated sale prices in search results. The new guidance makes it possible to plan when a discount appears in search and when it ends automatically.
Technical implementation of price validity
The validFrom property marks the start of an offer period, validThrough marks the end. priceValidUntil can be used alternatively or additionally to set price validity. Correct assignment to the right node in JSON-LD is critical: either directly on the Offer object or within a PriceSpecification. Incorrect nesting often leads to warnings in Search Console or ignored price information.
SEO and feed managers should align their processes: if sale_price_effective_date is maintained in the Merchant Center feed, the same start and end dates should be set in the structured data markup on product pages. This avoids discrepancies between organic merchant listings and shopping campaigns. Especially for seasonal promotions or time-limited flash sales, it prevents outdated discount prices from continuing to appear after a campaign ends.
Product.category: merchant and Google categories in markup
In addition to sale duration, Google now explicitly supports the Product.category property in merchant listings. The documentation describes how categories can be submitted as both text and CategoryCode. This lets merchants include both their own product type labels and standardized Google product categories in schema.org markup.
Google points to parallels with the Merchant Center attributes product_type and google_product_category. product_type usually reflects the merchant-defined category hierarchy, while google_product_category uses Google's official taxonomy. Both pieces of information help the search engine classify products more accurately and surface them for more relevant queries.
Text versus CategoryCode in practice
As text, a readable category label such as "Running shoes > Men > Trail" can be submitted. CategoryCode is suited to standardized values, such as numeric IDs from Google's product category list. Combining both variants gives Google maximum context depth – especially for catalogs with many variants or similar product names.
The expanded category support can strengthen relevance signals for Google Search and Google Shopping. Products previously categorized only through titles and descriptions benefit from explicit category information in structured data. This applies especially to niche items where SERP competition relies heavily on generic keywords.
Impact for merchant listing maintenance
Teams actively managing merchant listing structured data should review the documentation changes promptly. Sale duration enables more efficient planning of discount campaigns directly in markup, without manual updates after a campaign ends. Product.category closes a gap between feed data and on-page markup.
| New feature | Schema.org / markup | Merchant Center counterpart |
|---|---|---|
| Sale duration | validFrom, validThrough, priceValidUntil | sale_price_effective_date |
| Product.category | Text or CategoryCode | product_type, google_product_category |
Alignment with Merchant Center feeds reduces typical error sources: different promotional prices on the website and in the feed, missing category assignments, or unclear validity periods. For technical SEO, this means fewer validation issues and more consistent product presentation in search. Even shops without an active shopping budget benefit, because merchant listings can directly influence organic product visibility in Google Search.
Recommended implementation steps
Start by inventorying existing merchant listing implementations. Check whether sale prices are already marked up and whether start and end dates are missing. The same applies to category data: if product_type and google_product_category are used in the feed, corresponding values should also appear in JSON-LD. A quick check with the Rich Results Test shows whether Google recognizes the new fields correctly.
- Review the merchant listing documentation on sale duration and Product.category.
- Place validFrom, validThrough, and priceValidUntil correctly on Offer or PriceSpecification nodes.
- Keep promotional periods synchronized between feed and structured data.
- Add merchant categories as text and Google categories as CategoryCode.
- After deployment, check rich result tests and Search Console reports.
The update underscores Google's strategy to unify structured product data across Search and Shopping more closely. Merchants already using merchant listings gain more control over promotional prices and category assignment with the new fields – provided markup and Merchant Center feeds stay aligned.