‹ Blog

Stop Ranking for Keywords. Start Being an Entity.

Keywords were a ranking game. Entities are a recognition game. The shift changes everything about how you show up in AI answers.

I spent eight years at Yellow Pencil chasing keyword rankings. Page one for "Edmonton renovation contractor". Page one for "kitchen remodel near me". I knew the drill. Then ChatGPT started eating search traffic and I had to unlearn most of it.

Here is the uncomfortable part. The AI never once asked "who ranks for kitchen remodel Edmonton". It asked something closer to "what do I know about Yellow Pencil as a business". Different question. Different game entirely.

This post is the mental model I wish someone had handed me three years ago. It is not a tactics list. It is the shift in thinking that makes the tactics make sense.

Keywords are strings. Entities are things.

A keyword is a bag of letters. "Kitchen renovation" is a keyword. Google's old algorithm would count how many times you said it, who linked to you, and whether your page looked topical. It was a matching game.

An entity is different. An entity is a concept the model has built up in its head. Yellow Pencil is an entity. It has a name, a location (Edmonton), a category (general contractor), a service area, a phone number, a handful of facts. When somebody asks an LLM "who does kitchen renos in Edmonton", the model is not matching strings. It is scanning its internal map of entities tagged with those attributes and deciding which ones to name.

If you are not on that map, you do not get named. It does not matter how many times your website says "Edmonton kitchen renovation" in bold. The model is not reading your page in that moment. It is recalling what it already learned about you from training data and tool calls.

So the job is no longer "rank for the string". The job is "become a clear entity the model can identify and attribute facts to". That is a completely different kind of work.

What the model needs to see

LLMs build entity representations by noticing the same thing described the same way across many sources. Say your business exists on your website, Google Business Profile, Facebook, Yelp, a BBB listing, and a couple of industry directories. The model ingests all of that during training or pulls it at query time through a retrieval tool. It is trying to answer one question: is this one business or seven?

If the signals line up, it resolves to one entity. You get a clean file in the model's head. If the signals conflict, it splits you into fragments or skips you entirely because it is not confident enough to cite you.

There are four signals that decide this.

One, your name. The exact same name everywhere. Not "Yellow Pencil" on your site, "Yellow Pencil Inc" on Google, "Yellow Pencil Renovations" on Facebook. Pick one. Use it.

Two, your category. If your schema says LocalBusiness on the homepage, GeneralContractor on a service page, and HomeAndConstructionBusiness somewhere else, the model has to guess. Pick the most specific accurate one and use it consistently. For me that is GeneralContractor nested under LocalBusiness.

Three, your service area. Edmonton and surrounding area. Not "Edmonton" on the site, "Sherwood Park, St Albert, Edmonton" on Google, and "Alberta" on Facebook. Define the area once. Match it everywhere.

Four, cross-platform linking. This is the one most people miss. The sameAs field in your schema markup is how you tell the model "this website, this Google listing, this Facebook page, this Instagram account are all the same business". Without it, the model is guessing. With it, you are doing the disambiguation work for it.

Note

The model is not trying to trick you. It is trying to be confident enough to cite you. Your job is to remove every reason it might hesitate.

The Yellow Pencil mistake

I will tell you what we did wrong because it is the most common version of this story.

For the first year, we had three different names across three platforms. The website said Yellow Pencil. The Google Business Profile said Yellow Pencil Inc because the registration name had "Inc" in it and I did not think it mattered. The Facebook page said Yellow Pencil Renovations because someone on the team thought it was more descriptive.

Three names. One business. From the model's perspective, three shaky half-entities, none of them solid enough to cite.

We also had category drift. Schema markup on the homepage was LocalBusiness. A service page schema was HomeAndConstructionBusiness. The Google category was General Contractor. Facebook was Home Improvement. All of those are arguably correct. None of them agreed.

When I started checking our AI citations across ChatGPT, Perplexity, and Gemini in early 2025, we were basically invisible. Not penalized. Not hidden. Just not confident enough to name.

I spent a weekend consolidating. One name everywhere: Yellow Pencil. One primary category: GeneralContractor in schema, General Contractor on Google, with the secondary categories aligned. One service area: Edmonton and surrounding area, stated identically in four places. And I added sameAs to the schema pointing at the Google listing, the Facebook page, the LinkedIn page, and the Instagram.

Fourteen weeks later, we were being cited. Same content on the site. Same backlinks. The only thing that changed was the model's confidence that we were one coherent thing.

How to audit yourself in an afternoon

Open a spreadsheet. Four columns: Name, Category, Service Area, Phone.

Row one is your website. Go read what your schema actually says, not what you think it says. View the page source and find the JSON-LD block. Write down the exact strings.

Row two is your Google Business Profile. Row three is Facebook. Row four is every other directory or social platform you show up on. Yelp, BBB, LinkedIn, Instagram, your chamber of commerce listing, any trade association page.

Now look at the columns. Do the names match? Do the categories map to the same real-world concept? Is the service area described the same way? Is the phone number identical, including formatting?

Anywhere you see drift, that is an entity signal conflict. Fix it. Start with the name because that is what the model keys off hardest.

Then add sameAs to your website schema listing every legitimate profile URL. That alone moves the needle because it gives the model permission to merge the fragments into one file.

Why this holds up when the tactics change

I get asked a lot whether this stuff will still matter in two years when the models are smarter. My honest answer is that it matters more, not less.

Smarter models are not going to magically decide your three-names problem was fine all along. They are going to be better at catching inconsistencies and more willing to skip citing you when the signals conflict. The bar for entity clarity is going up, not down.

Keywords will fade as a mental model. Entities will not, because entities are how any reasoning system has to think about the world. Strings are noise. Things are what you cite.

This is why Entity Readiness is one of the four dimensions we score in the GEO Grader. The other three, Schema, Authority, and AI Answer Presence, all depend on you being a recognizable entity first. If the model cannot resolve who you are, nothing else matters.

Your one next step

Run your site through the GEO Grader. It checks your entity signals in under a minute and tells you exactly where your name, category, service area, and cross-platform linking are drifting.

If the Entity Readiness score is below 70, that is your first job this month. Everything else gets easier once the model knows who you are.

hello@rankinglocal.ai is read by me directly.