An @id that nothing points at
Giving an entity an identifier is the expensive part. One that nothing references and that appears on a single page is doing no more than an inline block.
What an orphan is
An @id exists so other nodes can point at it. An entity that has one, that nothing points at, and that appears on exactly one page has paid for a feature it does not use.
Sometimes that is a leftover: a node that used to be referenced before a template changed. Sometimes it is a missed connection, where an about or mainEntity link would tell a search engine what the page is actually for.
This is the lowest-severity rule in the set. It is a tidiness finding, not a defect, and it is reported at info for that reason.
What squirrel checks
The rule runs once per crawl, reads the entity map rather than the pages, and emits a single check named entity-orphan.
- Skipped with the message
No entity map was built for this auditand the reasonentity-map-unavailablewhen the run produced no map. This is not the same as a site with no structured data, and the rule refuses to conflate them: passing here would assert it had checked something it never looked at. - Reports at info with the message
This site declares no JSON-LD entities on any crawled pagewhen the map exists and is empty. - Passes with the message
Every entity with an @id is referenced or spans more than one page. - Reports at info with the message
N entities have an @id that nothing references, on one page each, plus(+N more entities)when more matched than are listed.
Entities that describe or ARE their page are never reported. That is an explicit list rather than a judgement about each type: WebPage and the page subtypes, BreadcrumbList, FAQPage, Question, Answer, the article types, and the types a page is usually built around, such as Product, Event, Recipe, Course and JobPosting. Nothing else on a site should point at a page’s own breadcrumb, and a product detail page IS the product rather than something another node should reference.
Without those exclusions this rule reports the site’s page count rather than a finding. On a real 40-page crawl of a large hosting site, 73 of the 79 entities it would otherwise have listed were breadcrumbs and articles.
Findings are capped at 10 items, and the count in the message is always the true total rather than the capped length. Run squirrel entities --problem single-page for the full list.
How to fix it
Two options, and neither is worse than the current state.
Reference it, if something on the site is about it. An about or mainEntity link from the page to the entity is usually the missing piece:
{ "@type": "WebPage", "about": { "@id": "https://example.com/#product-line" } }Or drop the @id and inline the entity where it is used. A node used once does not need an identifier, and removing it makes the markup honest about that.
See fixing structured data identity.
| Rule ID | schema/entity-orphan |
| Category | Structured Data |
| Scope | Site-wide |
| Severity | info |
| Weight | 1/10 |
Enable / disable
Disable this rule
[rules]
disable = ["schema/entity-orphan"]Disable all Structured Data rules
[rules]
disable = ["schema/*"]Enable only this rule
[rules]
enable = ["schema/entity-orphan"]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.
For one run without editing the config: squirrel audit https://example.com --rule-include schema/entity-orphan.
Related rules
- schema/entity-dangling: the mirror: a reference with nothing declared behind it.
- schema/entity-website-missing: page entities that do not link to the WebSite.
- schema/entity-identity: the opposite habit: no
@idwhere one is needed. - schema/json-ld-valid: the per-page check that the JSON-LD parses at all.
Entity findings are site-wide and ship in every audit, next to the per-page structured data rules. See Fix SEO issues with AI for how an agent works through a report.
References
Check your site
Run squirrel audit https://example.com, then squirrel entities to see the graph the finding came from. Signed-out local audits need no account and cost nothing. Signed-in audits spend credits.