CrawlCheck

Guides · 2026-08-28 · By · 1 view

Entity SEO: what a machine or AI agent has to resolve before it can cite or act on you

Being read is not being identified. If a system cannot tell you apart from a similar business two towns over, it will either name the wrong one or name nobody, and both look identical from your side.

Share of all scans carrying each finding named aboveENTITY_NO_COORDINATES5.4%ENTITY_COLLISION3.3%Share of all scans carrying eachfinding named aboveENTITY_NO_COORDINATES5.4%ENTITY_COLLISION3.3%
Read live from the same counters the dataset page uses, at the moment this page was served. Bars are scaled to the largest value shown, not to 100%.

Entity SEO is the work of making a machine able to answer which one is this about you, unambiguously, and then answer specific questions about that thing. It sits underneath everything else: content that is read but not attached to a resolvable entity produces answers about a business the reader cannot name.

Three failures cause almost all of it, and none of them is reported by a validator, because in every case the markup is perfectly valid.

Failure 1: declaring existence instead of facts #

Web-wide detection counts for individual schema types tell a consistent story:

Schema typeSitesThe question it answers
Organization354,358who this is
PostalAddress108,730where to send someone
ContactPoint91,622how to reach them
Offer55,182what it costs
GeoCoordinates27,993where it is on a map
LocalBusiness26,108that it is a place of business
OpeningHoursSpecification22,972whether they are open now

These are independent detection counts, not a joint distribution — each row counts sites where that type was found anywhere, so nothing here says which sites overlap and no coverage rate should be inferred by dividing one row by another. What the magnitudes support is the ordering, and the ordering is the finding: declaring that you exist is common, declaring the specific fact somebody asked about is an order of magnitude rarer.

Are they open? and what does it cost? are among the most common questions anyone asks an assistant about a business, and they are among the least published machine-readable facts on the web.

Failure 2: identity claims that are not true #

The sameAs property asserts identity. It means this thing is the same as the thing at that URL, and structured data is read literally.

On one site measured, the homepage sameAs contained sixteen map URLs. Resolving them showed fourteen pointed at cities rather than at the business — read literally, the site claimed the company was Phoenix, and also Denver, and also twelve other places. Most were shortlinks, so the destination was hidden until each one was followed.

No validator reports this. Every URL was well formed and every value a legal string. It only appears if something resolves the targets and looks at what is on the other end. The fix is straightforward: sameAs is for profiles of the entity; service areas belong in areaServed.

A related pattern: using the entity graph as a place to put keywords. A knowsAbout array containing dozens of service-keyword strings inflates the topic edges around your entity without making it more identifiable — the same instinct, one layer down.

Failure 3: collisions and duplicates #

ENTITY_COLLISION fires on 3.3% of scans and ENTITY_NO_COORDINATES on 5.4%. The commonest form is a business whose name, category and rough location are shared with another business, with nothing in either site's data forcing them apart — no coordinates, no distinct address, no unique identifier.

Then there is the self-inflicted version. Two nodes carrying the same @id are not two businesses; they are one node parsed twice, and whichever parse lands second overwrites the first. Sites do this by including a global Organization block in a template and then declaring a page-level one with the same identifier.

The redundancy rule #

Readers vary more than people assume. Some pipelines discard structured data entirely and form a view of your entity from prose alone — and get it substantially right. Others read only the schema.

So: state every important fact twice, in your structured data and in visible prose. A fact that exists only in JSON-LD is a fact with a delivery condition attached. A fact that exists only in prose is invisible to anything that reads the graph. Neither is a place to be exclusively.

Failure 4: declaring places you are not #

The multi-location version of the identity problem deserves naming, because it is common in service businesses and it compounds.

One site emitted fifteen distinct LocalBusiness nodes, one per city it served. Fourteen had no street address, fourteen had no postal code, and all fifteen carried the same phone number. One page carried a literal +1-XXX-XXX-XXXX placeholder in the rendered HTML. Against that, exactly one real business listing existed.

Declaring an entity in a city you have no presence in does not create presence. It creates fourteen weakly specified entities that collide with each other and with the real one, all sharing a phone number, none with coordinates. The honest structure is one entity with a real address, and areaServed for everywhere you work.

How to check your own #

Extract your JSON-LD and read it as a set of claims rather than as markup. For every sameAs URL, follow it and confirm what is on the other end is a profile of you. Confirm every @id in the graph is unique. Confirm the entity has coordinates, an address specific enough to disambiguate, and the facts people actually ask about — hours, price, service area, a contact point an agent can act on.

Then confirm all of it survives delivery. Schema in a page that is served from a stale cache, or refused to a given crawler, is not published to that reader at all.

Agents resolve the same entity before they act

An answer engine resolves your entity to cite you. An agent resolves it to act: the phone it dials, the address it routes to and the service area it checks against come from the same declarations. A contradiction that costs a citation in an answer becomes a wrong call or a wrong booking when an agent is the one acting.

DeclarationWhat an answer engine does with itWhat an agent does with it
Name and @idDecides which business it is citingDecides which business it is dealing with
TelephoneQuotes itCalls it
Address and geoPlaces you on a mapRoutes to you, or rules you out
areaServedMatches you to a local queryDecides whether to book you for a job

Findings behind this #

Every figure above comes from a measurement written up in full, with the date, the method and the raw numbers.

Every figure above came out of CrawlCheck.

Point it at your own domain and see the same measurements, free.

Scan a domain — free

The main product

Found this on your own site? We fix it for $749.

Scan free to see where you stand. The fix is one site, every finding implemented and re-measured, with a sealed before and after.

Questions this post answers

What is entity SEO?

The work of making a machine able to identify unambiguously which business you are, and then answer specific questions about it. It sits underneath content work, because text that is read but not attached to a resolvable entity produces answers about a business the reader cannot name.

What does sameAs actually do?

It asserts identity: this entity is the same as the thing at that URL. It is for profiles of the entity, such as social accounts or a business listing. Service areas belong in areaServed. One site was found with fourteen sameAs URLs pointing at cities rather than at the business, which read literally claims the company is those cities.

Why does no validator catch these errors?

Because the markup is valid. Every URL is well formed and every value is a legal string. These failures only appear when something resolves the targets, checks whether identifiers are unique, and asks whether the declared facts are the ones people ask about.

Why does entity SEO matter for AI agents?

Because an agent acts on the entity it resolves. The phone it calls, the address it routes to and the service area it checks all come from your declarations, so a contradiction that costs a citation in an answer becomes a wrong action when an agent is the one acting.

Related findings

How anything measured in this article was measured15client identitiesone second, one address5machine filesapex and www114named agentsresolved from robots.txt24sections scoredreach, read, quoteHow anything measured here was measured15 client identities5 machine files114 named agents24 sections scoredone second, one addressapex and wwwresolved from robots.txtreach, read, quote
No account, nothing installed, and the same sequence on every domain — which is what makes one scan comparable to another. Run it on your own site.

Comments

Comments are read before they appear. Nothing is published automatically, and no account is needed.

Writing about this? Facts, live figures and marks — every number on that page is dated and traceable to a scan.

All guides · The dataset · How the dataset works