Breadcrumb Microdata markup valid both for Google and Bing - schema.org

I want to create a breadcrumb navigation with the Microdata format.
So I'm using following BreadcrumbList markup and Google Structured Data Testing Tool recognized it:
<ol itemscope itemtype="http://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a itemprop="item" href="https://example.com/home">
<span itemprop="name">Home</span>
</a>
<meta itemprop="position" content="1" />
</li>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a itemprop="item" href="https://example.com/home/fashionn">
<span itemprop="name">Fashion</span>
</a>
<meta itemprop="position" content="2" />
</li>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<span itemprop="name">Coats</span>
<meta itemprop="position" content="3">
</li>
</ol>
But from Bing Markup Validator I receved following message:
We are not seeing any markup on this page. Please ensure the markup has been implemented correctly.
Regarding Bing documentation the following markup is correct for breadcrumb:
<ol>
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a itemprop="url" href="https://example.com/home">
<span itemprop="title">Home</span>
</a>
</li>
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a itemprop="url" href="https://example.com/home/fashion">
<span itemprop="title">Fashion</span>
</a>
</li>
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<span itemprop="title">Coats</span>
</li>
</ol>
So is there a way to create a breadcrumb navigation with Microdata format which would be valid both for Google and Bing?

To rephrase your goal, as far as I understand it: You want to markup your breadcrumbs
with Microdata
using two vocabularies (Schema.org and Data-Vocabulary.org)
without duplicating your content
so that Bing’s and Google’s testing tool still validate it.
Microdata makes it hard to mix vocabularies:
In itemtype, you can only use types from the same vocabulary.
In itemprop, you can mix properties from different vocabularies, but only the properties from one vocabulary can be specified in the shorter string form, while the properties from all other vocabularies have to be specified as absolute URIs.
(This isn’t a problem if consumers support the absolute URI form for the properties they recognize.)
(By the way, RDFa supports mixing vocabularies way better, so you might want to consider using RDFa instead of Microdata.)
A way to avoid the problem, maybe.
Use Data-Vocabulary.org for Bing and Google.
While the vocabulary Data-Vocabulary.org is deprecated and deleted (I wonder why Bing is still recommending it), Google still seems to support it, too (probably because it’s still used on many websites from back then, when Google recommended it, too).
I don’t know if it really works, but at least Google’s SDTT doesn’t give any warnings/errors for your Data-Vocabulary.org snippet.
Solutions, maybe.
Unfortunately, I can’t test it in Bing’s tool (because an account is required), so the following snippets don’t necessarily work.
itemref + absolute URIs for Data-Vocabulary.org’s title
This snippet uses Schema.org as primary vocabulary. An empty div outside of Schema.org’s BreadcrumbList is used to create the item for Data-Vocabulary.org’s Breadcrumb. This item references the a elements via itemref. It reuses the url property (because it’s named the same in both vocabularies) and provides Data-Vocabulary.org’s title property as absolute URI.
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" itemref="b1 b2">
</div>
<ol itemscope itemtype="http://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<span itemprop="item" itemscope itemtype="http://schema.org/WebPage">
<span itemprop="name">
<a itemprop="url" href="https://example.com/" id="b1">
<span itemprop="http://data-vocabulary.org/Breadcrumb/title">Home</span>
</a>
</span>
</span>
<meta itemprop="position" content="1" />
</li>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<span itemprop="item" itemscope itemtype="http://schema.org/WebPage">
<span itemprop="name">
<a itemprop="url" href="https://example.com/fashion" id="b2">
<span itemprop="http://data-vocabulary.org/Breadcrumb/title">Fashion</span>
</a>
</span>
</span>
<meta itemprop="position" content="2" />
</li>
</ol>
It works in Google’s SDTT (it should be fine to ignore the warning that Breadcrumb/title is not recognized; it’s specified as absolute URI, so it can be used everywhere).
Whether it works in Bing’s testing tool depends on if Bing recognizes http://data-vocabulary.org/Breadcrumb/title as title property.
As the vocabulary is deleted, I’m not sure if it really was http://data-vocabulary.org/Breadcrumb/title instead of http://data-vocabulary.org/title, but if I remember it correctly, it should have been the first one.
itemref + absolute URIs for Schema.org’s name
Same idea like in the snippet above, but this time Data-Vocabulary.org would be the primary vocabulary, while Schema.org’s BreadcrumbList gets created in an empty div.
This is harder, because Schema.org’s structure requires more properties, so you have to create more empty elements.
<div itemscope itemtype="http://schema.org/BreadcrumbList">
<div itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<span itemprop="item" itemscope itemtype="http://schema.org/WebPage" itemref="b1">
</span>
<meta itemprop="position" content="1" />
</div>
<div itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<span itemprop="item" itemscope itemtype="http://schema.org/WebPage" itemref="b2">
</span>
<meta itemprop="position" content="2" />
</div>
</div>
<ol itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<li itemprop="title">
<a itemprop="url" href="https://example.com/" id="b1">
<span itemprop="http://schema.org/name">Home</span>
</a>
</li>
<li itemprop="title">
<a itemprop="url" href="https://example.com/fashion" id="b2">
<span itemprop="http://schema.org/name">Fashion</span>
</a>
</li>
</ol>
It works in Google’s SDTT (it should be fine to ignore the warning that name is not recognized; it’s specified as absolute URI, so it can be used everywhere).

Related

Google SDTT: "The property 'availability' is not recognized by Google for an object of type Product"

Situation: need to add the availability property to a product page.
Schema.org recommends this format for Microdata:
<link itemprop="availability" href="http://schema.org/InStock" />In stock
I'm combining it with the code on our site:
<li>
<i class="fa fa-check-square-o">
<link itemprop="availability" href="http://schema.org/InStock">
<span>In Stock</span>
</i>
</li>
Problem: Google Structured Data Testing Tool reports:
http://schema.org/InStock (The property availability is not recognized by Google for an object of type Product.)
Is this a code issue?
Or am I missing some Schema/Google "wrapper" for the availability property?
Ack. Figured it out. availability has to be inside an Offer:
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<h1>
<ul>
<li>
<i class="fa fa-check-square-o">
<link itemprop="availability" href="http://schema.org/InStock">
<span>In Stock</span>
</i>
</li>
</ul>
</h1>
</div>

Google Merchant Centre says missing or invalid schema.org microdata for availability

Can someone please tell me what's wrong with the following code, as Google Merchant Centre is saying missing or invalid schema.org microdata for availability:
<ul>
<li itemprop="offers" itemscope itemtype="http://schema.org/Offer">
<span itemprop="sku" content="MATE221W"></span>
<span itemprop="priceCurrency" content="GBP"></span>
<span itemprop="price" content="17.95"></span>
<link itemprop="availability" href="http://schema.org/InStock" />
</li>
</ul>

Why is my http://schema.org/BreadcrumbList not validating?

I'm using schema.org microdata on my web site but I'm struggling with the BreadcrumbList as Google's structured data testing tool will not validate it. It looks correct and I can't see what's wrong.
You can click the above link to see the errors, but to summarise, Google says that the itemtype attribute has an invalid value for each of the items and also complains that the mainEntityOfPage attribute is missing from the list. I did try adding mainEntityOfPage in a meta tag but it still complained about it.
What am I doing wrong?
<ul itemscope="" itemtype="http://schema.org/BreadcrumbList">
<li class="home" itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span itemprop="name">Home</span>
<span>/ </span>
<meta itemprop="position" content="1">
</li>
<li class="category3" itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span itemprop="name">RC Cars</span>
<span>/ </span>
<meta itemprop="position" content="2">
</li>
<li class="category10" itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span itemprop="name">Car Kits</span>
<span>/ </span>
<meta itemprop="position" content="3">
</li>
<li class="product">
<strong>Tamiya Lunch Box. No ESC [58347]</strong>
</li>
</ul>
The breadcrumbs must use the breadcrumb property, and put this inside another itemscope (ideally http://schema.org/WebPage). You are also missing is itemprop="breadcrumb which must be right before your itemscope.
<div class="breadcrumbs" itemscope itemtype="http://schema.org/WebPage">
<ul itemprop="breadcrumb" itemscope="" itemtype="http://schema.org/BreadcrumbList">
<li class="home" itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span itemprop="name">Home</span>
<span>/ </span>
<meta itemprop="position" content="1">
</li>
<li class="category3" itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span itemprop="name">RC Cars</span>
<span>/ </span>
<meta itemprop="position" content="2">
</li>
<li class="category10" itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span itemprop="name">Car Kits</span>
<span>/ </span>
<meta itemprop="position" content="3">
</li>
<li class="product">
<strong>Tamiya Lunch Box. No ESC [58347]</strong>
</li>
</ul>

Microdata + Schema.org validation error: "is not a know valid target"

I try to markup my first page (a news website). The structure is like this:
<html itemscope itemtype="http://schema.org/WebPage>
<body>
<ul itemprop="mainContentOfPage" itemscope itemtype="http://schema.org/ItemList"> // main part
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/NewsArticle"> head line of an news1 </li>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/NewsArticle"> head line of an news2 </li>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/NewsArticle"> head line of an news3 </li>
</ul>
<div>
</body>
</html>
I got error with itemprop="mainContentOfPage" and itemprop="itemListElement" in Google’s Testing Tool because of
is not a know valid target...
How can I solve this error?
The mainContentOfPage property cannot have an ItemList as value.
You probably want to use the mainEntity property instead:
<html itemscope itemtype="http://schema.org/WebPage">
<body>
<ul itemprop="mainEntity" itemscope itemtype="http://schema.org/ItemList">
</ul>
</body>
</html>
Meaning: the ItemList item is the primary entity described in this WebPage item.

Schema.org Rich Snippets offers [Offer] loading ID?

I've had structured markup set up on a website now for around a week and Google has indexed about 20% of it however it's still not displaying. After checking the markup was correct in the validating tool I noticed this:
Everything looks fine other than the
offers [Offer]: http://www.website.co.uk/price-excluding-tax-990
Now take a look at the source code:
<div class="product-view" itemscope itemtype="http://schema.org/Product">
<span itemprop="sku">PM90-0100</span>
<div class="product-name">
<h1 itemprop="name">Basket PM90-0100</h1>
</div>
<p class="availability in-stock">Availability: <span>In stock</span></p>
<div class="price-box">
<span class="price-excluding-tax">
<span class="label">Excl VAT: </span>
<span itemprop="offers" itemscope itemtype="http://schema.org/Offer" class="price" id="price-excluding-tax-990">
<link itemprop="availability" href="http://schema.org/InStock"/>
<meta itemprop="priceCurrency" content="GBP" />
<span itemprop="price">£30.00</span>
</span>
<div itemprop="description" class="std">This is a brand new basket to fit various Freerider mobility scooters.</div>
[code continues...]
Does this all look symantically correct? Somehow in Webmaster Tools it is grabbing the price-excluding-tax-990 ID and using it in the offers [Offer]: - which seems odd.