CrawlCheck

Guides · 2026-09-30 · By · 0 views

NAP consistency audit: phone, address and coordinates

The checks a scanner can run on name, address and phone: what the page declares, what directories reached by the phone number say back, and the five findings that follow.

A local business is resolved by name, address and phone, and the phone number does most of the work. CrawlCheck reads the page's business node and reports ENTITY_NO_COORDINATES when an address has no point, GEO_COUNTRY_MISMATCH when the point is outside the address's country, and ENTITY_COLLISION when two nodes share a phone, @id or coordinates. It then searches reachable directories by the phone number and reports NAP_UNDECLARED_LISTING for listings the site never links in sameAs and NAP_NAME_DRIFT for listings printing a different name.

Share of all scans carrying each finding named aboveNAP_UNDECLARED_LISTING5.4%ENTITY_NO_COORDINATES4.1%ENTITY_COLLISION3.8%NAP_NAME_DRIFT0.5%GEO_COUNTRY_MISMATCH0.1%Share of all scans carrying eachfinding named aboveNAP_UNDECLARED_LISTING5.4%ENTITY_NO_COORDINATES4.1%ENTITY_COLLISION3.8%NAP_NAME_DRIFT0.5%GEO_COUNTRY_MISMATCH0.1%
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%.

A local business is identified, by every system that matters, through three fields: name, address, phone. The phone number does most of the work, because it is the one field that is written the same way everywhere and is rarely shared. A retrieval system that finds your phone number on a directory page has found you, whatever name that page prints. This guide is the set of checks the scanner runs on those three fields, from what the page declares to what the directories reachable by that phone number say back, and what each finding means for how an engine will describe the business.

What the page declares #

The first reading is the page's own JSON-LD: the LocalBusiness or Organization node with its name, address, telephone and geo. The scanner also reads the visible page for a phone number and a postal address, because a business whose schema and whose footer disagree has already told a consumer two things. Two findings come from this reading alone. ENTITY_NO_COORDINATES (4.1% of scans) fires when a business node declares a street address and no latitude or longitude: a resolver must then geocode the text, which is where confusion between similarly named or nearby businesses enters. GEO_COUNTRY_MISMATCH (0.1% of scans) fires when the declared coordinates are not in the country the address names, which is how a Denver newsroom came to publish a point in northern China: a longitude with its minus sign dropped is still a legal longitude, and no validator caught it until one checked the country. That case is in its own post.

What the directories say back #

The second reading leaves the site. The scanner takes the phone number the page declares and searches the business directories it can reach for that number. Each source returns one of a few states: a listing found, no match, or a refusal, which happens when a directory refuses datacenter addresses outright; Data Axle, the aggregator that feeds Google's own business data, answers a scanner with 403 and answers a browser with the listing, which is why the report says so rather than guessing. That case is in the post on the directory that feeds Google, and the claim procedure is in the Data Axle guide.

From the listings that were found, two more findings follow. NAP_UNDECLARED_LISTING (5.4% of scans) fires when a directory carries the phone number and the site never links that listing in sameAs. A listing the site does not declare is one an engine corroborates without you: whatever it prints becomes your name, hours and category in the answer. NAP_NAME_DRIFT (0.5% of scans) fires when a listing reached by the phone number prints a name that does not match the one the site declares. Two names on one phone number are two entities to a retrieval system, and the older name usually has more corroboration.

CheckReadsFindingConsequence
address without a pointJSON-LD address and geoENTITY_NO_COORDINATESthe resolver geocodes text and may pick a neighbour
point outside the address's countrygeo against the addressGEO_COUNTRY_MISMATCHtwo facts in one record disagree about where you are
listing found, not declareddirectories by phone, then sameAsNAP_UNDECLARED_LISTINGan engine corroborates a record you do not control
listing prints another namedirectory name against declared nameNAP_NAME_DRIFTtwo entities on one phone number
two business nodes share phone, @id or pointJSON-LDENTITY_COLLISIONthe resolver cannot pick which record is you

What the phone search cannot conclude #

A directory that answers no match is not evidence that the business is unlisted there; it is evidence that the number, in the form searched, did not match, which a formatting difference can cause. A directory that refuses the scanner's address is not evidence of anything about the listing, and the report says refused rather than absent for that reason. And a listing found by phone number is not proof of ownership: two businesses that share a number, a franchise and its parent, or a business and its former owner, produce a match that the owner has to read. The report therefore shows the per-source state and the names found and leaves the ownership judgement to the person reading it, because that is a fact only the owner has.

The collision case #

The finding that scores is ENTITY_COLLISION (3.8% of scans): two LocalBusiness or Organization nodes on one page sharing a phone number, an @id or a coordinate pair. It reads only what the page declares. It does not assert the business is duplicated or wrongly located; it says a system resolving which business this page is about has more than one candidate for one identity and may pick either or neither. The usual cause is a theme that emits its own business node beside the one a plugin emits. The fix is one node, referenced from the others by @id, which the identifier guide covers.

What a consumer does with all of this #

An answer engine asked about a plumber in a given town does not read your homepage and stop. It resolves an entity: a name, a location and a phone that agree across the sources it trusts. Every finding above is a place where two of those sources disagree, and the engine resolves the disagreement by majority, by age or by trust in the source, none of which favours the page that was edited last week. Declaring coordinates removes one guess. Declaring listings in sameAs tells the engine which records are yours. Fixing name drift makes the majority agree with you. The entity SEO guide covers the reciprocity side, where the targets of those sameAs links are checked for linking back.

How to run it by hand #

Search each major directory for your phone number, in the exact format the site prints it and again digits-only. Write down the name each result prints. Compare that list to the sameAs array in your JSON-LD; every listing you own should be in it, and every name should match. Then read your own geo values against a map, and confirm the sign on the longitude. A scan on crawlcheck.io does the phone search across the directories it can reach and shows the per-source state, including the ones that refused; the share of scans carrying each finding is on the dataset page.

Every figure above came out of this scanner.

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

Why does the scanner search directories by phone number rather than name?

The phone number is the one field written the same way everywhere and rarely shared, so a directory page carrying it identifies the business regardless of what name that page prints. A name search finds namesakes; a phone search finds you.

What is an undeclared listing?

A directory listing that carries your phone number and is not linked from your site's sameAs. An engine can corroborate it without you, so whatever it prints becomes your name, hours and category in an answer.

What does NAP name drift mean?

A listing reached by your phone number prints a business name that does not match the one your site declares. To a retrieval system that is two entities on one number, and the older name usually carries more corroboration.

Is a missing latitude and longitude really a problem?

A business node with a street address and no point forces every resolver to geocode the text, and geocoding is where confusion between nearby or similarly named businesses is introduced. Declaring the point removes the guess.

What does ENTITY_COLLISION assert?

Only what the page declares: two business nodes sharing a phone number, an @id or a coordinate pair. It does not claim the business is duplicated or wrongly located; it says a resolver has more than one candidate for one identity.

Why did a directory refuse the scanner?

Some directories refuse datacenter addresses outright and answer a browser normally. The report records that source as refused rather than as no listing, because those are different facts.

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