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 @type | Expected page type |
|---|---|
Article, BlogPosting, NewsArticle, TechArticle | article |
Product | product |
ContactPage | contact |
AboutPage | about |
CollectionPage | category |
ItemList | listing |
FAQPage | docs |
It emits one check:
page-type-match, skipped with the messagePage type classification skippedwhen the analysis was not available for the audit, orNo classification returned for this pagewhen the service ran but produced nothing for this URL.page-type-match, passing with the messageClassified as "listing" (no page-type structured data to compare)when the page declares none of the ten types.page-type-match, passing with the messagePage type "product" matches declared Product schemawhen the classification agrees.page-type-match, warning with the messagePage reads as "listing" but declares Product structured datawhen 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 ID | ai/page-type-match |
| Category | Agent Experience |
| Scope | Per-page |
| Severity | warning |
| Weight | 3/10 |
| Default | Enabled |
Enable / disable
Disable this rule
[rules]
disable = ["ai/page-type-match"]Disable all AI rules
[rules]
disable = ["ai/*"]Related rules
- ai/llm-parsability: the other finding from the same analysis.
- schema/coverage-outlier: pages missing the markup the rest of their page type carries.
- schema/json-ld-valid: whether the JSON-LD parses and passes validation at all.
- crawl/schema-noindex-conflict: rich-result markup on a page that is blocked from indexing.
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
- Introduction to structured data markup, Google Search Central
- CollectionPage, schema.org
- ItemList, schema.org
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.