Researchtechnical seo
Back to writing

Site architecture

Internal links: two inlinks can still lead nowhere

Reachability begins at an intended entry. Counting links cannot tell you whether a reader can get there.

Monochrome generative point study “Lorenz Projection,” a mathematical form rendered in black and white.

Imagine /archive/a links to /archive/b and /archive/b links back to /archive/a. Each page has an inlink. Neither has a path from the homepage. I would call that an isolated component, even though a report that only checks positive in-degree gives both pages a pass.

Now give both pages a path from one archive hub. Reachability passes, but retiring the hub can strand the pair again. A page’s current inlink count misses both defects: circulation without an entry and dependence on a single entry. They require different repairs.

I would model the journey from an intended entry: where the reader starts, what question the link answers, and which pages depend on it. Google supports crawlable links in relevant context. The publication still has to decide which journey is worth creating.

Method & limits

The opening and hub-removal check are worked graph arguments, not observed defects or visitor behavior. Google’s internal-link guidance was read October 25, 2026; other guidance retains its July 19 cutoff. The retained July 16 Atlas sample contains two source captures and discovered continuations, not a complete corpus graph. The Stanford PageRank source was unavailable; no new result from that paper is claimed. No crawl, removal experiment, ranking effect or proprietary weight was measured.

An edge needs the link the page contained

A navigation item, an editorial citation and a scripted click may all reach one destination. They differ in how they are discovered and what a visitor expects. Preserve the observed href and its anchor or accessible name, the resolved destination, the placement and the source or rendered artifact that exposed it.

Google describes anchor elements with hrefs as the general crawlable pattern. A div with a click handler belongs to another mechanism even if it works for a person. Resolve relative paths using the same route-identity policy as the frontier, but keep the original value for diagnosis. Classify an alias, external URL or malformed reference before asking whether it contributes an eligible internal edge. Crawlable links.

Placement is evidence when the document supports a navigation, main-content, pagination or footer classification. Preserve repeated template occurrences in the record, while allowing the architectural analysis to count parent pages once. Coordinates alone say little about editorial importance.

Internal-link edge contract
FieldExampleReview question
source_key/guides/crawlingWhich canonical page emits the edge?
observed_href../tools/crawler?ref=guideWhat did the document actually contain?
destination_key/tools/crawlerWhich canonical identity receives it?
labelcrawler architecture toolCan a reader predict the destination?
placementmain/editorialIs the edge contextual or repeated template chrome?
artifact_refrun/url/source#node-184Can another reviewer reproduce the observation?

The canonical graph adds redirects and canonical declarations as their own edge types. It records a link to an alias differently from a link to the maintained page.

The entry set determines what reachable means

Home, a topic root and a campaign landing page invite different paths. Define the approved entry set before running breadth-first search over eligible edges. Save alias resolution and the source or rendered scope with the result. Shortest depth and an example route can then explain what “reachable” means for that publication.

In the archive example, a traversal from home never reaches the two-page cycle. A self-link produces the same counting mistake on one node. Strong components expose circulation inside the cycle; traversal from the approved entries shows whether there is a path into it.

To test dependence on an archive hub, remove it from a copy of the captured graph and traverse again from the approved entries, identifying pages that lose every route so a retirement decision can account for the path that one positive inlink count concealed. That is a proposed architecture check, with visitor behavior and search weight left unmeasured.

Label a path that appears only after client execution render-only for the tested scenario. A page nominated only in the sitemap should remain sitemap-only. These findings call for different investigations and repairs. Neither should be flattened into “orphan.”

Internal links / reachabilityStart from the entry set

Both pages have an inlink. Neither has an entry path.

/archive/a links to /archive/b and /archive/b links back to /archive/a. Each has an inlink, but neither has a path from the approved entry.linklinkNo path from entryEApproved entryA/archive/aB/archive/b

Filled nodes are reachable from the approved entry.

Inlinks exist; entry reachability does not.

A zero-inlink check misses this cycle. Traversal from the approved entry finds the gap.

This section’s illustrative archive cycle, with a possible entry-link repair. The repair assumes these pages belong in that journey. Arrows represent crawlable internal links; the graph describes reachability, without assigning search ranking weight.
Reachability states for a public canonical page
StateObserved evidenceInterpretation
source-reachablePath through source anchor href edgesServer-delivered discovery path exists
render-onlyNo source path; path appears after tested executionDiscovery depends on client rendering scenario
sitemap-onlyNo internal path; canonical URL is nominated in sitemapDeclared but not architecturally integrated
external-onlyKnown inbound reference but no internal pathThird-party discovery exists; internal context absent
unobservedNo captured path or nominationCoverage or publication gap; verify inventory first

Try the nine-item canonical pagination fixture: a valid page-one canonical does not expose the products stranded on later pages.

An absence claim needs an inventory

The July Atlas manifest saves a next-page address for each Quotes to Scrape seed. Those are two observed continuations from two source captures. Reviewing orphans across the corpus needs an inventory beyond those seeds.

A broader orphan review needs an independent reason to believe the page exists: an approved route registry, CMS export, sitemap, analytics record or known inbound link. Otherwise zero observed inlinks may simply mean the crawler never learned the address.

There is also a product decision after detection. Utilities, campaign destinations and private states may have special entries or belong outside the public indexable set. For a normal editorial page, I would ask which relevant predecessor should introduce it. The repair should name that path instead of adding another universal “related links” block.

Ten anchors can be one dependency

A responsive template can emit desktop and phone copies of a link and repeat the destination in cards or a footer. The resulting ten occurrences all depend on one parent and disappear together if that parent is retired. Count occurrences for interface review and unique source-destination relations for architectural dependence.

Distinct parents improve the description, but they do not automatically give independent maintenance paths. Several links can be emitted by the same template or depend on one route registry entry. Keep the occurrence count for interface review, the unique parent relation for graph analysis and the shared implementation dependency for release review. Each answers a different failure question.

Depth, parent diversity, and bridge centrality can reveal dependence. Internal PageRank models the selected graph too, changing with redirect resolution, repeated edges, and dangling nodes. I would use the model to choose paths for inspection, then judge their reader value in context.

Context supplies the editorial test. Google recommends descriptive anchor text and meaningful surrounding words, while explicitly declining to give an ideal number of links per page. A universal navigation block can make a destination reachable without explaining why it belongs in this particular essay. A well-placed citation can answer that question with one link. Read the proposed path before increasing its count. Anchor and context guidance.

A repair should create a named journey

The SQL below is a zero-observed-inlink screen for eligible sitemap URLs. It can miss the isolated cycle from the opening and counts self-links unless edge loading removed them. Follow it with entry-rooted traversal over the declared source or rendered graph.

Name the source page, destination canonical, placement, reader question, and label in the proposed repair. Capture the same scope afterward and trace the eligible anchor from its entry. Recalculate depth and unique parents; if retiring a hub, repeat its removal test to see whether the path survives.

There is a consequential exception to aggressive orphan repair. A utility, a temporary campaign destination or a private state may have a deliberate entry and no place in the public editorial graph. Record that disposition instead of linking it into every topic merely to clear a report. For a normal essay, choose a predecessor whose reader has a reason to continue.

A small publication may need only an inventory, entry-rooted traversal, and a few reviewed paths. Scoring earns its cost when it exposes a dependency that view misses. I would keep the explanation of how a reader arrives, why the transition makes sense, and what could remove it. That survives a change in metric.

Find sitemap URLs with no eligible internal inlinks

This query assumes redirects and canonical aliases were resolved before edge loading.

SELECT u.canonical_url
FROM url_inventory AS u
LEFT JOIN link_edges AS e
  ON e.destination_key = u.url_key
 AND e.is_crawlable = 1
WHERE u.in_sitemap = 1
  AND u.is_indexable = 1
GROUP BY u.url_key, u.canonical_url
HAVING COUNT(e.source_key) = 0
ORDER BY u.canonical_url;

Sources

  1. Google Search: crawlable and internal link best practicesVerified Jul 19, 2026
  2. Google Search: build and submit a sitemapVerified Jul 19, 2026
  3. Google Search: URL structure best practicesVerified Jul 19, 2026
  4. RFC 3986: Uniform Resource Identifier generic syntaxVerified Jul 19, 2026
  5. The PageRank Citation Ranking: Bringing Order to the WebVerified Jul 19, 2026
  6. Retained Quotes to Scrape source-capture manifestJul 16, 2026

    Two source captures; this does not include a measured browser render.

Read next