Related guides: How to get ChatGPT to recommend your business, AI visibility software in Chennai.
15 of the hundred checks are in this group, 1 of them critical. Each is listed with its weight in the score and whether it affects AI search directly, and for each: why it matters, and what to do. The hub page has the other groups and how the score is made.
- Local entity
- Address completeness
- PIN code & state
- Telephone format
- Address backed by the page
- Opening hours
- Coordinates & map
- Branch markup
- City pages
- Business Profile
- Listing agrees with the site
- Reviews
- Directory profiles
- PIN code in the directory
- Coordinates match the address
Local entity
highAI search needs this
Why it matters. A business with a place is a different kind of entity from a business without one, and the difference is machine-readable or it is nothing. LocalBusiness — or a subtype: Dentist, Restaurant, Store — carrying a PostalAddress is what lets an assistant answer "near me" with you in it, and what lets it decide that the shop named on your site, in a directory and in a review is one shop. Prose saying where you are does not do this; a model has to infer it, and inference is where you get merged with somebody else or dropped.
What to do. Add a LocalBusiness node — or the closest subtype to what you actually do — with name, a full PostalAddress, telephone and url. If you trade from several places, emit one node per place with its own address, not one node for the brand.
When it is not scored. No local entity in the markup. Only relevant if this business has a physical location customers visit or call.
Address completeness
highAI search needs this
Why it matters. An address missing a part does not identify a place, it identifies a region. Locality and PIN are the two that do the work: without them you are somewhere in a state, which is not an answer to "near me" and not enough to match you against the same address written elsewhere. A half-filled address also looks complete to every checker that only asks whether an address tag exists.
What to do. Fill streetAddress, addressLocality, addressRegion, postalCode and addressCountry. If the address is currently one free-text string, split it — an unstructured address is a string a parser has to guess at, and it guesses wrong on Indian addresses more than most because the line order varies.
PIN code & state
mediumBarely affects AI search
Why it matters. A malformed PIN or a state that is not a state is a typo nobody sees, because the page renders it exactly as written and no browser complains. It matters because these two fields are how your address is matched against the same address recorded elsewhere — a directory listing, a maps entry, an old citation. A PIN that is five digits matches nothing, so the listing that would have reinforced your entity instead fragments it.
What to do. PIN codes are six digits and never start with 0. Write the state in addressRegion as its current official name — Odisha rather than Orissa, Puducherry rather than Pondicherry — because that is the spelling everything else will be using.
Telephone format
mediumBarely affects AI search
Why it matters. Ten digits with no country code is unambiguous to a person in Pune and ambiguous to everything else. E.164 — "+91" then the number — is what makes a telephone a comparable value rather than a string, which is what a system deciding whether two mentions of a business are the same business is doing with it. It is also what makes the number dialable from a phone that is not already on an Indian network.
What to do. Write telephone as "+91" followed by the ten-digit number: "+919876543210". Keep the digits identical in the visible page text.
Address backed by the page
highAI search needs this
Why it matters. A telephone that exists only in JSON-LD is a number nobody has ever rung. When markup and page disagree the markup is usually the stale one — the number changed in the footer and not in the template that emits the schema — and the site is then confidently telling engines to route callers somewhere the business itself no longer says to call. Every other check passes: the tag is present, well formed and complete. Only comparing it against the page can see it.
What to do. Make the schema read from the same source as the footer, so the two cannot drift. If they are maintained separately, correct whichever is stale — and check which one that is rather than assuming it is the markup.
Opening hours
lowBarely affects AI search
Why it matters. "Is it open now" is one of the commonest things asked about a local business, and it is a question a model can only answer from structured hours. Without them the answer is a guess or a refusal, and either one sends the asker to a competitor whose hours were readable.
What to do. Add openingHoursSpecification with dayOfWeek, opens and closes. Prefer it over the shorthand openingHours string — the specification form expresses closures and split shifts, which the string cannot.
When it is not scored. No opening hours in the markup. Not scored unless the business has a location people visit.
Coordinates & map
lowNo effect on AI search
Why it matters. Latitude and longitude remove the last ambiguity from an address. They matter most exactly where Indian addresses are hardest to parse — a building known by a landmark, a lane with no name, a PIN covering a wide area — which is to say the cases where the text address was already going to be resolved badly or not at all.
What to do. Add a geo GeoCoordinates node with latitude and longitude, and hasMap pointing at your maps listing. Take the coordinates from the map pin customers actually use, not from the centre of the PIN code.
When it is not scored. No coordinates. Optional, and not scored — the address is what does most of the work.
Branch markup
highAI search needs this
Why it matters. Every other check in this section reads one address — the first one found — which is the right thing to do for a business that has one and a misleading thing to do for a chain. A network of forty outlets was measured on whichever outlet happened to be sampled first, and the other thirty-nine were neither checked nor mentioned. This one counts the whole declared set and asks how many of them are described completely enough to be found, because "three of nineteen branches carry a PIN" is a different problem from "your address is missing a PIN".
What to do. Emit one LocalBusiness node per branch, each with its own @id, its own PostalAddress and its own telephone, on the page for that branch. A store locator that renders branches for readers only — in a map widget, or behind a query string — publishes nothing an engine can read: the branch pages exist and the addresses on them do not.
When it is not scored. Only one location is declared, so there is no branch set to measure.
City pages
highAI search needs this
Why it matters. A landing page per city is a good structure and a common one, and it fails in a specific way: every page carries head office's address and telephone. Each page then ranks for its city and immediately tells the reader — and the engine — to contact somewhere else. It is invisible to per-page checking because every page is individually correct, and it is only visible across the set.
What to do. Give each city page the address and telephone of the branch that serves that city, as its own LocalBusiness node. If there is no branch in that city, say what the page actually offers — a service area rather than a location — using areaServed instead of an address you do not have.
When it is not scored. No city-specific pages found, so there is no city page set to check.
Business Profile
criticalAI search needs this
Why it matters. For a business with a location the listing usually outweighs the website. It is what fills the map pack, what an assistant reads when someone asks for somewhere nearby, and the thing your competitors are optimising while you edit your homepage. None of it lives on your domain, so no scan of your own site can see it — this is a lookup, and it is off unless a key is configured.
What to do. Claim the listing at business.google.com if you have not. Then fill it: the exact primary category, full opening hours, real photos, and the service list. Above all put your website on it — that link is what lets anything connect the listing to this site, and without it even this check cannot confirm the listing is yours.
When it is not scored. Not looked up. Set PLACES_KEY to enable it — note the Places API is billable, unlike the Core Web Vitals lookup.
Listing agrees with the site
highAI search needs this
Why it matters. Two records of one business that disagree are two businesses as far as anything reading them is concerned. This is the citation-consistency problem measured against the citation that matters most: when the telephone on your listing is not the telephone in your markup, every system trying to confirm you are one entity gets a weaker signal, and half your callers get the wrong number. It is also the single most common local defect, because the two are edited by different people years apart.
What to do. Decide which is current, then make the other match it exactly — same number, same PIN, same business name. Not a rephrasing: the same string. Then keep them together, because they drift the moment they are maintained separately.
Reviews
highBarely affects AI search
Why it matters. Review count and recency are among the strongest local ranking inputs, and the one part of local visibility a business can move directly this quarter. They also feed answers: an assistant asked to recommend somewhere weighs the volume and the rating, and a business with four reviews does not get named next to one with four hundred.
What to do. Ask, in person, at the moment the work is done — that is what actually produces reviews. Reply to every one, including the bad ones, because responses are visible and read. Never buy them; the detection for that is good and the penalty removes the listing.
When it is not scored. Not looked up — no Business Profile was matched, so there were no reviews to read.
Directory profiles
mediumBarely affects AI search
Why it matters. Justdial, IndiaMART, Sulekha and the rest are where a large share of Indian local search still happens, and each listing is a citation that either reinforces your entity or fragments it. What can be checked from here is only what you declare: a profile named in your own markup that no longer resolves is a dead citation, and declaring none at all tells engines nothing about where else you are listed. Finding listings you have not mentioned is not possible from here — those sites have no public API and refuse crawlers outright.
What to do. List every directory profile you control in the sameAs array of your Organization or LocalBusiness schema, and link them from a contact or about page. Then make the name, address and phone on each one identical to your site's.
When it is not scored. No directory profiles declared in your markup. Add the ones you control to sameAs — it is the only part of your citation footprint that is checkable from your own site.
PIN code in the directory
mediumAI search needs this
Why it matters. The PIN shape check above proves six digits and nothing else — 560001 and 500001 both pass it, and one is Bengaluru while the other is Hyderabad. A PIN that is well formed and wrong is invisible to every checker that only counts digits, renders perfectly on the page, and matches no listing, no delivery route and no citation anywhere. It is also the single most common address typo, because it is the only part of an address that carries no meaning to the person typing it.
What to do. Correct the PIN to the one India Post actually holds for this locality. Then correct it everywhere else at the same time — the whole cost of a wrong PIN is that it fragments your address across your site, your listing and every directory, so fixing one copy converts one problem into two disagreeing ones.
When it is not scored. The PIN was checked against its postal circle only, which is the state-level half of this. Set PIN_LOOKUP=1 to resolve the full six digits against India Post's own directory.
Coordinates match the address
mediumBarely affects AI search
Why it matters. A wrong coordinate is worse than an absent one. With no geo, anything resolving your location falls back to the text address and gets there; with a wrong one it goes confidently to the wrong place, and the two commonest causes both look completely normal in the markup — a CMS that geocodes the PIN rather than the street drops every branch in a city onto one point, and a template with a hardcoded default puts every branch in the city the template was written in.
What to do. Take the latitude and longitude from the map pin your customers actually use — open your own Business Profile listing, right-click the pin, copy the coordinates. Do not take them from a geocoder run over the PIN code, which is what produces the failure this check finds. If you have several branches, each one needs its own pair.
When it is not scored. Coordinates were not checked against the address. Set GEOCODE=1 to enable it — it is free and unkeyed, and uses OpenStreetMap.