h-product
Tantek Çelik (Editor)
h-product is a simple, open format for publishing product data on the web. h-product is one of several open microformat draft standards suitable for embedding data in HTML.
h-product is the microformats2 update to hProduct.
Per CC0, to the extent possible under law, the editors have waived all copyright and related or neighboring rights to this work. In addition, as of 2024-12-21, the editors have made this specification available under the Open Web Foundation Agreement Version 1.0.
Example
Here is a simple minimal product example:
<div class="h-product">
<h1 class="p-name">Microformats For Dummies</h1>
<img class="u-photo" src="http://example.org/mfd.png" alt="" />
<div class="e-description">
<p>Want to get started using microformats, but intimidated by hyphens and mediawiki? This book contains everything you need to know!</p>
</div>
<p>Yours today for only <data class="p-price" value="20.00">$20.00</data>
from <a class="p-brand h-card" href="http://example.com/acme">ACME Publishing inc.</a>
</p>
</div>
Parsed JSON:
{
"items": [
{
"type": [
"h-product"
],
"properties": {
"name": [
"Microformats For Dummies"
],
"photo": [
"http://example.org/mfd.png"
],
"description": [
{
"value": "Want to get started using microformats, but intimidated by hyphens and mediawiki? This book contains everything you need to know!",
"html": "<p>Want to get started using microformats, but intimidated by hyphens and mediawiki? This book contains everything you need to know!</p>"
}
],
"price": [
"20.00"
],
"brand": [
{
"value": "ACME Publishing inc.",
"type": [
"h-card"
],
"properties": {
"name": [
"ACME Publishing inc."
],
"url": [
"http://example.com/acme"
]
}
}
]
}
}
]
}
Get started
The class h-product
is a root class name that indicates the presence of an h-product.
p-name, p-price, u-photo and the other property classnames listed below define elements as properties of the h-product.
See microformats-2-parsing to learn more about property classnames.
Properties
h-product properties, inside an element with class h-product:
p-name
- name of the productu-photo
- photo of the productp-brand
- manufacturer, can also be embeddedh-card
Main article: h-cardp-category
- freeform categories or tags applied to the item by the reviewere-description
u-url
- URL of the productu-identifier
- includes type (e.g. mpn, upc, isbn, issn, sn, vin, sku etc.) and value.p-review
- a review of the product, optionally embeddedh-review
Main article: h-reviewp-price
- retail price of the product
Status
h-product is a microformats.org draft specification. Public discussion on h-product takes place on h-product-feedback and the #microformats irc channel on irc.freenode.net.
h-product is ready to use and implemented in the wild, but for backwards compatibility you should also mark h-products up with classic hProduct classnames.
Property Details
(stub, add any property explanations here)
TODO: u-identifier supposedly “includes type” — how so? URI scheme? Need examples of how to mark up the various different identifier types.
price was an experimental property which has real world adoption due to Google and Bing search support of hProduct. Due to this it has been included in the updated h-product spec.
Examples in the Wild
- Barnaby Walters’ posting UI is marked up with h-product and experimental h-x-app markup so that authorization UIs can provide a better experience whilst authorizing, without having to pre-register apps and upload logos
- … add any h-product examples you find in the wild
Validating
Test and validate microformats2 markup in general with:
- https://pin13.net/mf2/ - enter your markup directly
- https://pin13.net/ - enter a URL to a page to test where it says "Microformats Parser"
Backward Compatibility
Publisher Compatibility
For backward compatibility, you may wish to use classic hProduct classnames in addition to the more future-proof h-product properties, for example:
<div class="h-product hproduct">
<h1 class="p-name fn">Product Name</h1>
</div>
Parser Compatibility
Microformats parsers SHOULD detect classic properties only if a classic root class name is found and parse them as microformats2 properties.
If an "h-product" is found, don't look for an "hProduct" on the same element.
Compatibility root class name: hProduct
Properties: (parsed as p- plain text unless otherwise specified)
fn
- parse asp-name
photo
- parse as u-brand
category
description
identifier
- parse as u-url
- parse as u-review
- including compat root classhreview
in the absence ofh-review
price
Background
h-product is based on the existing hProduct specification.
See Also
- h-product-feedback
- microformats2
- h-card can be embedded in h-product
- hProduct is the classic microformat replaced by h-product