Plain vector RAG — encode the query as a vector, retrieve passages by cosine similarity, feed them to the LLM — works well on simple lookups. It hits a ceiling on questions that span multiple entities or require traversing relationships. GraphRAG fills that ceiling by adding an explicit knowledge graph alongside the vector index. The graph holds the relationships; the vectors hold the semantics; the retrieval uses both.
Where vector RAG breaks down
Vector-only retrieval works for queries that have a clear central concept and return a single high-similarity passage. It struggles on three query patterns that show up constantly in production.
- Multi-entity queries. “Compare X and Y in the context of Z.” The closest single passage might cover X and Y without Z, or X and Z without Y. Vector similarity returns the best single match, not the best combination.
- Multi-hop reasoning. Queries that require traversing relationships. “What were the consequences of A on the people who worked at B?” The answer needs to follow the A→C→B chain; plain vector retrieval looks for passages that contain all three simultaneously, which is rare.
- Disambiguation across entity meanings. Strings that map to multiple entities (Apple the fruit vs Apple the company) need entity resolution before retrieval. Vector similarity alone surfaces passages about both, which the synthesis layer then mixes incorrectly.
What GraphRAG adds
Three things, layered on top of the vector index.
Entity index. The graph stores entities as nodes with typed identifiers. Query parsing resolves the query’s entities to nodes before retrieval.
Relationship index. Edges between nodes store typed relationships (is-a, part-of, caused-by, etc.). Multi-hop queries traverse these edges; vector-only systems cannot.
Graph-augmented retrieval. The retrieval pipeline starts from vector similarity, identifies the entities the top passages cover, expands through the graph to find related entities, and pulls additional passages from the expanded entity set. The result covers the query’s entity neighborhood rather than only the closest embedding match.
Why this matters for LLMO
Two implications for publishers.
The first is that GraphRAG is increasingly what production AI search runs on underneath. Microsoft published the original GraphRAG architecture in 2024; several engines have adopted graph-augmented retrieval since. The publishers whose content cleanly maps to entities and surfaces typed relationships benefit twice: once from the vector index, once from the graph.
The second is that the same knowledge graph a publisher builds for semantic SEO and topical authority becomes the graph that supports their own RAG deployments. Internal documentation, support content, and customer-facing chat all benefit from a graph view of the same entities the public-facing SEO work covers. One artifact, multiple uses.
How publishers build the graph
- Identify the canonical entities the content covers. Each entity gets a node with a stable identifier.
- Encode typed relationships between entities. The internal-link structure is one input; explicit annotations (schema markup,
sameAslinks to Wikidata, internal taxonomies) are another. - Embed the passages alongside the graph. Each passage is embedded for vector retrieval; each passage is also linked to the entities it covers in the graph.
- Use the combined index for retrieval. The retrieval pipeline pulls candidate passages by vector similarity, expands through the graph, and returns a passage set covering the query neighborhood.
InfraNodus (the engine underneath KeywordGraph) ships a GraphRAG implementation natively. The same graph that supports SEO and LLMO publishing supports the retrieval system underneath.