Need help adding Microdata to an event - schema.org

I'm struggling to correctly add microdata to events on my page. The Google Structured Data Testing tool can read the data but it isn't displaying it correctly. I'm getting confused.
I am trying to tag it for a sports league that has a single event on one night that consists of three games all taking place at the same location.
<div itemscope itemtype="http://schema.org/SportsEvent"><!--microdata week 1 event-->
<meta itemprop="name" content="Week 1 Lacrosse Games">
<meta itemprop="location" content="Street, Town, NY">
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> <!--column-->
<h3>Week 1<br><span itemprop="startDate" content="2014-06-27T18:00">Friday, June 27</span></h3>
<br>
<div itemprop="subEvent" itemscope itemtype="http://schema.org/subEvent">
<h4><span itemprop="name">Game 1</span> - 6:00 PM</h4>
<p><span itemprop="performer">Team 1 vs.Team 2</span></p>
</div>
<div itemprop="subEvent" itemscope itemtype="http://schema.org/subEvent">
<h4><span itemprop="name">Game 2</span> - 7:00 PM</h4>
<p><span itemprop="performer">Team 3 vs. Team 4</span></p>
</div>
<div itemprop="subEvent" itemscope itemtype="http://schema.org/subEvent">
<h4><span itemprop="name">Game 3</span> - 8:00 PM</h4>
<p><span itemprop="performer">Team 5 vs. Team 6</span></p>
</div>
</div><!--end column-->
</div><!--microdata week 1 event-->

I'm not sure what sort of problems you're having with the rich snippets displaying, but I did notice a couple of things that I'd recommend you change. Since all of these events are sporting events, I would probably recommend that you use the SportsEvent type for them all. You also need to specify all of the start times in ISO 8601 format. Additionally, the expected value of the "performer" property is either an Organization or Person, and SportsTeam is an extension of the Organizaton type. So I would recommend using that property twice within each event so that you could specify the two different teams that are playing, along with the SportsTeam type, like this:
<div itemprop="subEvent" itemscope itemtype="http://schema.org/SportsEvent">
<h4><span itemprop="name">Game 1</span> - <meta itemprop="startDate" content="2014-06-27T18:00" />6:00 PM</h4>
<p><span itemprop="performer" itemscope itemtype="http://schema.org/SportsTeam">
<span itemprop="name">Team 1</span></span> vs</p>
<p><span itemprop="performer" itemscope itemtype="http://schema.org/SportsTeam">
<span itemprop="name">Team 2</span></span></p>
</div>
I hope that helps.

Because I was using subevents, Google required that I have the microdata URL called out for each event. They have a rule that says if you have multiple events on the same page, you need to have a URL for each one.
Since I used the same page for all of them, I gave each subevent a unique ID and I linked that ID in the address.

Related

Microdata: Why does Google demand location for an event that is at a venue?

I have the following microdata HTML code:
<div itemscope itemtype="http://schema.org/PerformingArtsTheater">
<h2 itemprop="name">The Old Vic</h2>
<div itemscope itemtype="http://schema.org/TheaterEvent" itemprop="http://schema.org/event">
<h3 itemprop="name">Endgame</h3>
<div itemprop="startDate">2020-01-27</div>
</div>
</div>
I.e. : A PerformingArtsTheater called "The Old Vic" has an event, the TheaterEvent called "Endgame".
When an event is at a PerformingArtsTheater, which is a Place, I would think that is is obvious that the TheaterEvent's location is that same `PerformingArtsTheater`` ?
But Google's Structured Data Test Tool finds an error in the TheaterEvent: "A value for the location field is required.".
How come? Wouldn't a location field here be redundant at best, and a contradiction at worst?
(Like "February at The Old Vic: Endgame by Samuel Beckett at The Old Vic.")
Is there a way to please Gogle here, without introducing redundancy?
Thing > Event > TheaterEvent
TheaterEvent (Theater performance.) - location property expected Type place or more specific object like PerformingArtsTheater:
Thing > Place > CivicStructure > PerformingArtsTheater
In your case the PerformingArtsTheater is The Old Vic - the correct data structure outline:
Location (Required property for event snippet)
https://developers.google.com/search/docs/data-types/event
<div itemprop="location" itemscope="" itemtype="http://schema.org/PerformingArtsTheater">
<span itemprop="name">Theater name</span>
<meta itemprop="address" content="London, UK"/>
</div>
Put the location as PerformingArtsTheater property (Nested object)
<section itemscope="" itemtype="http://schema.org/TheaterEvent">
<h2 itemprop="name">Event Name</h2>
<div itemprop="startDate">2020-01-27</div>
<address itemprop="location" itemscope="" itemtype="http://schema.org/PerformingArtsTheater">
<p itemprop="name" content="Theater name">Theater name</p>
<meta itemprop="address" content="Bennelong Point, Sydney NSW 2000, Australia"/>
</address>
</section>
Result ==> No errors:
Google snippet preview (Add image, description and so on)
By the way this is great example of nesting schema.org objects.

ItemList with QuantitativeValue for table lists

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.

Multiple itemscope location schemes

I use itemscopes for a gallery, based in Brazil but they also have two other locations for the exhibitions somewhere else, all of them showing up in the footer.
Can I use multiple Location Schemes on a page? If so, how would I do this? Is it fine if I just duplicate the following, or should I split it up with the first belonging to Organization and the other two to Places?
<p itemscope itemtype="http://schema.org/Place">
<span itemprop="name" style="display:none;">Gallery</span>
<span itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
<span itemprop="streetAddress">{!! $street !!}</span><br>
<span itemprop="addressLocality">{!! $town !!}</span><br>
<span itemprop="postalCode">{!! $postal !!}</span>
<span itemprop="addressRegion">{!! \App\Info::val('adresscountry') !!}</span><br>
<span itemprop="telephone">{!! $phone !!}</span><br><br>
<span>{!! $openinghours !!}</span><br><br>
<span itemprop="email">mail#gallery.com</span><br><br>
</span>
</p>
It is one organization that owns three places where exhibitions are held. It would be nice if every place would be featured on search machines, no need for the specific exhibitions.
Note that the following doesn’t necessarily lead to rich results in search engines. In case of Google Search, it seems they don’t offer a rich result for places (and even if they would, it would probably require a dedicated page per place). However, they have a rich result for events.
You could provide an Organization item with three location values:
<div itemscope itemtype="http://schema.org/Organization">
<div itemprop="location" itemscope itemtype="http://schema.org/Place" id="loc-1"><!-- location 1 --></div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place" id="loc-2"><!-- location 2 --></div>
<div itemprop="location" itemscope itemtype="http://schema.org/Place" id="loc-3"><!-- location 3 --></div>
</div>
For each ExhibitionEvent, you could reference its location (assuming that the places are part of the footer on the event pages, too) via the itemref attribute:
<div itemscope itemtype="http://schema.org/ExhibitionEvent" itemref="loc-2">
</div>

what is the current opinion on using <meta> tags to hide individual instances of a recurring itemtype="http://schema.org/Event"

This event is a local farm market where the client will be making weekly appearances at a venue which shifts bi-annually. Because the recurrence of the event is irregular (some weeks the start time may be different and the number of days between events varies between 7 and 5), there is plenty of justification to list them individually. However, a human reader will not like the aesthetics of 20+ listings all having the same description.
You don’t have to duplicate the description, you can use the itemref attribute:
<p itemprop="description" id="farm-market">…<!-- description for all events --></p>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<time itemprop="startDate">2015-01-20</time>
</div>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<time itemprop="startDate">2015-02-04</time>
</div>
If you don’t want to show any content from the single events (i.e., not even the date), then yes, you should use meta elements in Microdata:
<p itemprop="description" id="farm-market">…<!-- description for all events --></p>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<meta itemprop="startDate" content="2015-01-20">
</div>
<div itemscope itemtype="http://schema.org/Event" itemref="farm-market">
<meta itemprop="startDate" content="2015-02-04">
</div>
There’s nothing wrong about using meta.
It’s what gets used in some examples from the Microdata (W3C Working Group Note) specification, and for this purpose Microdata defines that it’s valid to use meta elements in the body.

schema.org for watches : catalog, dataset, product ?

I'm working on a website about watches. Goal is to display brands, brand's collections, watches, news, reviews, videos, an so on.
I'm asking myself on which kind of schema to use on collections / watches... Watch is a product, but we don't sell watches. We only display informations about watches, their brands, the official descriptions, some reviews, etc...
Is a collection a "DataCatalog" and each watch a dataset ? It is a good idea to want to add itemtype on a collection ? Or only use "Product" type on final watches from collection ?
I think it's difficult to understand the good way to implement schema.org due to the types limitation. And you, What do you think about this kind of problem ?
Thanks in advance for any suggestion
If you want to describe watch as a product using schema.org/Product is a perfect catch. I'll explain.
As you may see from schema.org/Product class structure it doesn't contain any properties for describing selling or buying. It has review, brand and other product specific properties. For describing offer/offers it has special item - well, offers of type schema.org/Offer. This type instead is exactly about selling/buying smth with properties price, acceptedPaymentMethod, etc.
Consider example from schema.org/Product page:
<div itemscope itemtype="http://schema.org/Product">
<span itemprop="name">Kenmore White 17" Microwave</span>
<img src="kenmore-microwave-17in.jpg" alt='Kenmore 17" Microwave' />
<div itemprop="aggregateRating"
itemscope itemtype="http://schema.org/AggregateRating">
Rated <span itemprop="ratingValue">3.5</span>/5
based on <span itemprop="reviewCount">11</span> customer reviews
</div>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<span itemprop="price">$55.00</span>
<link itemprop="availability" href="http://schema.org/InStock" />In stock
</div>
Product description:
<span itemprop="description">0.7 cubic feet countertop microwave.
Has six preset cooking categories and convenience features like
Add-A-Minute and Child Lock.</span>
Customer reviews:
<div itemprop="review" itemscope itemtype="http://schema.org/Review">
<span itemprop="name">Not a happy camper</span> -
by <span itemprop="author">Ellie</span>,
<meta itemprop="datePublished" content="2011-04-01">April 1, 2011
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
<meta itemprop="worstRating" content = "1">
<span itemprop="ratingValue">1</span>/
<span itemprop="bestRating">5</span>stars
</div>
<span itemprop="description">The lamp burned out and now I have to replace
it. </span>
</div>
<div itemprop="review" itemscope itemtype="http://schema.org/Review">
<span itemprop="name">Value purchase</span> -
by <span itemprop="author">Lucas</span>,
<meta itemprop="datePublished" content="2011-03-25">March 25, 2011
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
<meta itemprop="worstRating" content = "1"/>
<span itemprop="ratingValue">4</span>/
<span itemprop="bestRating">5</span>stars
</div>
<span itemprop="description">Great microwave for the price. It is small and
fits in my apartment.</span>
</div>
...
</div>
As you can see all product specific properties inserted in Product entity.
For broader research you may check Google markup for products which of course influenced on schema.org way of handling things.
Relating Dataset and DataCatalog types - they are not intended for such use. Instead they provide way for describing, well, some datasets (e.g., dataset of New York weather). For further details about this types you may check:
W3C page about this proposal with examples
Post in schema.org blog which reveals more details about it