Skip to content
Browse all guides

Issue #151 · standard

List pages, category pages, and collection pages are missing ItemList schema.

What is this issue?

List pages, category pages, and collection pages are missing ItemList schema. Without it, Google cannot represent the page's items as a rich result list in search, reducing eligibility for carousel-style search appearances and list-based featured snippets.

Without ItemList schema:

  • Your list/collection pages won't be eligible for carousel-style rich results
  • Google can't display your page as a list-style rich result
  • Listicle articles won't appear in carousel format
  • Category/collection pages miss opportunities for enhanced search appearance
  • AI search engines can't properly understand list-based content

A proper ItemList schema should include: @type (ItemList), name, itemListElement with ListItem items, each having position, name, and url.

Why does it matter?

ItemList schema is important for list-based content visibility:

  • Carousel rich results: Enables pages to appear as carousels in search results
  • List-style snippets: Google can display your page as a list-style rich result
  • Listicle articles: "10 best SEO tools" type articles can appear in carousel format
  • Category pages: Product category or blog topic pages can get enhanced search appearance
  • AI search readiness: AI engines use ItemList schema to understand list-based content
  • User engagement: Carousel and list-style results have higher click-through rates

Resolving this issue improves your SEO health score by ensuring list-based content is properly structured for enhanced search appearance.

How to fix it

  1. Identify list/collection pages: Look for pages with:

    • Repeating list structure (<ul>/<ol> with 3+ items)
    • Card grids or collection layouts
    • Category-page layouts
    • Listicle articles ("10 best...", "Top 5...")
  2. Add ItemList JSON-LD structured data to the page's <head> or before </body>:

    {
      "@context": "https://schema.org",
      "@type": "ItemList",
      "name": "Top 5 SEO Tools",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Ahrefs",
          "url": "https://www.example.com/tools/ahrefs"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "SEMrush",
          "url": "https://www.example.com/tools/semrush"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Screaming Frog",
          "url": "https://www.example.com/tools/screaming-frog"
        }
      ]
    }
    
  3. Ensure each ListItem has required properties:

    • position: Sequential number starting from 1
    • name: Item name
    • url: URL pointing to the individual item page
  4. Use for appropriate content types:

    • Listicle articles ("10 best SEO tools")
    • Category/collection pages (product category, blog topic pages)
    • How-to step summaries (when used alongside HowTo schema)
    • Recipe collection pages
  5. Validate with Google's Rich Results Test

Examples

Example 1: Missing ItemList Schema on Listicle Page

Problematic state:

<!-- Listicle page without ItemList schema -->
<html>
  <head>
    <title>Top 5 SEO Tools for 2024</title>
  </head>
  <body>
    <h1>Top 5 SEO Tools for 2024</h1>
    <ol>
      <li><a href="/tools/ahrefs">Ahrefs</a></li>
      <li><a href="/tools/semrush">SEMrush</a></li>
      <li><a href="/tools/screaming-frog">Screaming Frog</a></li>
    </ol>
  </body>
</html>

Corrected state:

<!-- Listicle page with ItemList schema -->
<html>
  <head>
    <title>Top 5 SEO Tools for 2024</title>
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "ItemList",
        "name": "Top 5 SEO Tools for 2024",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "Ahrefs",
            "url": "https://www.example.com/tools/ahrefs"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "SEMrush",
            "url": "https://www.example.com/tools/semrush"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "Screaming Frog",
            "url": "https://www.example.com/tools/screaming-frog"
          }
        ]
      }
    </script>
  </head>
  <body>
    <h1>Top 5 SEO Tools for 2024</h1>
    <ol>
      <li><a href="/tools/ahrefs">Ahrefs</a></li>
      <li><a href="/tools/semrush">SEMrush</a></li>
      <li><a href="/tools/screaming-frog">Screaming Frog</a></li>
    </ol>
  </body>
</html>

Example 2: ItemList for Category Page

Corrected state:

{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "SEO Blog Posts",
  "description": "Latest articles about SEO best practices",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "How to Optimize Title Tags",
      "url": "https://www.example.com/blog/title-tags"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Technical SEO Checklist",
      "url": "https://www.example.com/blog/technical-seo"
    }
  ]
}

Example 3: Incomplete ItemList Schema

Problematic state:

{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "Best SEO Tools"
}

Missing required itemListElement property

Corrected state:

{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "name": "Best SEO Tools",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Ahrefs",
      "url": "https://www.example.com/tools/ahrefs"
    }
  ]
}

How PixyScan detects this

PixyScan follows these logical steps to detect missing ItemList schema:

  1. Detect list pages: The crawler identifies pages with:

    • Repeating list structure (<ul>/<ol> with 3+ items)
    • Card grids or collection layouts
    • Category-page layouts
    • URL patterns indicating list pages (/top-, /best-, /list-)
  2. Extract structured data: The crawler looks for JSON-LD, Microdata, or RDFa blocks on the page

  3. Check for ItemList schema: The crawler verifies if any schema block has:

    • @type set to ItemList
    • itemListElement property containing an array of ListItem objects
  4. Validate schema completeness: If ItemList schema is found, the crawler checks for:

    • At least one ListItem in the itemListElement array
    • Each ListItem has position, name, and url properties
  5. Trigger conditions: The issue is flagged when:

    • Page has list structure but no ItemList schema
    • ItemList exists but itemListElement array is empty
    • Any ListItem is missing position, name, or url properties

References