How to specify similar items in Schema.org? - schema.org

Say I have place or business ( itemType = LocalBusiness ) and want to list its similar items (businesses) in page.
I want something like this:
<div itemscope itemType="https://schema.org/LocalBusiness">
<div itemprop="name">Biz Name</div>
<meta itemprop="image" content="image url" />
<div itemprop="description">Description</div>
.
.
.
</div>
<!--What should be the itemType of #other-similar-businesses to tell search engines these are Similar Items-->
<div id="other-similar-businesses" itemscope itemType="?" itemprop="?">
<div itemscope itemType="https://schema.org/LocalBusiness">
<div itemprop="name">Biz Name</div>
<meta itemprop="image" content="image url"/>
<div itemprop="description">Description</div>
.
.
.
</div>
<div itemscope itemType="https://schema.org/LocalBusiness">
<div itemprop="name">Biz Name</div>
<meta itemprop="image" content="image url"/>
<div itemprop="description">Description</div>
.
.
.
</div>
</div>
There is a sameAs property. According to schema.org :
URL of a reference Web page that unambiguously indicates the item's identity. E.g. the URL of the item's Wikipedia page, Freebase page, or official website.
But I don't know if it is suitable for this case.
What kind of type (and property if available) should I use?

Schema.org doesn’t provide a general property that conveys that a thing A is similar to a thing B. (The closest property is probably relatedLink, but this can only be used on WebPage items.)
Probably because that would be a rather useless relation, as things could be similar in many different ways. Instead, Schema.org tends to define more specific relations, e.g., containedInPlace/containsPlace if the places are located in another place (e.g., in the same city).
But I think your problem can be solved in a different way. If I understand your case correctly, you have a page about a single (e.g.) Restaurant item, and on that page you also link to pages that are about (somewhow related/similar) Restaurant items. Consumers should understand that one is the restaurant the page is about, and the other ones have their own pages.
mainEntity/mainEntityOfPage for the primary restaurant
Then you could make use of mainEntity (if you have a WebPage item) or the inverse mainEntityOfPage (see details). This allows you to convey which one of the many Restaurant items is the primary one, i.e., the one the page is about:
<body itemscope itemtype="http://schema.org/ItemPage">
<main>
<article itemprop="mainEntity" itemscope itemtype="http://schema.org/Restaurant">
<!-- primary restaurant -->
</article>
</main>
<aside>
<article itemscope itemtype="http://schema.org/Restaurant">
<!-- secondary restaurant -->
</article>
<article itemscope itemtype="http://schema.org/Restaurant">
<!-- secondary restaurant -->
</article>
</aside>
</body>
This doesn’t change that the secondary restaurants are top-level items, but this should not be a problem. There’s nothing bad about having multiple top-level items; it often can’t be prevented, because there aren’t suitable properties for all cases.
If you absolutely don’t want this, the hasPart property could be used for all Restaurant items. I don’t like this, because I don’t consider the secondary restaurants to be really part of the page, but strictly speaking, they are (i.e., in the form of teasers).
relatedLink for links to secondary restaurants
In case you don’t need structured data about the secondary restaurants on that page, you could of course simply link to them, by using the already mentioned relatedLink property:
<body itemscope itemtype="http://schema.org/ItemPage">
<main>
<article itemprop="mainEntity" itemscope itemtype="http://schema.org/Restaurant">
<!-- primary restaurant -->
</article>
</main>
<aside>
<ul>
<li><a itemprop="relatedLink" href="/r2">Restaurant 2</a></li>
<li><a itemprop="relatedLink" href="/r3">Restaurant 3</a></li>
</ul>
</aside>
</body>

Related

It seems schema.org/Review is not recognized by Google Search anymore or I made a mistake

I have received a message a couple of days ago that Google Search Engine has a problem identifying my ObjectType 'ItemReviewed'.
I am a collaborator on a moviesite and implement schema.org to my reviews.
<div itemprop="review" itemscope itemtype="http://schema.org/Review">
<span itemprop="reviewBody">
<span itemprop="itemreviewed">Title of the movie</span>
<IMG>itemprop="image"</IMG>
<img border="0" src="https://example.com/wp-content/img/30star.png" alt="rating" />
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"><meta itemprop="worstRating" content = "0"/>Rating: <span itemprop="ratingValue">3</span> / <span itemprop="bestRating">5</span></div>
Review by <span itemprop="author">Selina</span> op <meta itemprop="datePublished" content="2020-02-13">13 februari 2020<p></div>
Can anybody help me. It worked fine for years up until a few days ago.
NOTE: I know google has recently changed the markup for businesses so the rating is not something self-serving, but this a movieblog and the ratings are rating the movie not the website. Should I use another markup?
We are talking about genuine, independent, and unpaid editorial reviews
Google recently started to report on reviews.
In your case you have marked up itemprop="review" outside the scope of an item. Which is invalid unless you did not share all the code?
You've also marked up itemreviewed. It should be itemReviewed with capital R. You should not place the review in another item and use itemReviewed at the same time. They are different ways to do the same thing.
Your itemReviewed is just some text. This is interpreted as it being a 'Thing'. Google only supports reviewing a very restricted list of types, where a basic Thing is not included:
https://developers.google.com/search/docs/data-types/review-snippet
Movie is on the list, which I suspect is what you are reviewing. So you need to mark up your Movie and either place the review inside that with the property review, or place the Movie inside your review with the property itemReveiwed.
does this code looks 'ok' to you or should I add something else, cause there are a lot properties and I would like to have a minimum amount of them, cause I will have to make changes to up to 1000 movie reviews.
<div itemscope itemtype="http://schema.org/CriticReview">
<div itemprop="itemReviewed" itemscope itemtype="http://schema.org/Movie">
<span itemprop="name">movie title</span>
<span itemprop="director">Alfred Hitchcock</span>
<meta itemprop="datePublished" content="2020-02-19">19 februari 2020</meta>
<img itemprop="image" src="https://example.com/wp-content/img/img_2004_blu-ray.2.jpg"/>
</div>
<span itemprop="author">name of the author of the review</span>
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
<meta itemprop="worstRating" content = "0"/>
Rating: <span itemprop="ratingValue">1</span> / <span itemprop="bestRating">5</span>
</div>
Second question, should I use meta tags or span tags, or doesn't it matter?

"mainEntityOfPage" and "CreativeWork" usage on a web page of type "Organization"

I have a question regarding the correct use of the mainEntityOfPage, in this scenario:
The homepage of the site is of Organization type with name, description of the company, phone, address etc.
At the bottom of this page I have 3 snippets to 3 different articles published by this company.
So, I am trying to declare the homepage of Organization type, being the main topic of the web page. Also, I would like to declare using Schema.org that this company has written 3 different articles which are located on their own web pages. These snippets consists of headline of article, an introducing paragraph, a picture and a "read more" button.
I use the following code:
<body itemscope itemtype="http://schema.org/Organization" >
<a href="https://testsite.com/index.html" itemprop="url">
<img src="https://testsite.com/img/logo.jpg" itemprop="logo" alt="Company logo" />
</a>
<p itemprop="name">Company name</p>
<p itemprop="description">Company description</p>
<div itemprop="mainEntityOfPage" itemscope itemtype="https://schema.org/CreativeWork">
<meta itemprop="thumbnailUrl" content="https://testsite.com/img/article-1-picture.jpg" />
<p itemprop="headline">Article 1 headline</p>
<p itemprop="description">Article 1 first paragraph.</p>
<a itemprop="url" href="https://testsite.com/url-article-1.html">Read more</a>
</div>
<div itemprop="mainEntityOfPage" itemscope itemtype="https://schema.org/CreativeWork">
<meta itemprop="thumbnailUrl" content="https://testsite.com/img/article-2-picture.jpg" />
<p itemprop="headline">Article 2 headline</p>
<p itemprop="description">Article 2 first paragraph.</p>
<a itemprop="url" href="https://testsite.com/url-article-2.html">Read more</a>
</div>
<div itemprop="mainEntityOfPage" itemscope itemtype="https://schema.org/CreativeWork">
<meta itemprop="thumbnailUrl" content="https://testsite.com/img/article-3-picture.jpg" />
<p itemprop="headline">Article 3 headline</p>
<p itemprop="description">Article 3 first paragraph.</p>
<a itemprop="url" href="https://testsite.com/url-article-3.html">Read more</a>
</div>
</body>
The code above generates the following schema:
The code is valid with Structured Data Testing Tool.
I am afraid that using mainEntityOfPage here, 3 times, to introduce the article snippets would result into the situation that the search engine would wrongly consider my page of type CreativeWork rather than Organization type, which is the real main topic on this web page.
So, this code says to the search engine that the page is of Organization with 3 articles on separate pages, or only CreativeWork type?
Your structured data is not conveying what you intend to convey. It’s saying that the Organization is the primary entity on the three CreativeWorks.
So, I am trying to declare the homepage of Organization type, being the main topic of the web page.
For this, you need a WebPage item that represents the homepage.
<body itemscope itemtype="http://schema.org/Organization">
<div itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/WebPage">
<link itemprop="url" href="https://example.com/" /> <!-- the canonical URL of your homepage -->
</div>
</body>
I would like to declare using Schema.org that this company has written 3 different articles which are located on their own web pages.
For this, you need properties that say how the company and the articles¹ are related, like:
publisher
author
etc.
Note that, for example, publisher is only defined for one direction (an article has a publisher), not for the other one (an organization has published an article).² So you have to provide this property in the Article, not in the Organization.
<article itemscope itemtype="http://schema.org/Article">
<div itemprop="mainEntityOfPage" itemscope itemtype="http://schema.org/ItemPage">
<link itemprop="url" href="https://example.com/url-article-1.html" /> <!-- the canonical URL of the article page -->
</div>
<div itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<link itemprop="url" href="https://example.com/" /> <!-- the canonical URL of the organization’s homepage -->
</div>
</article>
¹ if they actually are articles, you should use the Article type instead of the parent type CreativeWork
² Microdata (in contrast to RDFa and JSON-LD) offers only a non-standardized way to use these properties in the other direction: see this answer

Which Schema.org property should I use for popular posts item list?

Example markup of what I have:
<body itemscope='itemscope' itemtype='http://schema.org/WebPage'>
<div id="main" itemprop='mainContentOfPage' itemscope='itemscope' itemtype="http://schema.org/Blog">
<article itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
blah blah blah
</article>
<div>
<aside>
<ul>
<li><article><img/>popular post article</article></li>
<li><article><img/>popular post article</article></li>
</ul>
</aside>
</body>
What should I use for the articles within each list item? I thought of articleSection, but that doesn't make sense because it's not within an article schema. So I'm trying to wrap my around the best way to add Microdata here.
Moving the aside within the article isn't really a viable option either. This is Blogger, so doing that would be tricky, especially on the admin widget-management side of things.
Update (2016): In the meantime Schema.org introduced a property to denote that an item is the main/primary one for a page: mainEntity (see details). So the below answer is somewhat out of date.
If they are also blog posts, you would use BlogPosting, too.
Microdata is not only for the main content of a page. However, the Schema.org vocabulary currently lacks a property to mark an item as the main content item of a page (the property mainContentOfPage is only allowed for WebPage).
By using articleBody for the main BlogPosting, capable consumers should be able to deduce that the other BlogPosting items on the page (which naturally don’t have the articleBody property) are only linked/related posts.
So it could look like:
<div itemscope itemtype="http://schema.org/Blog">
<article itemprop="blogPost" itemscope itemtype="http://schema.org/BlogPosting">
<div itemprop="articleBody">…</div>
</article>
<aside>
<ul>
<li>
<article itemprop="blogPost" itemscope itemtype="http://schema.org/BlogPosting">
<span itemprop="name">Post 4</span>
</article>
</li>
<li>
<article itemprop="blogPost" itemscope itemtype="http://schema.org/BlogPosting">
<span itemprop="name">Post 5</span>
</article>
</li>
</ul>
</aside>
</div>

Defining a service offered (sold) by a local business using schema.org

I have a website where people can compare driving schools. I've added alle the details (name, description, location, pricerange, etc.) I know about these schools to their pages on my website, using the schema.org markups.
Since a few weeks, people can also buy (read: book) their first driving lesson offered by the schools on my website, directly on my website. I was searching for a way to add this to the schema.org markup at my pages, but I don't really know what to use in my case.
I think of the two following possibilties. Can you tell me which one I should use? Or that you may think of a better solution?
<div itemscope itemtype="http://schema.org/LocalBusiness">
<div itemprop="name">...</div>
<div itemprop="description">...</div>
<div itemprop="priceRange">...</div>
<div itemprop="makesOffer" itemscope itemtype="http://schema.org/Offer">
<div itemprop="name">...</div>
<div itemprop="price">...</div>
<div itemprop="priceCurrency">...</div>
</div>
</div>
Or
<div itemscope itemtype="http://schema.org/LocalBusiness">
<div itemprop="name">...</div>
<div itemprop="description">...</div>
<div itemprop="priceRange">...</div>
<div itemprop="owns" itemscope itemtype="http://schema.org/Product">
<div itemprop="name">...</div>
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<div itemprop="price">...</div>
<div itemprop="priceCurrency">...</div>
</div>
</div>
</div>
At last, I was looking for a better schema type for driving schools, but I don't think they have specified driving schools. Do you think it is better to use ProfessionalService instead of LocalBusiness?
I think both of your examples are possible.
If you don’t have any specific requirements from consumers you expect to make use of your markup, I’d go with the first example: LocalBusiness → makesOffer → Offer.
It seems that you don’t really need the Product item, as you are only using the name property, which could be used on the Offer instead.

Schema.org setup for multiple events on one page

Is there a proper way to show multiple events on one page in Schema.org? Ideally, we don't want a page for each event. Here is a sample structure of what we want:
<div itemscope itemtype="http://schema.org/Event">
<div itemprop="name"><h2>Chili Cookoff</h2></div>
<div itemprop="location" itemscope itemtype="http://schema.org/PostalAddress">
<h3><span itemprop="addressLocality">Manhatten</span>, <span itemprop="addressRegion">New York</span> - <span itemprop="addressCountry">US</span></h3>
</div>
<div>
May, 1st 2014 - May 4th, 2014
<meta itemprop="startDate" content="2014-05-1:00.000">
<meta itemprop="endDate" content="2014-05-4:00.000">
</div>
<div itemprop="description">An awesome chili cookoff you won't want to miss!.</div>
</div>
<div itemscope itemtype="http://schema.org/Event">
<div itemprop="name"><h2>Dinner on the River</h2></div>
<div itemprop="location" itemscope itemtype="http://schema.org/PostalAddress">
<h3><span itemprop="addressLocality">Brooklyn</span>, <span itemprop="addressRegion">New York</span> - <span itemprop="addressCountry">US</span></h3>
</div>
<div>
<meta itemprop="startDate" content="2014-05-1:00.000">May, 1st 2014 -
<meta itemprop="endDate" content="2014-05-2:00.000">May 2nd, 2014
</div>
<div itemprop="description">A dinner to remember forever.</div>
</div>
Using the Google Rich Snippits tool, it doesn't want to respect there being multiple events, but I am not sure if that means the crawlers will not notice them.
Your usage of Microdata and the Schema.org vocabulary is valid.
Every conforming parser will understand this. See for example http://linter.structured-data.org/, which shows snippets that could result from markup.
However, actual search engine providers decide for themselves if, when or how to use your annotations, for example for enhancing search results. It may be the case that some providers decide that they don’t "support" multiple items on a single webpage, where "support" only means that they, for example, don’t show an enhanced snippet on their SERPs.
This is different from provider to provider, their behaviour may change over time and it may depend on many other factors of your site, too. (Discussing such SEO-related things is typically off-topic on Stack Overflow, but Webmasters SE may be an appropriate place.)
Example: Google recommends to mark up all entities on a page:
When you have multiple entity types on a page, we recommend you mark up all entities on that page to help Google algorithms better understand and index your content.