Finding them sounds simple: list every published page, then subtract the ones with inbound internal links. The catch is in how you count those links. Below are five methods with exact steps, ordered from most reliable to merely corroborating — plus the one mistake that quietly invalidates most orphan audits.

The trap that breaks most orphan audits: template links

Before any method, understand what you’re actually measuring. Your header menu, footer, sidebar, and “recent posts” or “related” widgets generate internal links on nearly every page of your site. If your audit counts those, almost nothing looks orphaned — and you’ll conclude you have no problem when you do.

What matters for SEO is in-content (contextual) inbound links: links from inside the body of other posts, placed because the content is genuinely related. A page reachable only through the footer or a recent-posts widget is, for ranking and discovery purposes, still an orphan. Google has repeatedly said it pays more attention to links in the main content than to boilerplate navigation.

So the real question is never “does anything link here?” — it’s “does anything link here from inside its body copy?” Every method below is only as good as its ability to answer that. Keep it in mind as you read each one; I’ll flag exactly where each method can (and can’t) tell the two apart.

Method 1 — Crawler + inlinks report (the most reliable manual method)

A site crawler is the closest you’ll get to a definitive answer by hand. Screaming Frog crawls up to 500 URLs free, which covers most small and mid-size sites; any crawler that reports inlinks with a link-position breakdown works the same way.

Crawl, then count inlinks:

  1. Paste your domain into the bar at the top and run the crawl.
  2. When it finishes, open the Internal tab and sort by the Inlinks column, ascending. Pages at or near 0 in-links are your first candidates.
  3. Click any suspect URL, then open the Inlinks tab in the lower window. That lists every internal link pointing to that page — source URL, anchor text, and, crucially, a Link Position column.

Now separate contextual links from boilerplate. This is the step that makes or breaks the audit. Screaming Frog classifies each inbound link by position — the defaults are Navigation, Header, Aside (sidebars and call-out boxes), Footer, and Content. A page whose only inlinks are Navigation or Footer is still an orphan for ranking purposes, even though its raw inlink count isn’t zero. You want pages with no Content-position inlinks. (If the classifier mislabels your theme — some themes render the menu inside the <body> oddly — you can refine which CSS region counts as content under Config → Content → Content Area.)

Catch the pages the crawl never reached. A crawler only finds pages it can follow a link to. A page that is both unlinked and missing from your navigation may never appear in the crawl at all — so it can’t show up as a zero-inlink row. Screaming Frog solves this with Crawl Analysis plus external sources:

  1. Before crawling, go to Config → Spider → Crawl and tick Crawl Linked XML Sitemaps (point it at your sitemap if it isn’t auto-detected).
  2. On a paid licence, you can also connect Config → API Access → Google Search Console and Google Analytics, enabling “Crawl New URLs Discovered in…” so URLs Google knows about but your crawl didn’t reach get pulled in. On the free tier, skip this and rely on the sitemap source below.
  3. After the crawl, run Crawl Analysis → Start. Then open Reports → Orphan Pages for a combined export. The Source column tells you where each orphan came from — Sitemap, GSC, or GA — i.e. a URL that exists in one of those sources but was never linked to inside the crawl. (On the free tier only the Sitemap source populates; the GSC and GA sources need a licence.)

To pull the full link map for your own spreadsheet, use Bulk Export → Links → All Inlinks; filter the export to Link Position = Content and the in-content link picture falls out cleanly.

This is the most trustworthy manual approach and the core of it is free. The trade-off is setup fiddliness, so it’s worth scheduling quarterly rather than doing weekly.

Method 2 — Sitemap-versus-crawl diff (the manual version, no tool lock-in)

If you’d rather not rely on one crawler’s orphan report — or you’re auditing a platform Screaming Frog handles awkwardly — you can do the same diff by hand. The logic is identical: an orphan is a published URL that no in-content link reaches.

  1. Get the complete published list. Open your XML sitemap (usually /sitemap.xml, or /sitemap_index.xml on WordPress/Yoast/Rank Math, which links out to per-type sitemaps). Copy every URL into column A of a spreadsheet. A CMS export works too — in WordPress, Tools → Export, or a list pulled off the Posts screen — and is the true ground truth if your sitemap excludes anything.
  2. Get the reached-by-content list. From your crawler’s All Inlinks export (Method 1), keep only rows where Link Position = Content, then take the unique list of destination URLs. Put that in column B. This is “every page something links to from inside body copy.”
  3. Diff the two. Use a lookup — in Sheets, =ISNA(MATCH(A2, B:B, 0)) flags column-A URLs that never appear as a content-link destination. Every TRUE is a candidate orphan: published, but with no in-content inbound link.

The reason this beats eyeballing inlink counts is that it’s explicit about both halves of the definition — the full published set and the contextual-only inbound set — so it catches the pages a plain crawl silently skips and ignores the ones propped up only by templates.

Method 3 — Google Search Console signals (free leads, with honest limits)

Search Console has no “orphan pages” report, but two areas give usable leads.

Links → Internal links. In the left menu, open Links, then under Internal links click Top linked pages → MORE for the full list. This ranks your pages by how many internal links Google sees pointing at each. The useful read is the inverse: cross-reference this list against your full published set (Method 2’s column A). Pages that are published but absent from, or at the bottom of, the internal-links list are orphan candidates.

Pages (Indexing) report. URLs flagged “Discovered – currently not indexed” or “Crawled – currently not indexed” are often pages Google found but doesn’t consider important enough to index — and weak or missing internal linking is one of the most common reasons.

Treat both as leads, not verdicts, for three honest reasons:

  • GSC’s internal-link counts include template links — it does not separate a contextual body link from a footer link, so a page propped up only by your menu can still look “linked.”
  • The data is sampled and lagged by days, and very new or low-traffic pages may not appear at all.
  • It reflects Google’s view of your site, not a complete in-content link graph.

So GSC is a fast, free way to surface candidates — then confirm each one with Method 1 or 2.

Method 4 — Analytics (a corroborating signal, never proof)

In Google Analytics 4 (or any analytics tool), a page that receives almost no internal-referral traffic behaves like an orphan. To approximate it in GA4:

  1. Open Reports → Engagement → Pages and screens to confirm the page gets traffic at all.
  2. To check how people arrive, build an exploration: Explore → Free form, dimension Page referrer (or Landing page combined with session source), metric Sessions. A page that almost never appears as a destination of an on-site Page referrer is getting little to no internal navigation.

Be careful with this one. A page might receive internal clicks only from a footer link — which still leaves it an SEO orphan — or might legitimately get most of its visits from search or social. Analytics tells you how people move, not how your content is linked. Use it to corroborate a page you already suspect from Method 1 or 2; never use it to prove or rule out an orphan on its own.

Method 5 — WordPress SEO and internal-link plugins (lowest friction, biggest caveat)

If your site runs on WordPress, the category to look at is SEO suites and dedicated internal-linking plugins — tools that surface orphan or inbound-link data right in the dashboard, no crawler required. This is the lowest-friction option for non-technical owners, and the right answer if you want this checked continuously rather than once a quarter.

The caveat is the same as everywhere else, only easier to overlook: many of these plugins count template links when they tally inbound links. A plugin that reports “0 orphans” may simply be crediting your footer, menu, and related-posts widget. Before you trust any tool’s orphan count, verify what it measures — specifically, whether it isolates in-content links from site-wide boilerplate. If the documentation doesn’t say, assume it counts everything.

A tool that measures contextual inbound links is the one worth keeping. That’s the gap I built Relinka to fill: it scans your posts, counts only in-content inbound links, and flags true orphans automatically — alongside a 0–100 internal-link health score for the whole site. It runs entirely on your server, with no account and no API key, so nothing about your content leaves your site.

Which method should you use?

Method Free? Reliable? Effort
1. Crawler + inlinks (Link Position) Yes (≤500 URLs) High — sees content vs template links Medium — setup, then quarterly
2. Sitemap-vs-crawl diff Yes High — explicit about both halves Medium-high — spreadsheet work
3. Search Console Yes Medium — leads only, counts template links Low
4. Analytics (GA4) Yes Low — corroborating signal only Low-medium
5. WP SEO / link plugin Often (free tiers) Varies — many count template links Very low — continuous

A practical sequence: use Method 3 (GSC) for a fast free shortlist, confirm the suspects with Method 1 or 2, and put Method 5 in place if you want the check to run continuously instead of by hand.

FAQ

Are pages in the sitemap but not internally linked always orphans?

Effectively, yes — that’s the textbook definition of an orphan, and it’s exactly what Screaming Frog’s Sitemap orphan source flags. The one nuance: a page reachable through your navigation menu is technically findable, but if nothing links it from body content, it still misses the contextual link equity that helps it rank, so most SEO audits treat it as an orphan to fix.

Can Google Search Console find orphan pages directly?

Not directly — there’s no orphan report. Its Links → Internal links list and the “Crawled/Discovered – currently not indexed” statuses in the Pages report surface strong candidates, but GSC counts template links and its data lags, so always confirm with a crawler or a sitemap diff.

Do I need the paid version of Screaming Frog?

Not for most small sites. The free SEO Spider crawls up to 500 URLs and includes the Inlinks tab, Link Position column, Crawl Analysis, and the Orphan Pages report — with orphans sourced from your XML sitemap. A paid licence is what unlocks crawling above 500 URLs, scheduling crawls, and pulling orphan sources from the Google Search Console and Analytics APIs.

How do I tell a real orphan from a page that just has few links?

Look at where the inbound links sit, not how many there are. In Screaming Frog, filter the Inlinks tab by the Link Position column: if a page has zero Content-position inlinks, it’s a true orphan even if its raw count isn’t zero, because every remaining link is navigation, sidebar, or footer boilerplate.

From finding to fixing

Whichever method you use, the output is the same: a shortlist of pages with no real contextual inbound links. Finding them is only half the job. The next step is to weave each one back into your site with a few genuinely relevant links from related posts — done well, it’s some of the highest-leverage on-page SEO you can do without writing anything new. Here’s the full walkthrough on how to fix your orphan pages with relevant links. And while you have the crawl open, it’s the natural moment to check for broken internal links while you’re at it — the same reports that reveal orphans also expose internal links that have quietly rotted into 404s after slug changes or deletions.


Run this audit automatically

Doing this by hand works, but it is tedious to repeat. Relinka is a free, open-source WordPress plugin that runs exactly this audit on your own site: a 0–100 internal-link health score, an orphan-page finder, a broken-link finder, and relevant link suggestions — each with a one-sentence reason and an anchor taken from your own text, applied or undone in one click. It runs entirely on your server — no account, no API key, nothing leaves your site.

Get Relinka — free on WordPress.org

Disclosure: I’m the developer of Relinka. The method above works on its own — sharing it either way.