Rich result schema on a noindexed page: wasted markup
Structured data on a page search engines cannot index will never produce a rich result. squirrel finds pages carrying both.
What the conflict is
Rich results are the enhanced listings search engines build from structured data: review stars, recipe times, event dates, product prices. They appear in search results, which means the page has to be in the index for them to exist at all.
Markup on a page that is blocked from indexing produces nothing. It is not harmful, but it is effort spent on a page that will never show it, and it usually means one of the two decisions was made without knowing about the other: a template that emits schema for every post type, applied to a post type someone later set to noindex.
What squirrel checks
The rule is site-wide. For each crawled page it extracts the rich-result types from the page’s structured data, skips pages with none, then runs the shared indexability test over the head, headers, URL and robots.txt. It emits a single check named schema-noindex:
- Skipped when there are no pages. Message:
No pages to check. - Fail when at least one page has rich-result schema and is not indexable. Message:
3 page(s) have rich schema but are blocked from indexing. The value lists up to five as the path, the schema types found, and the reasons it is blocked, such asmeta:noindexorrobots.txt:disallowed. - Pass otherwise. Message:
No schema+noindex conflicts.
Severity error, weight 8. The types that count come from a fixed list: Article, NewsArticle, BlogPosting, Product, Review, Recipe, Event, FAQPage, HowTo, LocalBusiness, Organization, Person, VideoObject, BreadcrumbList, WebSite and SearchAction. A plain WebPage node does not trigger the rule. The list is squirrel’s own and is not tied to what Google currently supports: HowTo is on it although its Google rich result was retired.
How to fix it
<meta name="robots" content="index, follow" />Decide which of the two is wrong. If the page should rank with a rich result, remove the directive the report names. If it should stay out of the index, remove the structured data from that template so the markup stops being generated.
| Rule ID | crawl/schema-noindex-conflict |
| Category | Crawlability |
| Scope | Site-wide |
| Severity | error |
| Weight | 8/10 |
Enable / disable
Disable this rule
[rules]
disable = ["crawl/schema-noindex-conflict"]Disable all Crawlability rules
[rules]
disable = ["crawl/*"]Enable only this rule
[rules]
enable = ["crawl/schema-noindex-conflict"]enable replaces the default ["*"], so this is the only rule selected. Leave disable out: a rule that matches any disable pattern is skipped even when enable names it. Only an enabled setting under a rule’s own [rule_options] table overrides both lists.
Related rules
- crawl/indexability: the per-page verdict and which directive produced it.
- crawl/all-noindex-pages: every blocked page, with the same reason strings.
- schema/json-ld-valid: whether the markup itself parses and validates.
- schema/article: one of the rich-result types this rule counts.
Crawlability findings ship in every audit next to the SEO, performance and agent experience rules. See The Screaming Frog alternative for agents for how an agent works through a report.
References
- Search gallery of rich results, Google Search Central
- Block search indexing with noindex, Google Search Central
Check your site
Run squirrel audit https://example.com and open the Crawlability section of the report. Each page is listed with its schema types and the reason it is blocked. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.