To ChatGPT you are not the Cagliari dentist: you are just any dentist who happens to be located in Cagliari. When a patient asks for the best dentist in Cagliari, the AI recommends whoever has explicitly declared that connection with the city in the way the models understand — not whoever has worked there for thirty years without ever formalizing it. Anchoring your brand to the city is a quick intervention with lasting effects.
Try asking ChatGPT “what is the best dental practice in Cagliari” or “recommend an accountant in Verona”. The model responds with names. Those names don’t come out at random: they come from a Knowledge Graph that links entities (businesses, people, places) to specific geographic coordinates.
If your brand is not robustly linked to your city within this graph, then to the AIs you simply are not the Cagliari dentist. You are a generic dentist who happens to be in Cagliari. It’s a difference that explains months of invisibility in AI answers to local queries.
In this article I explain how the part of the Knowledge Graph that concerns your city works, why it is a technical problem different from classic local SEO, and what audit you can run in 15 minutes to understand where you stand.
What a local entity is in a city Knowledge Graph
When I talk about a local entity I mean the node that represents your business within your city’s graph. The graph has three levels: the city as a geographic place (Cagliari, lat/lng, province, region), the categories of businesses present in that city (dentists, lawyers, restaurants), and the individual businesses with their attributes (name, address, reviews, sector, owner, year of founding).
The underlying technical problem is called geo-entity linking: connecting a mention of a place or business in text to a specific node in the geographic graph of the real world. It’s not trivial.
In the world of NLP research, Masis and O’Connor (2024) in the paper Where on Earth Do Users Say They Are? worked precisely on this: how to link mentions of places in noisy texts (social media, multilingual, poorly written) to the correct node of the geographic graph. Their study documents two facts that are important for you: open-source geo-entity linking tools are few, and the existing ones are either rule-based or LLM-based, with scaling limits; and at the city level of granularity the problem becomes harder because the signals are fewer and more ambiguous.
It follows that, for an AI model, distinguishing “Studio Rossi of Cagliari” from “Studio Rossi of Cagli” (which really exists, in the province of Pesaro-Urbino) is not automatic. The AI manages it only if the graph contains strong and consistent signals that anchor “Studio Rossi” to the “Cagliari” node and not to other similar nodes.
Translated into practice: if there are 40 law firms in your city, the model has to choose. It chooses the ones with the most anchoring signals to the city — not the ones that “wrote Cagliari on their homepage”.
Why it sits upstream of traditional local SEO
Classic local SEO works on Google Maps and on “near me” queries. The local KG works on a previous level: it decides who exists as a recognizable entity in your city, even before deciding who ranks.
If you don’t exist as an entity — that is, if the graph has no stable node that represents you — you can even be first on Google Maps but not show up when someone asks ChatGPT or Perplexity “who is the best dentist in Cagliari”. They are two different games played on two different fields.
This connects to what I told you about embeddings and vector space: the model doesn’t search for strings, it searches for proximities of meaning. “Dentist Cagliari” is a vector; your brand, if well anchored, is a nearby vector. If poorly anchored, it’s a vector that sits in the wrong place in the space. And it also connects to the topic of author entity recognition: just as the model recognizes an author as a stable entity, in the same way it has to recognize your business as a stable local entity.
Fifteen reviews total over 3 years are more noise than signal.
The test you can do in 15 minutes
I’ll give you an operational procedure. You need three tools, all free.
First check — presence on Wikidata. Open Wikidata and search for your business name. If an item with your name exists, check that it has the “located in the administrative territorial entity” (P131) property set to your city and “instance of” (P31) set to your category. If no item exists, you are a missing node of the graph — you’re simply not there.
Second check — Google Business Profile. Open Google Business Profile and verify: a primary category consistent with your actual business, a precise address with the correct postal code, updated hours, at least 20 reviews in the last year, photos from the last 3 months. Binary threshold: if even one of these is missing, the local node is weak.
Third check — LocalBusiness schema markup. Open Google’s Rich Results Test, paste the homepage URL, and look in the JSON-LD result for the `address`, `geo` (with `latitude` and `longitude`), and `areaServed` properties. If the tool finds no LocalBusiness schema, your site is not declaring to the graph where you are.
Three checks, three tools, 15 minutes. They are a first step — the real analysis of a local KG requires professional tools and properly done entity extraction. But these three signals, if they’re all green, move the needle far more than you think.
Create or claim the Wikidata item for your business, with city, category, year of founding, owner
The test I ran myself
I took 20 Italian SMBs from mid-sized cities (Brescia, Verona, Cagliari, Bari, Parma) in different categories (dental practices, accountants, auto mechanics, gyms) and asked ChatGPT and Perplexity “what is a good [category] in [city]” for each combination.
Out of 20 brands, 6 were cited at least once by the model (30% of the sample). Of those 6, all had a Wikidata item or a GBP listing with more than 50 reviews and valid LocalBusiness schema. Of the 14 not cited, only 2 had LocalBusiness schema, none had a Wikidata item, and the average review count was below 20.
Small sample, an indicative test rather than a scientific study. But the pattern is clear: the brands that appear in the local graph in a structured way also appear in the AI answers. Those with no signal don’t appear.
The mistakes I notice most often
Thinking a nice website is enough. TecnoImpianti Soluzioni Industriali may have the most polished site in Brescia, but if the city graph has no “TecnoImpianti” node anchored to “Brescia” with category “industrial systems”, to the AI you are invisible on local queries.
Low-frequency GBP reviews. Fifteen reviews total over 3 years are more noise than signal. The graph weighs consistency, not the total.
Wrong or too-generic GBP category. “Business services” is not a category, it’s a non-answer. If you do legal consulting in employment law, the category has to say so.
No mentions in local media. Automeccanica Brescia cited in the Giornale di Brescia or sponsoring a local event creates edges in the graph that the site alone never creates.
What to do in practice?
- Create or claim the Wikidata item for your business, with city, category, year of founding, owner
- Bring GBP reviews to an average of at least 2 per month, consistently
- Add LocalBusiness schema to the site with `geo`, `address`, `areaServed`
- Look for sponsorships of local events or placements in city media (including local vertical blogs)
- Sign up for the vertical city directories in your sector, if they exist
- Compare yourself with the 3-5 competitors that ChatGPT cites in your sector-city: see what they have that you’re missing
In conclusion…
Visibility in AI answers to local queries is not played out on keywords or on the site’s content. It’s played out on the fact that you exist as a stable node in your city’s Knowledge Graph, with consistent edges toward category, address, reviews, and local media. It’s a level upstream of classic local SEO, and it requires different work.
In this series I talk about how vertical sector entities combine with local ones, how to build a robust entity profile for an SMB brand, and how to reconcile your scattered mentions across different sources into a single consistent node of the graph.