Tried to Google out but came empty handed. I'm looking for a snippet containing example markup.
How should I mark all-day events?
How should I mark concerts having multiple performances with varying locations (for same data multiple start and end dates) aka. subEvents? This is what I tried:
<section itemscope itemtype="http://data-vocabulary.org/Event"><!-- section per event -->
<a href="/test#event_17" id="event_17" itemprop="url">
<h3><!-- visual title when and where -->
<div itemprop="summary"><!-- summary what the event is for -->
Summary text
</div>
</h3>
</a>
<span itemprop="location" class="location">
Location name
</span>
<span itemprop="subEvent" itemscope itemtype="http://data-vocabulary.org/Event">
<a href="/test#event_17_1" id="event_17_1" itemprop="url">
<time itemprop="startDate" datetime="2014-09-15T15:00:00+03:00">00:00</time>
—
<time itemprop="endDate" datetime="2014-09-15T17:00:00+03:00">00:00</time>
</a>
</span>
<span itemprop="subEvent" itemscope itemtype="http://data-vocabulary.org/Event">
<a href="/test#event_17_2" id="event_17_2" itemprop="url">
<time itemprop="startDate" datetime="2014-10-10T20:00:00+03:00">00:00</time>
—
<time itemprop="endDate" datetime="2014-10-10T22:00:00+03:00">00:00</time>
</a>
</span>
<div itemprop="description"><!-- details of the event -->
Description
</div>
</section>
Based solely on http://www.google.com/webmasters/tools/richsnippets
How should I mark all-day events?
For all day events it seems that the appropriate way is to give only datetime value. End date is not required.
2015/02/17
How should I mark concerts having multiple performances with varying locations (for same data multiple start and end dates) aka. subEvents?
Notice itemref to concert name.
<h1 itemscope=""><span id="concertName" itemprop="name">Foo</h1>
<p>
<span itemscope="" itemtype="http://schema.org/MusicEvent" itemref="concertName">
<strong>Wed 3.12.2014</strong> 10:05
<span itemprop="location" itemscope="" itemtype="http://schema.org/Place">
<span itemprop="name">Concert Hall</span>
</span>
<meta itemprop="startDate" content="2014-12-03T10:05:00+02:00" />
<meta itemprop="url" content="http://www.example.com/concert/8" />
</span>
<span itemscope="" itemtype="http://schema.org/MusicEvent" itemref="concertName">
<strong>Fri 26.12.2014</strong> 10:05
<span itemprop="location" itemscope="" itemtype="http://schema.org/Place">
<span itemprop="name">Concert Hall</span>
</span>
<meta itemprop="startDate" content="2014-12-26T10:05:00+02:00" />
<meta itemprop="url" content="http://www.example.com/concert/8" />
</span>
</p>
Related
I am trying to create a schema to use with several tables that use a list of products (e.g. bottles) arranged based on either height, volume, width, etc.
I tried this Microdata:
<div itemscope itemtype="http://schema.org/ItemList" id="id1">
<ul>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<meta itemprop="position" content="1" />
<span itemprop="item" itemscope itemtype="http://schema.org/Thing">
<span itemprop="name" class="name">Coke Bottle</span>
<span class="measure">
<span itemscope itemtype="http://schema.org/QuantitativeValue">
<span itemprop="value">2359</span>
<span itemprop="unitText">mm</span>
<meta itemprop="unitCode" content="MMT" />
</span> /
<span itemscope itemtype="http://schema.org/QuantitativeValue">
<span itemprop="value">92.52</span>
<span itemprop="unitText">in</span>
<meta itemprop="unitCode" content="INH" />
</span>
</span>
</span>
</li>
</ul>
</div>
The problem is that the measure is not associated directly with the product.
How can I structure this data using Microdata to maintain the measurement values using QuantitativeValue and make the ItemList work for my need?
These are just tables showing a list of product names ordered by these values either ascending or descending, they are not used for navigation, just presenting information based on aggregated data.
In your post I see the following contradictions:
The problem is that the measure is not associated directly with the product.
and
These are just tables showing a list of product names
However, if this is a product, you can use the following the valid markup for your list:
<div itemscope itemtype="https://schema.org/ItemList" id="id1">
<ul>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<meta itemprop="position" content="1" />
<span itemprop="item" itemscope itemtype="https://schema.org/Product">
<a itemprop="url" href=example.com/list.html#cokebottle><span itemprop="name" class="name">Coke Bottle</span></a>
<span class="measure" itemprop="additionalProperty" itemscope itemtype="https://schema.org/PropertyValue">
<span itemprop="value">2359</span>
<span itemprop="unitText">mm</span>
<meta itemprop="unitCode" content="MMT" />
<meta itemprop="propertyID" content="http://www.unece.org/fileadmin/DAM/cefact/recommendations/bkup_htm/add3lm.htm" /> /
<span itemprop="value">92.52</span>
<span itemprop="unitText">in</span>
<meta itemprop="unitCode" content="INH" />
<meta itemprop="propertyID" content="http://www.unece.org/fileadmin/DAM/cefact/recommendations/bkup_htm/add3hk.htm" />
</span>
</span>
</li>
</ul>
</div>
Here we used the guide of Google for Single, all-in-one-page list:
A single, all-in-one-page list hosts all list information, including full text of each item: for example, a gallery of recipes for various kinds of muffins, all contained on one page.
Note that the reference (s) for this markup must have the same URL, but different anchors such as #cokebottle in the above example. So it should be a list of all of which parts (and links to these parts) are installed on one web page.
Here we also use the type PropertyValue as embedded in the property additionalProperty. This property is part of the type Product so all markup is semantic relation and description for the specific product.
Also note that here we used the property propertyID with URL as the identifier of the value of this property.
You can’t associate a QuantitativeValue with a Thing.
The best practice is to use the most specific type available. In your case, this would be Product, or one of its sub-types, if it applies (IndividualProduct, ProductModel or SomeProducts).
This allows you to use the properties depth, height, weight, and width, all of which which can take a QuantitativeValue value.
I have adapted a code taken from example 2 on http://schema.org/ItemList
How do I use it together with Product? On frontpage and some other pages I have a list of products for which I would like to have a better markup.
The following code gives the error
A value for the position field is required.
but Product doesn't have a position, so if there is a value for position it gives different error.
<ul itemscope itemtype="http://schema.org/ItemList">
<meta itemprop="numberOfItems" content="10" />
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/Product">
<!-- <meta itemprop="position" content="1" /> -->
<a href="#" itemprop="url">
<img src="asdf.jpg" itemprop="image">
<div class="product-list__title" itemprop="name">
Product name
</div>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<div itemprop="price">
$12
</div>
<link itemprop="availability" href="http://schema.org/InStock" />
</div>
</a>
</li>
</ul>
The itemListElement property has three expected values:
ListItem
Text
Thing
ListItem is also a Thing, but it’s listed explicitly because it has a special role here: ListItem provides the position property. If you need to convey the position of the list items, you have to provide ListItem values.
Note that not every ItemList needs this. Your example with using Product values is fine (apart from the meta element which can’t be a child of ul), and unless you try to qualify for Google’s rich result (this is what the error message is about), you could keep it like that.
If you do want to provide the positions, an itemListElement could look like this:
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<meta itemprop="position" content="1" />
<div itemprop="item" itemscope itemtype="http://schema.org/Product">
<!-- your Product -->
</div>
</li>
I'm working with products that have pricing structures based on bulk-buy offers. For example, the pricing for a product may be as follows:
Buy 10-19 and the value of 1 is $3
Buy 20-29 and the value of 1 is $2
Buy 30-39 and the value of 1 is $1
Buy 40 or more and the value of 1 is $0.50
Minimum quantity available to purchase is 10.
How can I mark this up properly in structured data (Microdata format)?
Currently I have:
<span itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<meta itemprop="priceCurrency" content="USD"/>
<meta itemprop="price" content="3" />
<span itemprop="eligibleQuantity" itemscope itemtype="http://schema.org/QuantitativeValue">
<meta itemprop="minValue" content="10" />
<meta itemprop="maxValue" content="19" />
<meta itemprop="value" content="Number" />
</span>
</span>
For each variant. Then I have:
<span itemprop="priceSpecification">
<span itemprop="eligibleQuantity" itemscope itemtype="http://schema.org/QuantitativeValue">
<meta itemprop="minValue" content="10" />
</span>
</span>
On the product block itself, to indicate the minimum quantity of 10.
I'm really not at all confident this is the right structure and tags to use. Could anybody lend some insight?
You are missing the actual PriceSpecification items (as values for the priceSpecification property). UnitPriceSpecification seems to be the appropriate sub-type in your case.
So the structure could look like this:
<div itemscope itemtype="http://schema.org/Offer">
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification"></div>
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification"></div>
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification"></div>
</div>
Personally I would provide a UnitPriceSpecification for the first level (10-19), too, instead of providing its properties directly under Offer:
<div itemprop="priceSpecification" itemscope itemtype="http://schema.org/UnitPriceSpecification">
<p itemprop="eligibleQuantity" itemscope itemtype="http://schema.org/QuantitativeValue">
<span itemprop="minValue">10</span>-<span itemprop="maxValue">19</span>
</p>
<p>$<span itemprop="price">3</span> <meta itemprop="priceCurrency" content="USD"/></p>
</div>
But I don’t know if there aren’t some consumers out there that might expect it directly under Offer.
I'm defining a http://schema.org/Event for an "open house" tour of a residential home. The event's name is "Open House," but the location doesn't have a "name" (other than its address).
According to https://developers.google.com/structured-data/rich-snippets/events I ought to be able to use a PostalAddress for the location field of the snippet, perhaps like this:
<div itemscope itemtype="http://schema.org/Event">
<div itemprop="name">Open House</div>
<div itemprop="startDate" content="2015-07-04T13:00-0700">Sat, July 4th at 1pm</div>
<div itemprop="location" itemscope itemtype="http://schema.org/PostalAddress">
<div>
<span itemprop="streetAddress">123 Main St</span>,
<span itemprop="addressLocality">San Francisco</span>,
<span itemprop="addressRegion">CA</span>,
<span itemprop="postalCode">94111</span>
</div>
</div>
</div>
But this fails in the Rich Snippet test tool. https://developers.google.com/structured-data/testing-tool/ It says that my location requires "name" and "address" properties.
That makes perfect sense if the location is a named Place, e.g. a restaurant or business venue. For example, this validates in the test tool:
<div itemscope itemtype="http://schema.org/Event">
<div itemprop="name">Open House</div>
<div itemprop="startDate" content="2015-07-04T13:00-0700">Sat, July 4th at 1pm</div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place">
<div itemprop="name">WHAT DO I PUT HERE?!</div>
<div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<div>
<span itemprop="streetAddress">123 Main St</span>,
<span itemprop="addressLocality">San Francisco</span>,
<span itemprop="addressRegion">CA</span>,
<span itemprop="postalCode">94111</span></div>
</div>
</div>
</div>
The problem is, I have no idea what name to use for a residential home. It doesn't have a name, other than its address.
What's the right way to construct this snippet? Is Google's documentation incorrect? If the test tool is correct, do I have to name a nameless Place?
Right after posting my question, I realized that I could nest the address inside the name, making the name be equal to the address. The test tool accepts this. (But this feels wrong.)
<div itemscope itemtype="http://schema.org/Event">
<div itemprop="name">Open House</div>
<div itemprop="startDate" content="2015-07-04T13:00-0700">Sat, July 4th at 1pm</div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place">
<div itemprop="name">
<div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<div>
<span itemprop="streetAddress">123 Main St</span>,
<span itemprop="addressLocality">San Francisco</span>,
<span itemprop="addressRegion">CA</span>,
<span itemprop="postalCode">94111</span></div>
</div>
</div>
</div>
</div>
I'm trying to be friendly to Google Structured Data Testing tool. I try to give him an Event snippet: https://schema.org/Event
Problem is for PostalAddress: I put itemprop="location" for my PostalAddress, but then it considers that address is missing for PostalAddress.
I don't know what can I set in an adress item, as it is not even described in schema.org.
<div itemscope itemtype="http://schema.org/Event">
<h1 itemprop="name">PIÈCE DE THÉÂTRE : " L'AUBERGE DU CARAMEL " DE JEAN-LUC PECQUEUR</h1>
<ul>
<li class="avenir"><span itemprop="startDate" content="2015-04-10T20:30:00+02:00">10/04/15</span> 20h30</li>
<li class="avenir"><span itemprop="startDate" content="2015-04-11T20:30:00+02:00">11/04/15</span> 20h30</li>
<li class="avenir"><span itemprop="startDate" content="2015-04-12T15:00:00+02:00">12/04/15</span> 15h</li>
</ul>
<address>
<div itemprop="location" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="name" class="raisoc">PIÈCE DE THÉÂTRE : " L'AUBERGE DU CARAMEL " DE JEAN-LUC PECQUEUR</span>
<br />
<span itemprop="streetAddress">route de Paris<br /></span>
<span itemprop="postalCode">03630</span> <span itemprop="addressLocality">DESERTINES</span>
<br />
</div>
</address>
</div>
Its not clear in the definitions above, but examples are explicit about the usage. Try doing it the below way. snippet tool comes out green.
<div itemscope itemtype="http://schema.org/Event">
<h1 itemprop="name">PIÈCE DE THÉÂTRE : " L'AUBERGE DU CARAMEL " DE JEAN-LUC PECQUEUR</h1>
<ul>
<li class="avenir"><span itemprop="startDate" content="2015-04-10T20:30:00+02:00">10/04/15</span> 20h30</li>
<li class="avenir"><span itemprop="startDate" content="2015-04-11T20:30:00+02:00">11/04/15</span> 20h30</li>
<li class="avenir"><span itemprop="startDate" content="2015-04-12T15:00:00+02:00">12/04/15</span> 15h</li>
</ul>
<address>
<div class="event-venue" itemprop="location" itemscope itemtype="http://schema.org/Place">
<span itemprop="name" class="raisoc">PIÈCE DE THÉÂTRE : " L'AUBERGE DU CARAMEL " DE JEAN-LUC PECQUEUR</span>
<br />
<div itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress">route de Paris<br /></span>
<span itemprop="postalCode">03630</span>
<span itemprop="addressLocality">DESERTINES</span>
</div>
<br />
</div>
</address>
</div>
This error does not make sense.
You are using the location property with a PostalAddress item as value, which is fine. It’s appropriate use of the Schema.org vocabulary, and it’s also recommended by Google’s Event Rich Snippet documentation.
Now, Google’s Testing Tool reports that Google requires the address property for this PostalAddress for showing their Event Rich Snippet. But neither is Schema.org’s address property defined for PostalAddress (there can’t be an address of an address), nor does Google list that the address property would be required.
It would make sense to use address if Place is used instead of PostalAddress, but it’s plain wrong for PostalAddress. Probably Google’s Testing Tool is bugged / confusing this.