Multiple Schema.org ItemLists
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 subsectionItemList
as entry, but I don’t think it’s useful to do this as long as each subsectionItemList
is meaningful on its own.)The
itemListElement
property can have the entry (e.g., eachMusicRecording
) as direct value.(You only need to use
ListItem
if the order of the entries is relevant, in which case you should provide theposition
property.)
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>
<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>
</li>
</ul>
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.