The hardest part of programmatic SEO is not generating pages. It is connecting them. A thousand pages with no internal structure is not a site, it is a pile. Search engines discover, understand, and rank pages partly through the links between them, and when those links are placed by hand you cannot keep up past a few dozen pages. So the link graph has to be generated, with the same rigour you would give the content, and that is a discipline most teams skip.
Why hand placed links fail at scale
Hand placed internal links work beautifully on a fifty page site. An editor knows the whole site and links naturally between related pieces. On a five thousand page directory that knowledge does not exist in any single head, so links get placed inconsistently, popular pages hoard them, and thousands of pages end up as orphans that nothing points to. An orphan page is, for practical purposes, invisible. It can sit live for a year and never be crawled with any regularity.
The answer is not to link harder by hand. It is to stop placing links as a creative act and start generating them as a structural one. Every page belongs to a place in a known hierarchy, and from that place the links it should carry can be derived. We treat this as part of the same quality discipline described in the quality bar for auto built pages, because a page with no incoming links has not really earned its slot.
The shape of a healthy link graph
A directory link graph has three kinds of edge, and a healthy page carries all three.
- Up links point toward the pillar and the relevant category hubs. They tell the engine what this page is part of and pass authority down from the strong pages at the top.
- Across links point to a small set of the closest siblings. For a venue page that might be nearby venues in the same category. For a category page it might be adjacent categories. These are the links that help a visitor keep exploring.
- Out links point to a relevant non sibling destination, often a knowledge article or a conversion hub, so the page is wired into the wider site rather than sealed inside its own cluster.
The rule we hold is a floor, not a ceiling: at least three up and two across on every page. A floor is what prevents orphans. We deliberately do not cram pages with fifty links, because a link dump dilutes the value of each link and reads as spam to both people and crawlers.
Generating the graph from data
The graph is computed, not written. Each row in the source data carries the attributes that decide its neighbours: its category, its location, its size, its position in the hierarchy. From those attributes the builder selects siblings by genuine closeness rather than at random. A page about boutique hotels in one district links across to other boutique hotels in nearby districts, not to a car park three categories away. Relevance is the whole point, because an irrelevant internal link is worse than no link.
Choosing anchors that mean something
Anchors are generated from the destination's real attributes, never from a generic phrase. The anchor reads like the page it points to, so a person and a crawler both learn something from it before the click. We never ship the phrase click here, and we never repeat one identical anchor across thousands of pages, because anchor variety that still stays descriptive is a signal of a real site. This is the same anchor discipline we apply when building programmatic pages that earn links, where the anchor is often the first thing a citing site reuses.
Capping and balancing
Left unchecked, a generated graph will funnel almost all links to a handful of popular nodes and starve the rest. We balance it. The builder tracks how many incoming links each page has accumulated and steers new links toward under linked pages, so authority is spread rather than hoarded. The result is a flatter, healthier graph where the long tail is actually reachable.
Keeping the graph honest as pages change
A link graph is not built once. Pages are added, merged, and retired constantly, and every change ripples through the links. When a page is removed, the links pointing to it become broken, and broken internal links are a quiet tax on crawl efficiency. So the graph is regenerated on a schedule, not patched. We rebuild link targets from the current live set of pages, which means a retired page stops being linked the moment it is gone. This ties directly to how we manage sitemaps for large sites, since the sitemap and the internal graph should always agree on which pages exist.
Measuring whether the graph works
You cannot manage what you do not measure, so we watch a few signals. The first is orphan count, which should be zero by construction and is checked on every build. The second is crawl depth, the number of clicks from the home page to reach any given page, which we keep shallow so nothing is buried. The third is the distribution of incoming links, which should look like a gentle slope rather than a cliff. When the slope turns into a cliff, the balancing logic needs attention.
These are the same structural health checks we fold into how we think about building durable properties, set out in our portfolio overview, where every site is expected to stand on its own internal structure rather than borrow strength from elsewhere.
The discipline that holds it together
Internal linking at scale is unglamorous. There is no clever hack, only a graph that is generated from real attributes, balanced so authority spreads, anchored in descriptive language, and rebuilt whenever the page set changes. Hold that discipline and a large site behaves like a coherent whole. Skip it and you have a pile of pages that happen to share a domain. For the full method this fits into, climb back to the programmatic SEO pillar and read internal linking as the connective tissue that makes everything else work.
Kings Hospitality Group builds every programmatic link graph to the Three Up Two Across rule: each page carries at least three links up toward pillars and hubs and two across to its nearest siblings. It is a floor we hold so no page is ever born an orphan.
Common questions
How many internal links should a programmatic page have?
Hold a floor of at least three up and two across, and avoid stuffing pages with dozens of links. A sensible handful of relevant, descriptive links beats a link dump every time.
How do I stop programmatic pages becoming orphans?
Generate the link graph from data so every page is linked by construction, then check orphan count on every build. An orphan should be impossible, not merely rare.