squirrelscan
GitHub

Page type mismatch: when schema disagrees with the page

A page that reads as a listing but declares Product schema. squirrel compares the classified type against the declared JSON-LD.

What a page type mismatch is

Structured data is a claim about what a page is. A Product node says this page is about one product. A ContactPage node says this page is how to get in touch. When the content says something different, a consumer has two answers and no way to choose.

The usual causes are a template applied to the wrong route and a page whose purpose drifted after the markup was written, such as a product page that became a category listing. The fix is either the markup or the page, depending on which one is telling the truth.

What squirrel checks

The rule runs on every crawled page. Classification is a cloud service, so the check needs a logged-in audit. It maps ten JSON-LD types to the classifications the service produces:

Declared @typeExpected page type
Article, BlogPosting, NewsArticle, TechArticlearticle
Productproduct
ContactPagecontact
AboutPageabout
CollectionPagecategory
ItemListlisting
FAQPagedocs

It emits one check:

  • page-type-match, skipped with the message Page type classification skipped when the analysis was not available for the audit, or No classification returned for this page when the service ran but produced nothing for this URL.
  • page-type-match, passing with the message Classified as "listing" (no page-type structured data to compare) when the page declares none of the ten types.
  • page-type-match, passing with the message Page type "product" matches declared Product schema when the classification agrees.
  • page-type-match, warning with the message Page reads as "listing" but declares Product structured data when it disagrees.

The comparison uses the first declared type that appears in the table, in the order the page’s parsed schema types come back. A disagreement is reported only when the classifier’s confidence is at least 0.7; below that the check passes, because a low-confidence reading is not evidence against the markup.

How to fix it

Decide which one is wrong. If the page really is a listing, declare it as one:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CollectionPage",
  "name": "Pour-over equipment"
}
</script>

If the markup is right and the page has drifted, the fix is in the content rather than the JSON-LD. A product page that mostly lists other products reads as a listing because that is what it is.

The common false positive is a hybrid page, such as a product page that carries a long buying guide underneath. The classifier reads the dominant purpose, and the answer depends on which half is larger.

Rule IDai/page-type-match
CategoryAgent Experience
ScopePer-page
Severitywarning
Weight3/10
DefaultEnabled

Enable / disable

Disable this rule

[rules]
disable = ["ai/page-type-match"]

Disable all AI rules

[rules]
disable = ["ai/*"]

Agent experience findings ship in every audit next to the SEO, performance and security rules. See Generative engine optimization for how an agent works through a report.

References

Check your site

Run squirrel audit https://example.com and open the Agent Experience section of the report. Each mismatch names the classified type and the declared one. Cloud audits run the analysis.

Type to search…

↑↓ navigate openesc close