After my first question about Store main blocks, I think this is way better to explain with an example.

Let's say we are doing the Footlocker webpage. And we have a homepage JSON-LD like this (which one by the way can be improved for sure, any tips would be welcome):

  "@context": "http://schema.org",
  "@type": "WebPage",
  "@id" : "",
  "name": "Footlocker",
  "alternateName": "Footlocker",
  "url": "https://www.footlocker.co.uk/en/homepage",
  "isPartOf": {
    "@type": "WebSite",
    "publisher": {
      "@id": ""
  "publisher": {
    "@type": "ShoeStore",
    "name": "FootLocker",
    "description": "Shoes Store",
    "brand": "FootLocker",
    "email": "info@footlocker.com",
    "logo": "https://www.footlocker.co.uk/INTERSHOP/static/WFS/Footlocker-Footlocker_GB-Site/-/-/en_GB/images/brand/logo-1440.png",
    "image" : "real store image? Like a photo from the inside or can be the logo image again",
    "openingHours": "Mo-Fr 08:00-21:30",
    "telephone": "+4400000000",
    "url": "https://www.footlocker.co.uk/en/homepage/about",
    "sameAs" : [
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "NY City",
      "addresRegion" : "Midtown Manhattan",
      "streetAddress": "Some street Here"
        "email": "support@footlocker.com",
        "contactType":"customer service",
        "availableLanguage" : ["English","French","Spanish"]
    "currenciesAccepted": "EUR",
    "priceRange" : "40 - 800",
    "paymentAccepted": "Credit Card, Visa",
    "potentialAction": {
    "@type": "SearchAction",
    "target": "https://www.footlocker.co.uk/en/homepage/q={search_term_string}",
    "query-input": "required name=search_term_string"

For a shoe page (product page), I basically have the previous JSON-LD with 2 more items added, breadcrumb and mainEntity. Which one, by the way also have currency keys etc. (already set in the parent ShoeStore block):

"mainEntity": {
  "@type": "Product",
  "name": "Nike 230492RX",
  "description": "Best shoe for basket...",
  "mpn": "123456789",
  "sku": "00000501",
  "brand": {
    "@type": "Organization",
    "name": "Nike"
  "offers": {
    "@type": "Offer",
    "priceCurrency": "EUR",
    "price": "120",
    "priceValidUntil": "2018-06-04 07:25:56 +0500",
    "itemCondition": "http://schema.org/UsedCondition",
    "availability": "http://schema.org/InStock",
    "seller": {
      "@type": "ShoeStore",
      "name": "FootLocker"

Footlocker sells a lot a brands (Nike, Adidas, Reebok etc.), so we have like a showcase page for each brand inside footlocker. How this one it's suppose to be?


You can use more specific WebPage types:

In both cases, you can use the mainEntity property to reference the primary entity for this page:

JSON-LD examples

  "@context": "http://schema.org",
  "@type": "ItemPage",
  "@id": "",
  "mainEntity": {
    "@type": "Product"
  "@context": "http://schema.org",
  "@type": "CollectionPage",
  "@id": "",
  "mainEntity": {
    "@type": "ItemList",
    "itemListElement": [
      {"@type": "Product"},
      {"@type": "Product"},
      {"@type": "Product"}
  • Hi @unor, Yes, itemPage for product is perfect, same with collection page for Store pages like products grid for a category. But what i mean with Brand Showcase page is like an internal 'About Nike that we(footlocker) are selling' – Héctor León Jun 6 '18 at 9:14
  • @HéctorLeón: Does this page list all products of this brand, or is it just content about the brand? And if both, what would be the primary content, the product list or the content? – unor Jun 6 '18 at 9:56
  • I think in this case (as a store) the product takes priority over the content. So how could i add this 'contact / about' content of the brand product in an overall way, not nested in each itemListElement of @type product. Trying to get some DRY here :) – Héctor León Jun 6 '18 at 13:48
  • 1
    @HéctorLeón: You could provide a Brand item as value for the about property (CollectionPage about Brand). In addition, you could give this Brand item a URI and reference this URI as value for the brand property in each Product (example). – unor Jun 6 '18 at 14:48

The structured data you specify represents the web page with the publisher as the shoe store. However, this is not a completely semantically correct solution.

Google in its Structured Data General Guidelines requires that structured data represent the main content of each web page. Here the key phrase is the main content.

Therefore, if you set the main type of your markup as the type WebPage, this will not match the specified Google requirements, because the main content of your home page is the list of products offered of e-commerce.

Structured data is part of online marketing. Your main task is to promote your e-commerce. So, probably, you need to focus your efforts on promoting your business as the ShoeStore. But not as the WebPage or its specifying parts. After all, there are many web pages, but your e-commerce should be unique. Also the website consists entirely of web pages, but they all have different content (unique at least at the website level) and therefore the structured data must also be different and have different main types of markup.

Since the list of offered products is part of the home page representing your e-commerce, it can be useful here to apply the embed type ItemList as Google recommends to list:

  • All items in the list must be of the same type
  • The text visible to the user must be similar to the information contained in the structured data on the page
  • Items shown in list format will be shown in the order specified by the position property

Note that it is possible to use two types of markup:

  • Summary page + multiple full details pages: The summary page has a short description of each item in the list, and each description points to a separate details page that is focused entirely on one item.
  • A 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.

Thus, the semantics of the structured data of your home page will represent a particular shoe store (perhaps unique) and products offered by this store. But not a web page with a publisher as a shoe store. In the end, there are many web pages, but your e-commerce is the only one.

  • Hello @nikant25, i'm totally agreed with your first 4 <p>, but whats the point then of the "@type": "website". I know sounds redundant but as i talked with @unor in the first link provided in the 1º line of question. Makes sense start in the top context and be more specific as u go deeper into the json. Can u provide a snippet of code – Héctor León Jun 7 '18 at 9:01
  • 1
    The type WebPage has properties for the specificity of some elements of the web page as breadcrumb, related link and so on. However, I can not so immediately come up with a web page that has the main content as elements of the web page. Examples you can look at below of the specifications schema.org/LocalBusiness – nikant25 Jun 7 '18 at 12:53
  • 1
    By the way Google does not have support for the type WebPage. See also the sample code here developers.google.com/search/docs/data-types/local-business – nikant25 Jun 7 '18 at 12:59

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.