In This Article
You were told GEO is just SEO with a new acronym, and your best page still does not show up inside the AI answer. Both can be true. The engineering definition of GEO is simple: generative engine optimization is the work of making your passages sit close to real questions in vector space, so a retrieval pipeline picks them up. PageRank (the link-graph scoring algorithm Brin and Page built at Stanford) asked who links to you. Vector space retrieval asks how close your text is to the query. Different question, different math, different ways to fail.
The industry gave this a marketing name. I do not have a problem with that, a name helps people find the topic. But the name hides the mechanism, and executives who only hear the acronym end up funding cosmetics. So here is what sits underneath, in plain engineering terms.
I already argued on this site that GEO is SEO applied to a new retrieval layer. This article is the engineering behind that sentence.
What GEO Means in Engineering Terms
GEO (generative engine optimization, the practice of making content retrievable and citable by AI answer engines such as ChatGPT, Perplexity, Gemini and Google AI Overviews) describes a pipeline problem, not a ranking-factor problem. The term was formalized in a 2024 research paper titled “GEO: Generative Engine Optimization” by authors from Princeton, Georgia Tech, the Allen Institute for AI and IIT Delhi, accepted to KDD 2024.
The engineering version has four parts:
- The engine fetches your page and extracts text from it.
- A chunking step cuts that text into passages.
- An embedding model turns each passage into a vector (a list of numbers, hundreds or thousands long).
- At query time, the engine compares the query vector to passage vectors and keeps the closest ones.
Everything else in GEO, the schema, the headings, the entity clarity, the writing style, matters only because it changes what ends up inside those vectors. Hold on to that sentence. It will save you a lot of budget.
How PageRank Worked (and Why It Is a Different Kind of Signal)
PageRank models a random surfer clicking links. A page’s score depends on the scores of the pages linking to it, each divided by how many outbound links they have, plus a damping factor (0.85 is the value usually quoted from the original work). The scores are computed iteratively across the whole link graph.
Two properties matter here.
First, the unit is the page, and the signal travels along links. Authority propagates. You earn it by being pointed at.
Second, and this is the one most people miss, PageRank is query-independent. Your page has the same PageRank whether someone searches for “enterprise SEO audit” or “best pizza in Lisbon”. It is a static score about the page’s position in the graph.
Cosine similarity has no such thing as a static score. It exists only for a query and a passage together.
Next to PageRank sat the keyword side: an inverted index (a lookup table from terms to the documents containing them) scored with lexical methods such as BM25. That side is not dead either. Published explainers describe modern AI retrieval as hybrid, BM25 plus dense vectors, followed by a learned reranker.
How Vector Space Retrieval Works
An embedding model maps text into a point in a high-dimensional space. Passages with similar meaning land near each other. “Ferrari rental” and “luxury sports car rental” end up close together even though they share almost no words. That is the whole appeal, and also the whole danger: closeness is about meaning as the model reads it, not about the words you chose.
Cosine Similarity, Dot Product, Euclidean Distance
Three distance measures show up in vector search.
- Cosine similarity is the dot product of two vectors divided by the product of their lengths. It ranges from -1 to 1 and compares direction only. Length is ignored.
- Dot product multiplies the vectors component by component and adds the results. Direction and length both count.
- Euclidean distance is the straight-line distance between the two points.
For vectors normalized to unit length, cosine and dot product give the same ranking. For everything else they can disagree, and the difference is easy to see in two dimensions. Take a query vector q = (1, 0) and three passages:
| Passage vector | Cosine with q | Dot product with q |
|---|---|---|
| A = (0.6, 0.8) | 0.600 | 0.6 |
| B = (3, 4) | 0.600 | 3.0 |
| C = (2, 4) | 0.447 | 2.0 |
A and B point the same way, so cosine treats them as equal. Dot product ranks B five times higher because it is longer. And C, which points further from the query than A, beats A on dot product (2.0 against 0.6) but loses on cosine. Real embeddings have hundreds of dimensions, but the logic is identical.
Does it matter for you? Some embedding models are trained for dot product, so vector length may carry signal. Others are trained for cosine. No major answer engine publishes which measure or which model it runs in production. Not enough available data. So I do not build strategy on the metric. I build it on the thing every metric shares: if your passage is about several things at once, its vector points somewhere in the middle, and the middle is close to nothing.
PageRank vs. Vector Proximity, Side by Side
| Dimension | Link graph and keywords | Vector space retrieval |
|---|---|---|
| Unit scored | The page | The passage (chunk) |
| Signal | Links in, terms matched | Distance between query vector and passage vector |
| Depends on query? | PageRank: no. Keyword score: yes | Always |
| Who “votes” | Other sites, via links | The embedding model, via meaning |
| Typical failure | Weak links, thin authority | Diluted or mixed-topic passages |
| What you can edit | Links, anchors, site structure | The text inside each chunk |
Read the last row twice. Link building changes what others say about you. Vector optimization changes what you put inside a chunk. One is diplomacy, the other is editing.
Where a Page Dies in the RAG Pipeline
RAG (retrieval-augmented generation, where a model answers using passages fetched at query time) is the architecture behind most answer engines. A simplified path, as published explainers describe it:
- Fetch the candidate URLs.
- Extract text from the HTML.
- Chunk the text into passages.
- Embed each chunk.
- Retrieve the top matches, often with keyword and vector scores fused.
- Rerank the pool against the question.
- Generate an answer and cite sources.
Getting retrieved is not the same as getting cited. Passages that survive retrieval still have to beat competing passages at reranking. Most of what I read online about GEO lives in step 7. Most of the damage happens in steps 2 and 3.
Chunking deserves attention. Fixed-size chunking is fast and cuts wherever the character count says. Semantic chunking embeds consecutive sentences and starts a new chunk where similarity between neighbors drops below a threshold. Published guidance on chunk size varies, from 64 to 128 tokens for fact-style queries up to 100 to 300 words for general passage retrieval. Engines do not disclose their own settings. Not enough available data.
How Structural Noise Dilutes the Embedding
Now the technical core of this article. Enterprise templates (and I have worked inside a few) ship navigation, consent banners, mega menus, related-article blocks and footers on every URL. If extraction does not strip that text, it flows into the chunker along with your actual content. One crawling and chunking guide makes the same point: layout and navigation noise on web pages is something no boundary algorithm can repair after the fact.
Many embedding models produce a passage vector that behaves roughly like an average of its parts. Under that approximation, a chunk containing 60% useful text and 40% boilerplate has a vector pulled toward the boilerplate. The pull is not catastrophic at 10%. It compounds fast after that.
I modeled it. These numbers are synthetic, not measured on any live engine. Assumptions: the content vector has cosine 0.80 with the query, the boilerplate vector has cosine 0.05 with the query, and content and boilerplate have cosine 0.10 with each other.
| Boilerplate share of chunk | Cosine of chunk with query |
|---|---|
| 0% | 0.80 |
| 10% | 0.79 |
| 20% | 0.77 |
| 30% | 0.73 |
| 40% | 0.66 |
| 50% | 0.57 |
| 60% | 0.46 |
| 70% | 0.35 |
Now add a retrieval threshold. Say, for illustration only, 0.70. The chunk passes at 30% noise (0.73) and fails at 40% (0.66). Same content, same query, same author. The only thing that changed is how much junk shares the chunk.
Thresholds are not always fixed numbers, by the way. One open-source project, σ-RAG, estimates a noise floor from the distribution of cosine similarities between random unrelated document pairs, then sets its cutoff a chosen number of standard deviations above it (its default of two sigma carries about a 2.3% false alarm rate). I am not claiming any commercial engine works like that. I am showing you that “below threshold” can be a statistical idea, and that your page competes against a noise floor, not only against other brands.
There is a second effect. A fixed-size chunker cuts through your page without caring where your argument is. If your answer-bearing paragraph straddles two chunks, each half is weaker than the whole, and neither may clear the bar. That is why long, flowing, narrative sections often lose to short, self-contained ones.
A page can be excellent for a human and still land below the retrieval line, because the chunk the engine scored was never the page the human read.
If you manage enterprise templates and want to see which of your pages are exposed to this, my Enterprise Search Advisory starts exactly here: your top templates, chunk by chunk, scored against the questions your buyers actually ask. And if you want a first look yourself, the AI Visibility Inspector (my diagnostic tool for checking how AI systems see a site) is the place to begin.
What This Is NOT
Let’s do some filtering, so we do not waste each other’s time.
This is not an argument that links are dead. Engines still need candidates before they can embed anything, and published explainers describe several engines pulling from existing web indexes (ChatGPT leaning on Bing, Gemini on Google), though backends change without notice. Link-based authority still helps you get into the pool.
It is not keyword density with a new costume. Stuffing synonyms does not sharpen a vector, it smears it.
It is not a claim that embeddings replaced Google. Google uses many signals, and PageRank is only one of them.
It is not the other “GEO” either. The same three letters appear in machine learning research for tuning generative model outputs on quality, latency, cost and safety. That is model engineering. Here GEO always means generative engine optimization for content.
And it is not a promise of citations. Nobody can sell you that, and I would be suspicious of anyone who tries.
What to Change on the Page
Short list. Each item changes what ends up inside a chunk.
- Keep boilerplate out of the extractable content. Semantic HTML landmarks (main, nav, footer) are cheap to add. No engine documents that it respects them, so treat it as insurance, not a lever.
- One topic per section. A section that covers three things produces a vector that sits between all three. My developer blueprint on section hierarchy covers how to structure headings so chunks stay clean.
- Make every passage self-contained. Name the entity inside the passage. “It” and “the platform” mean nothing once a chunk is cut away from its neighbors. Conflicting names for the same entity make it worse, which is the problem I describe in entity ambiguity resolution.
- Put the answer first. The first two or three sentences under a heading should answer the question that heading implies.
- Cut hedging and filler. Named entities, figures and plain claims sharpen a vector. Vague phrasing blurs it.
- Test, then edit, then test again. You cannot see an engine’s scores. You can approximate with an open-source model. It is only a proxy, not the engine’s actual model, but it shows direction:
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer("all-MiniLM-L6-v2")
query = "how is vector retrieval different from PageRank"
chunks = [
"Paste chunk one of your page here...",
"Paste chunk two here...",
]
scores = util.cos_sim(model.encode(query), model.encode(chunks))[0]
for chunk, score in zip(chunks, scores):
print(round(float(score), 3), chunk[:80])
Split your page the way an engine might (try fixed windows and sentence-based splits) and watch which chunks drop. The first time you do it, the navigation chunks are usually the ugly ones.
For the audit side of this, I wrote up retrieval layer diagnostics, and the wider AI Retrieval Optimization Framework puts it into a repeatable order of work.
Estimated Gain After Implementation
Honest answer: not enough available data for a measured range on live engines. Nobody outside the engines sees retrieval scores, and I will not invent a number to make this section look finished.
What I can give you is the direction from the model above. Cutting boilerplate from half the chunk to a fifth moves the synthetic cosine from about 0.57 to about 0.77, a lift of roughly 0.2. Whether 0.2 crosses a real threshold depends on the engine, the query and your competitors. Treat it as direction, not a guarantee. Measure your own pages before and after, and do not believe anyone (including me) who quotes you a fixed percentage.
Where PageRank Still Sits
PageRank did not die. It got demoted from the whole story to a gate at the front of the pipeline. If a page never gets crawled, indexed or surfaced as a candidate, it never reaches the embedding step, and everything above is irrelevant. That is the territory of search architecture failures and of indexation collapse patterns, both of which still decide who gets considered.
The same pipeline view explains why my structural decay research on RAG retrieval pipelines keeps coming back to the chunk, not the page.
And once you can see the chunk, you can start measuring something better than rankings. That is where AI mention velocity comes in, and where enterprise visibility architecture gives the structure around it.
The Contrarian Truth
Most GEO advice is SEO cosmetics with vector vocabulary pasted on top. If a fix does not change which text sits inside a chunk, it is not GEO engineering.
I know that annoys people who sell GEO checklists. Fine. A checklist that says “add FAQ schema” without asking what the extractor, the chunker and the embedder will do with your page is guessing, and sometimes guessing wrong.
Bring Me Your Worst Template
If you are an SEO manager, a head of digital or a VP who has to explain to your board why a strong brand is missing from AI answers, start with the template, not the content calendar. Book a conversation with me or begin with the AI Assessment Center. If you want ongoing monitoring of where AI systems mention you, NovaX (my AI visibility intelligence platform) is built for that.
FAQ
GEO is the work of making your passages sit close to real questions in vector space, so that a retrieval pipeline selects them. The pipeline fetches a page, extracts text, chunks it, embeds each chunk and compares those vectors to the query vector.
PageRank scores a page by its position in the link graph and gives the same score for every query. Vector retrieval scores a passage against a specific query by distance between vectors. The first rewards who points at you, the second rewards what is inside your chunk.
Cosine similarity compares direction only and ranges from -1 to 1. Dot product counts direction and vector length. For unit-length vectors they rank identically. In my two-dimensional example, two vectors with the same cosine (0.6) had dot products of 0.6 and 3.0. No major engine publishes which measure it uses, so I do not build strategy on that choice.
Navigation, banners and footers that reach the chunker share a chunk with your content. If a chunk vector behaves roughly like an average of its parts, the noise pulls it away from the query. In my synthetic model, cosine fell from 0.80 with no noise to 0.66 at 40% noise and 0.57 at 50%. With an illustrative threshold of 0.70, the 40% chunk fails.
Not necessarily. Some designs set the cutoff statistically, for example the open-source σ-RAG project, which estimates a noise floor from random document pairs. Real engines do not disclose their thresholds, so exact numbers are not available.
Yes, upstream. Engines need candidates, and published explainers describe several engines drawing on existing web indexes. Links help a page become a candidate. They do not rescue a diluted chunk once it is embedded.
Roughly. An open-source embedding model can score your chunks against target questions. It is a proxy for direction, not the engine’s actual model, so I use it to find the weakest chunks, edit them, and compare before and after.
Not enough available data for a measured range on live engines. The model suggests that reducing noise share from 50% to 20% lifts synthetic cosine by about 0.2, but that is direction, not a promise.
This article was researched and drafted with the assistance of AI tools and reviewed and edited by author prior to publication.
