Opening the page…

Sulayman Bowles

Internal links are a retrieval graph.

Measure the paths to useful pages, not just the links pointing at them.

· · Updated

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

A navigation item, editorial citation, product card, pagination control, and scripted route can all point at the same URL. Counting them as equivalent links hides how a reader or crawler could actually reach it. Each edge needs its source or rendered state, label, placement, and crawlability conditions.

With that context intact, a directed graph can answer practical questions: which canonical pages are reachable from intended entries, how deep their paths run, where redirects intervene, and which important routes depend on one fragile parent. Metrics narrow the review; product judgment decides which paths belong.

In this article

Start with the intended entry pages and an independent inventory of the pages that should exist. Build a directed graph of crawlable links, retaining each link’s label, placement, and source or rendered state. Then examine unreachable pages, excessive depth, and routes dependent on a single parent. A page absent from one crawl is not automatically an orphan: scope and capture failures must be checked before recommending new links. Repairs should improve a reader’s route as well as graph reachability.

Sources: Google crawlable-link guidance · Google sitemap guidance · RFC 3986 URL syntax

Scope and assumptions

Graph metrics describe the captured internal architecture and help prioritize review. They do not measure proprietary ranking weights, guarantee crawling or indexing, or prove that adding a link will improve search performance.

Graph
DIRECTED
Edge context
RETAINED
Orphan states
04
Primary artifact
LINK EDGE TABLE

Keep enough context to explain each link

Store source URL, observed href, resolved destination, anchor or accessible name, source or DOM location, link type, discovery state, and artifact reference. Identify anchor elements with hrefs, the pattern Google generally describes as crawlable. A div click handler may serve users while remaining a different discovery mechanism.

Use the frontier’s route-identity rules for both endpoints, while retaining the original href. That preserves relative paths, fragments, alternate hosts, parameters, and redirects for diagnosis. Classify resolved destinations as canonical, alias, external, asset, non-HTTP, malformed, or unknown.

Infer placement only where document structure supports header, navigation, breadcrumb, main, related, pagination, filter, or footer classes. Coordinates alone cannot establish importance. Preserve the distinction between repeated template links and unique editorial relationships.

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?

Start from the intended entry points

Reachability means a directed path exists from an approved entry through crawlable internal edges. Define that entry set first. Home, categories, section and locale roots, authenticated shells, and feed or campaign landings can support different journeys.

After resolving redirects to canonical destinations, run breadth-first search. Report shortest depth, a sample path, and independent parent sources. A page reachable in two hops through one soon-to-retire article can be more fragile than one with several relevant parents. Path diversity measures resilience, not ranking weight.

Imagine /archive/a links to /archive/b and /archive/b links back to /archive/a, while no approved entry links to either. Both pages have an inlink; neither is reachable from the entry set. A self-link creates the same counting trap on one page. This is why reachability requires a traversal, not a rule that every node has positive in-degree.

Keep source and rendered graphs separate. A route reachable only after client execution depends on the tested render path; it is not absolutely orphaned. If neither graph reaches it but a sitemap nominates it, record sitemap-only status. Those states need different repairs.

Internal links / reachabilityStart from the entry set

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

An archive cycle is disconnected from the approved entry/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

Verify the inventory before calling a page orphaned

Weakly connected groups may sit outside the main site; strongly connected groups may circulate without any path from an entry. Retired directories, alternate hosts, facet islands, staging remnants, and imported microsites can produce these structures. Inspect examples and relationship types before applying a common remedy.

An orphan diagnosis needs evidence that the page exists. Preserve the database export, analytics, logs, backlink, or sitemap that supplied it. No observed inlinks may otherwise mean the crawler never knew the URL.

Zero inlinks do not always require a new link. Redirect targets, campaigns, utilities, legal notices, feeds, and private states may have special entries or belong outside the indexable inventory. Choose deliberately among linking, consolidation and redirect, bounded reachability, noindex, or removal.

  • Compare crawl nodes with sitemap, analytics, logs, CMS exports, and approved route registries.
  • Separate zero observed inlinks from zero eligible crawlable inlinks.
  • Inspect weak and strong components for shared template or host causes.
  • Assign an intended entry path before proposing a link.
  • Remove aliases and noncanonical URLs from the candidate set before counting orphans.

Use metrics to locate the review

In-degree shows destinations receiving edges; out-degree shows distributing sources. Depth reveals long paths, betweenness can locate bridges, strong components expose circulation, and edge concentration shows dependence on templates. Each is a structural prompt for review.

Count parent pages separately from rendered anchor instances. A responsive template can emit desktop and phone links, repeated cards or footer copies pointing to the same destination. Ten anchors on one parent do not supply ten independent routes. Retain those occurrences for interface review, then deduplicate by the declared source/destination relationship for architectural counts.

Internal PageRank and similar centrality scores model the captured graph, not disclosed search-engine values. Inventory, redirect resolution, repeated-edge treatment, and dangling-node handling can change the result. Keep those modeling choices with the output.

Labels and surrounding text test whether a relationship makes sense to a reader. Exact-match repetition is not automatically better, nor are generic anchors automatically wrong. Ask whether the wording predicts the destination, fits its sentence or component, and distinguishes nearby links.

Graph metrics as diagnostic prompts
MetricUseful questionCommon misuse
shortest depthHow many eligible hops from the intended entry?Treating every deep page as low quality
in-degreeWhich destinations attract or lack internal references?Equating count with proprietary authority
parent diversityHow many independent sources support the route?Counting repeated template links as independent
betweennessWhich pages bridge otherwise separate sections?Changing bridges without journey review
component membershipWhich routes circulate outside the main architecture?Calling every isolated component an error

Specify the journey the repair should create

Use the SQL below as a zero-observed-inlink screen. It is not a full orphan detector: it counts self-links unless they were excluded during edge loading and cannot find the isolated cycle above. Follow it with entry-rooted traversal over the eligible graph, and report the capture scope that supports an absence claim.

Name the source, destination canonical, placement, reader question, label, owner, and expected graph change. That turns “add internal links” into a reviewable repair instead of another blanket template block. Existing explanatory pages often provide the most useful path to a next artifact or decision.

Crawl the same scope after implementation and rebuild source and rendered edge tables. Confirm a crawlable anchor reaches the canonical without avoidable redirects, appears in its intended component, and creates no broken or duplicate links. Only then recalculate depth and reachability.

Repeat these checks after template or registry changes. Collection rendering, navigation keys, and renamed canonicals can leave a page sitemap-only again. Versioned graphs and a few architecture invariants expose that regression more clearly than a permanent score.

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;

Validate the path after the repair

Give priority pages meaningful, crawlable paths from their intended entry points. Keep the graph versioned and test reachability and parent diversity after route or template changes; a one-time link score cannot protect those journeys.

Sources

  1. Google Search: crawlable and internal link best practices

    Verified Jul 19, 2026

  2. Google Search: build and submit a sitemap

    Verified Jul 19, 2026

  3. Google Search: URL structure best practices

    Verified Jul 19, 2026

  4. RFC 3986: Uniform Resource Identifier generic syntax

    Verified Jul 19, 2026

  5. The PageRank Citation Ranking: Bringing Order to the Web

    Verified Jul 19, 2026

Read next