← Field Notes · June 11, 2026

ItemList schema for /vs/ pages (the comparison signal we missed)

The /vs/ comparison pages we shipped two weeks ago got the FAQPage schema right. They missed ItemList schema. ItemList is the specific schema type that makes comparison structures machine-readable for AI engines. Most /vs/ pages across the web ship without it. This is the fix.

What ItemList does

ItemList is a schema.org type that describes a list of items in a defined order. For comparison pages, the items are the things being compared (typically 2 to 5 tools, services, or options). The order can communicate ranking, preference, or just structural enumeration.

For AI engines, ItemList serves as the structural signal that says “this page contains a list of N items, in this order, with these names.” Engines can then quote your comparison cleanly when a user asks “what are the top X for Y.” Without ItemList, the engine has to infer the comparison structure from the page’s visible content, which is less reliable.

The basic ItemList block

A working example for a three-way comparison page:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "@id": "https://yourdomain.com/vs/three-way/#itemlist",
  "name": "Comparison: Tool A vs Tool B vs Tool C",
  "numberOfItems": 3,
  "itemListOrder": "https://schema.org/ItemListOrderAscending",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Tool A",
      "url": "https://yourdomain.com/vs/tool-a/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Tool B",
      "url": "https://yourdomain.com/vs/tool-b/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Tool C",
      "url": "https://yourdomain.com/vs/tool-c/"
    }
  ]
}
</script>

The itemListOrder field signals whether the order is meaningful. Use ItemListOrderAscending for ranked lists where position 1 is “best” or “preferred.” Use ItemListUnordered for comparisons where order does not imply ranking.

The richer version for comparison-specific pages

For pages that compare named brands or products specifically, embed the comparison items as Product or Service entries inside the ItemList:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "ItemList",
  "@id": "https://yourdomain.com/vs/comparison/#itemlist",
  "name": "Best AI Search Tools Compared",
  "numberOfItems": 3,
  "itemListOrder": "https://schema.org/ItemListUnordered",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "item": {
        "@type": "Service",
        "name": "Tool A",
        "url": "https://example.com/tool-a",
        "description": "Self-serve AI search tracking platform with multi-engine coverage.",
        "offers": {
          "@type": "Offer",
          "price": "29",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "29",
            "priceCurrency": "USD",
            "unitText": "MONTH"
          }
        }
      }
    },
    {
      "@type": "ListItem",
      "position": 2,
      "item": {
        "@type": "Service",
        "name": "Tool B",
        "url": "https://example.com/tool-b",
        "description": "Enterprise AI search visibility platform with proprietary benchmarks.",
        "offers": {
          "@type": "Offer",
          "price": "499",
          "priceCurrency": "USD",
          "priceSpecification": {
            "@type": "UnitPriceSpecification",
            "price": "499",
            "priceCurrency": "USD",
            "unitText": "MONTH"
          }
        }
      }
    }
  ]
}
</script>

The richer version gives AI engines structured pricing and description data for each compared item. The engine can extract “Tool A is $29 a month and offers X” cleanly rather than scraping the prose.

Where to put it on the page

ItemList schema for a comparison page should be one of three schema blocks on the page (alongside Article and FAQPage). The three serve different purposes:

All three can coexist in a single @graph block, or as separate <script type="application/ld+json"> tags. The @graph version is cleaner because the schemas can cross-reference via @id.

What we missed on our own /vs/ pages

When we shipped /vs/otterly/, /vs/profound/, and /vs/seo-agency/ two weeks ago, we included:

We did not include ItemList schema. This was the gap. The comparison subjects (Otterly, Profound, traditional SEO agency) were named in visible content but not structured for extraction.

We are shipping ItemList schema on those three pages this week. The retroactive fix is mechanical: add the ItemList block to each page, validate, deploy. Expected citation lift within 14-30 days. We will publish a Field Note when the data is real.

Common mistakes

Three patterns to avoid when implementing ItemList for comparison pages.

Mistake one: listing yourself first without justification.

If your /vs/ page lists you and a competitor, putting yourself at position 1 with ItemListOrderAscending reads as biased. The competitor reading the page (or an AI engine consuming the comparison) recognizes the self-preference. The mitigation is either ItemListUnordered (no order implies no ranking) or self-listing with an honest qualifier in the visible content (which we cover in our vs/otterly/ and other comparison pages).

Mistake two: ItemList with only your own brand.

A “comparison” page with ItemList containing only your own brand is not a comparison. The structural signal is broken because there is nothing to compare against. Either include competitors honestly or do not ship ItemList.

Mistake three: Inconsistent name fields.

The brand name in your ItemList should exactly match the brand name on the linked URL. Inconsistencies (e.g., “OtterlyAI” vs “Otterly” vs “Otterly.ai”) fragment the entity recognition and weaken the citation signal.

Validate before shipping

The standard tools:

  1. Google’s Rich Results Test at https://search.google.com/test/rich-results.
  2. Schema.org Validator at https://validator.schema.org/.

ItemList does not produce a Google rich result (Google has restricted ItemList rich results to specific use cases). Validation is mainly for ensuring the schema is structurally clean for AI consumption.

The move for this week

If you have comparison or /vs/ pages, audit each for ItemList schema. If missing, ship it. The work is 15-30 minutes per page. The citation lift is plausibly meaningful, especially for AI engines that preferentially cite multi-option comparison content.

If you want us to ship ItemList across your comparison pages, book the fit call.

Start ranking easier →


Related reading:
NetPageTwo vs Otterly
NetPageTwo vs Profound
Your Organization schema is probably costing you AI citations
FAQPage schema is the single biggest AI citation move

Like this:

Discover more from Net Page Two

Subscribe now to keep reading and get access to the full archive.

Continue reading