Short answer. Every product expires from Merchant Center 30 days after its last refresh, silently; expiration_date lets you set an earlier date for a product, in ISO 8601 format (YYYY-MM-DDThh:mm±hhmm, up to 25 characters). The attribute does not extend the 30 days: only a fetch or upload that includes the product refreshes it.
| Attribute | expiration_date |
|---|---|
| Requirement | Optional for each product. |
| Format |
|
Google’s rules for expiration_date
- Products expire 30 days after the last refresh regardless of this attribute.
- Use it to retire a product earlier, e.g. a seasonal item on a fixed date.
- A feed fetched on a schedule refreshes every product it contains.
Common mistakes, and the error each one becomes
- A feed uploaded once and never refreshed, so the catalogue empties after 30 days.
- A date in the past left on a product, so it expires immediately.
Where the value comes from on a connected store
| Shopify | Not set; the catalogue refreshes with every sync and fetch. |
|---|---|
| WooCommerce | Not set; the feed is rebuilt on every fetch, so every published product is refreshed each time Google reads it. |
The free feed check reads this attribute from any feed file and reports the defects above; every check is listed.
Questions merchants ask
Can I set expiration_date to 90 days to keep products longer?
No. The 30-day default is the maximum; the attribute can only shorten it.
What counts as a refresh?
The product being included in a fetched or uploaded feed, or updated through the API. Editing it in Merchant Center refreshes that product.
How do I stop products expiring?
A scheduled fetch of a feed that contains them, more often than every 30 days. Daily is the usual setting.
Sources
- Expiration date [expiration_date] — Google Merchant Center Help
- Product data specification — Google Merchant Center Help