auditmysitev2.0.2

Item List: missing required properties

seo.schema.schema_rule_missing_item_list

Outcome class
Automatic. An automated check that can report a confirmed violation.
Area
SEO, structured data

What the rule checks

Scope. Applies to JSON-LD nodes of type ItemList, CollectionPage in the audited document (top level, top-level arrays, @graph entries; full schema.org IRIs count as the short type). Microdata and RDFa are outside this method.

Expectation. ItemList fails when itemListElement is missing or an entry lacks position or url; CollectionPage has no required properties. Missing recommended properties: needs_review (Google's Rich Results Test reports missing recommended properties as non-critical issues (eligible, but a human should decide whether the data exists)). All present passes. Nested property values (an author Person, a provider Organization) are not nodes of their own and are not assessed; a page without a node of the type is not applicable. A page whose structured-data collection fails is not run for every feature, never clean.

Source. https://developers.google.com/search/docs/appearance/structured-data/carousel (ItemList: itemListElement with position and url; recommended: name, numberOfItems; CollectionPage: no required properties)

Detection: detect_structured_data; needs dom.

Failing example

The check reports a violation here. Corpus case schema_rules_incomplete. The page may contain further findings for other rules.

schema_rules_incomplete.htmlHTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Schema rules corpus — incomplete JSON-LD missing required properties</title>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Product","name":"Bare product"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Only"}]}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"LocalBusiness"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"FAQPage"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Event"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"Recipe"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"VideoObject"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"JobPosting"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"SoftwareApplication"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"ProfilePage"}
</script>

<script type="application/ld+json">
{"@context":"https://schema.org","@type":"ItemList","itemListElement":[{"@type":"ListItem","position":1}]}
</script>

</head>
<body>
  <h1>Schema rules corpus fixture (incomplete/missing required JSON-LD)</h1>
</body>
</html>

Passing example

The check passes here and reports nothing. Corpus case schema_rules_subtypes. The page may contain further findings for other rules.

schema_rules_subtypes.htmlHTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Article and application subtypes</title>
  <script type="application/ld+json">
  {"@context": "https://schema.org", "@type": "NewsArticle", "headline": "News", "author": {"@type": "Person", "name": "Ada"}, "datePublished": "2026-01-01", "dateModified": "2026-01-02", "image": "https://example.com/n.jpg"}
  </script>
  <script type="application/ld+json">
  {"@context": "https://schema.org", "@type": "WebApplication", "name": "Web app", "offers": {"@type": "Offer", "price": 0}, "aggregateRating": {"@type": "AggregateRating", "ratingValue": 4.2, "ratingCount": 40}, "applicationCategory": "BusinessApplication", "operatingSystem": "Any"}
  </script>
  <script type="application/ld+json">
  {"@context": "https://schema.org", "@type": "CollectionPage", "name": "Guides", "url": "https://example.com/guides", "mainEntity": {"@type": "ItemList", "itemListElement": []}}
  </script>
</head>
<body>
  <header><p>Example</p></header>
  <main>
    <h1>Article and application subtypes</h1>
    <p>Structured data corpus page.</p>
  </main>
  <footer><p>Footer</p></footer>
</body>
</html>

This page is generated from the rule catalogue and the rule contracts; see therule overview for how the outcome classes are derived.