Skip to content
pageinspection

Orphan pages: finding the pages nothing links to

An orphan page is not broken, missing, or badly written. It is a page that no other page on your site links to, which makes it unreachable by the only navigation method a crawler really trusts. Nothing about the page itself will tell you it has this problem.

The short answer

An orphan page has no internal links pointing at it, so a crawler walking your site never arrives. Listing it in a sitemap does not fix this: a sitemap is a suggestion, internal links are the structure, and a page with no inbound links reads as a page the site itself does not consider important.

CriticalAudit check · Internal linking

What makes a page an orphan

One property: zero inbound internal links. Not few, zero. A page linked once from a single buried archive is not an orphan, it is a deep page, and that is a different and much milder condition.

A link graph. The homepage links to /blog, /products and /about, and /blog links on to two posts, so all six are reachable by following links. /promo-q3 and /old-guide sit apart with no line reaching them: they exist and nothing on the site points at them.//blog/products/about/blog/a/blog/b/promo-q3/old-guidenothing links hereIn the sitemap. Not in the graph.
Both dashed pages return 200 and render perfectly. Neither can be reached by following a link from anywhere on the site.

The defining feature is that the defect is relational. You cannot inspect an orphan and see anything wrong, because nothing is wrong with it. What is missing is somewhere else, on whatever page should have linked to it, which is why this is the one check on this list that a single-page audit genuinely cannot answer.

Why a sitemap entry does not fix it

This is the misconception that keeps orphans alive. The page is in sitemap.xml, so it gets crawled, so what is the problem? The page probably does get crawled. The problem is everything else the link would have carried.

A sitemap is a list of addresses. An internal link is an address plus a context: anchor text describing what is there, a position in the site's structure implying importance, and a share of the authority of the linking page. A sitemap entry supplies exactly the first of those and none of the rest.

So a sitemap gets the page discovered. It does not get the page ranked, and it does not get the page found by a human.

There is a human argument too, and it is usually the larger one. A page nothing links to is a page no visitor can navigate to. If it earns traffic from search it earns it alone, with no path in from the rest of the site and no path onward from itself.

Check the outbound links on one page

A single-page audit follows no links, so it cannot see what points at a URL. What it can see is the other direction: how many internal links this page hands out, which is how you spot a dead end. The widget states the limit rather than implying it checked for orphans.

Check the outbound links on one page

No signup required. Each free search audits one page, paste any URL to see it in action.

How orphans actually get created

Almost never on purpose, and almost always by one of five events. Knowing which one you are looking at tells you whether to fix the page or the template.

  • Campaign and landing pages. Built to be linked from an email or an ad, deliberately kept out of the navigation, then never linked from anywhere once the campaign ends. This is the most common orphan on a marketing site and often the highest-value one.
  • Pagination that stops. An archive showing ten items per page with links to pages two and three, but a rolling window that drops older pages as new posts arrive. Everything past the window is orphaned progressively, in order, oldest first.
  • A removed taxonomy. A redesign deletes category or tag pages, and every item that was only reachable through them loses its only route. The items are untouched; the path to them is gone.
  • Product variants and filtered collections. Reachable through a filter interface that emits links via JavaScript rather than anchors, so a crawler sees no route even though a person can click one.
  • Migrations. Content moved to new paths, internal links left pointing at the old ones. The new URLs have no inbound links and the old ones redirect, which hides the problem from anyone clicking around.

Finding them

The comparison you need is the set of URLs in your sitemap against the set of URLs a crawler reached by following links. Anything in the first and not the second is an orphan. If you already have both as exports, the diff is a one-liner:

find-orphans.sh
# URLs the sitemap claims exist
curl -s https://example.com/sitemap.xml \
  | grep -oP '(?<=<loc>)[^<]+' | sort -u > sitemap.txt

# URLs a link-following crawl actually reached
# (one URL per line, from your crawl export)
cut -d, -f1 crawl-export.csv | tail -n +2 | sort -u > crawled.txt

# In the sitemap, never reached by a link
comm -23 sitemap.txt crawled.txt

That is the whole method, and it is worth understanding even if a tool does it for you, because it explains why the answer requires a crawl: one side of the comparison is a graph traversal and cannot be derived from a list.

Fixing the cause rather than the page

The tempting fix is a links block on some page pointing at each orphan. It works, briefly, and it does not stop the next one appearing. The durable fix is a template that cannot produce an unreachable item.

app/blog/[slug]/page.tsx
// Every post links to its siblings by date, so a post
// is reachable from its neighbours even if its category
// page is deleted or the archive window rolls past it.
const { prev, next } = await getAdjacentPosts(params.slug)

return (
  <article>
    {/* ...post body... */}
    <nav aria-label="More posts">
      {prev && <Link href={`/blog/${prev.slug}`}>{prev.title}</Link>}
      {next && <Link href={`/blog/${next.slug}`}>{next.title}</Link>}
    </nav>
  </article>
)

Adjacent-post links are unglamorous and structurally strong: they form a chain no rolling window can break, so an old post stays reachable from a newer one indefinitely. A full archive page with no pagination limit does the same job for a small site.

Filters that build links in JavaScript are the case worth checking by hand.

Our crawler runs a real browser, so it sees client-side links a plain fetcher would miss. Not every crawler does, and a route that only exists after a click event is a route some of them will never take.

Why an unreachable page is Critical

Because the outcome is binary rather than degraded. Most checks on this list make a page perform worse. This one determines whether the page participates in your site at all: it receives no authority, no anchor-text context and no human navigation.

The other half of the rating is that orphans cluster. The causes above are all systemic, a template, a window, a deleted taxonomy, so finding one usually means finding a set of them created by the same event. That is exactly the blast radius the severity scale is built around.

Confirming they are connected

Re-crawl and look at the inbound count for the pages you fixed. It should be at least one, and it should come from somewhere sensible: a link from a page nobody visits is technically a pass and practically nothing. The graph view is the faster read here, since a connected node looks obviously different from an isolated one.

Worth repeating after any template or navigation change. This defect is created by structural edits rather than by content edits, so the moment to re-check is a redesign, not a publish.

Questions this check raises

Will adding the page to my XML sitemap fix an orphan?
It may get the URL discovered, but it does not fix the underlying signal. A sitemap says the page exists; internal links say the page matters, and the second is what influences how often it is recrawled and how much authority it receives. A page that appears only in a sitemap is a page your own site does not vouch for.
How do pages become orphaned?
Almost always through a change elsewhere. A category gets restructured and its children lose their only parent, a campaign landing page is published outside the navigation, a product goes out of stock and drops off the listing while its URL stays live, or a filter that used to expose a set of pages is removed.
Do orphan pages hurt the rest of the site?
Not directly, but they waste whatever authority they hold and they usually indicate a structural problem that affects more than the orphan itself. The fix is to repair the link that should exist rather than to link to the page from an arbitrary place, because an artificial link solves the crawl path without solving the reason it was missing.