I have a page that lists multiple items, and each item has its own set of sub-items that are linked from there to their own separate pages. It looks something like this:

Title: Songs written by Person
Short Summary
Subheading: Pop Songs
               - List of pop songs, with links to each 
Subheading: Rock Songs
               - List of rock songs, with links to each 

I've been just learning about Schema.org and can't wrap my mind around it. I understand I should probably use CollectionPage here, and I was thinking of marking each subheading as an ItemList.

The problem is that Google's Structured Data Testing Tool errors with Multiple ItemList markups on a page are not allowed when multiple ItemList are presented, and each itemListElement needs to have a set position property -- which in my case they really don't have.

What would then be a proper way to markup a page list this?


It’s perfectly fine to have multiple ItemList items on a page, and it’s perfectly fine not to provide position.

With "not allowed", you are probably referring to Google’s guidelines for their Carousels search result feature. Google can’t decide what is/isn’t correct use of Schema.org, only Schema.org can do that. There is only one case where you should follow Google’s guidelines: If you want to get that specific Google search result feature for your page.

If you don’t want to get the feature, or if you can’t get the feature (it’s not possible for every page), you can ignore these guidelines.

From the perspective of Schema.org, your idea is correct:

  • Use CollectionPage.

  • Use an ItemList for each subsection’s list.

    (You could use one parent ItemList that has each subsection ItemList as entry, but I don’t think it’s useful to do this as long as each subsection ItemList is meaningful on its own.)

  • The itemListElement property can have the entry (e.g., each MusicRecording) as direct value.

    (You only need to use ListItem if the order of the entries is relevant, in which case you should provide the position property.)

| improve this answer | |

What would then be a proper way to markup a page list this?

It would be helpful if you provided your current markup to answer this. However, as unor pointed out it's acceptable to have multiple ItemList on a page despite the error Google's testing tool threw. To validate this claim run your markup through Yandex's structured data testing tool with multiple ItemList on a page and observe there is, in fact, no error thrown when multiple lists are present.

Regarding position param, it's relevant when the itemListOrder prop is not set to Unordered.

A snippet of your ideal mark-up might look something like:

<h2>Bob Songs</h2>
<ul itemscope itemtype="https://schema.org/ItemList">
  <meta itemprop="itemListOrder" content="Unordered">
  <meta itemprop="name" content="Bob Songs">
  <li itemprop="itemListElement" itemscope itemtype="https://schema.org/MusicComposition">
    <meta itemprop="name" content="Natural Mystic">
    <a href="#" itemprop="url">07. Natural Mystic</a>
  <li itemprop="itemListElement" itemscope itemtype="https://schema.org/MusicComposition">
    <meta itemprop="name" content="Sun Is Shining">
    <a href="#" itemprop="url">02. Sun is Shining</a>

Then repeat that list for the next artist for as many artists as you need. And if you want more detailed structure Schema.org has a good music example to learn from.

| improve this answer | |

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.