1

I spent two days to find out what the problem is with the following JSON-LD, but to no avail.

If you check this code in testing tool, you will see Product weirdly appears as the last item of BreadcrumbList.

<script type="application/ld+json">
{"@context":"https:\/\/schema.org\/","@graph":
[{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"name":"teest","@id":"https:\/\/tennisfa.com\/shop"}},{"@type":"ListItem","position":2,"item":{"name":"test","@id":"https:\/\/tennisfa.com\/shop\/product-category\/3\/"}},{"@type":"ListItem","position":3,"item":{"name":"test","@id":"https://tennisfa.com/shop/product/%d8%b3%d8%a7%da%a9-%d8%aa%d9%86%db%8c%d8%b3-%d9%87%d8%af-tour-team-wimbledon-12r-monstercombi/"}}]},{"@type":"Product","@id":"https://tennisfa.com/shop/product/%d8%b3%d8%a7%da%a9-%d8%aa%d9%86%db%8c%d8%b3-%d9%87%d8%af-tour-team-wimbledon-12r-monstercombi/","name":" Tour Team Wimbledon 12R Monstercombi","image":"https:\/\/tennisfa.com\/shop\/wp-content\/uploads\/2018\/11\/htourteamwimbledon12r.jpg","description":"test","sku":"283108","offers":[{"@type":"Offer","price":"1550000","priceSpecification":{"price":"1550000","priceCurrency":"IRT","valueAddedTaxIncluded":"false"},"priceCurrency":"IRT","availability":"https://tennisfa.com/shop/product/%d8%b3%d8%a7%da%a9-%d8%aa%d9%86%db%8c%d8%b3-%d9%87%d8%af-tour-team-wimbledon-12r-monstercombi/","seller":   {"@type":"Organization","name":"test","url":"https:\/\/tennisfa.com\/shop"}}]}]}
</script>

I think the problem is with the non-latin URLs. But I don't know how to fix it.

1

The third ListItem and the Product have the same URI (in @id).¹ This means they are the same thing.

If the structure allows it (like in your case), Google’s SDTT displays an item only once, even if it’s defined in different JSON objects.

URIs for page vs. product

If you care about Linked Data, there is one thing you might want to consider: The webpage and the product (which this webpage is about) are different things, so they should have different URIs:

  • the ListItem’s item would be the ItemPage (instead of the Product), because breadcrumbs link to pages, not to things described on these pages
  • the ItemPage has the canonical URL of the page as @id
  • the Product has the canonical URL of the page + a fragment identifier (e.g., #product) as @id

By using ItemPage, you can also make use of the breadcrumb and mainEntity properties, so you no longer need to have unrelated top-level objects in @graph.

{
  "@context": "http://schema.org",
  "@type": "ItemPage",
  "@id": ""
  "breadcrumb": {
    "@type": "BreadcrumbList"
  },
  "mainEntity": {
    "@type": "Product"
    "@id": "#product"
  }
}

¹ By the way, the availability property has this URI, too, but this is most likely an error.

0

The specification of the property **availability** tells us:

The availability of this item—for example In stock, Out of stock, Pre-order, etc.

and

Values expected to be one of these types ItemAvailability

The Enumeration members of the type ItemAvailability:

Discontinued

InStock

InStoreOnly

LimitedAvailability

OnlineOnly

OutOfStock

PreOrder

PreSale

SoldOut

It may be useful to use these values for the property availability but not url as you have it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.