# Product Profile
**Source:** [Google Product structured data](https://developers.google.com/search/docs/appearance/structured-data/product)
## Supported Types
- `Product`
## Required Fields
| `name` | Product name |
## Recommended Fields
| `image` | Product image URL |
| `description` | Product description |
| `sku` | Stock-keeping unit identifier |
| `gtin` / `isbn` / `mpn` | At least one product identifier |
| `brand.name` | Brand name |
| `aggregateRating` or `review` | At least one rating or review |
## Nested Requirements: Offer
When `offers` is present, each `Offer` is checked for:
| `price` | Required | Numeric price value |
| `priceCurrency` | Required | ISO 4217 currency code |
| `availability` | Required | Item availability enum |
| `url` | Recommended | URL to the offer page |
| `priceValidUntil` | Recommended | Offer expiration date |
| `itemCondition` | Recommended | Item condition enum |
## Eligible Example
```json
{
"@type": "Product",
"name": "Premium Widget",
"image": "https://example.com/widget.jpg",
"description": "A high-quality widget",
"sku": "WDG-001",
"brand": { "@type": "Brand", "name": "WidgetCo" },
"offers": {
"@type": "Offer",
"price": "29.99",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "42"
}
}
```
## Not Eligible Example
```json
{
"@type": "Product"
}
```
Missing `name` -- required for eligibility.