Why a crawler alone will never find them
This trips up experienced people, so it's worth stating plainly. Every crawler works the same way: start at a seed URL, fetch it, extract the links, fetch those, repeat. It's a graph traversal.
An orphan page isn't in the graph. Nothing points at it, so the crawler never reaches it, and it can't appear in a report of pages the crawler reached. Running a crawl and finding no orphans proves nothing — it's structurally guaranteed.
So you bring in URLs from somewhere other than your link graph, then check which of them the crawl never touched.
The three-list method
Build three lists of URLs from three independent sources, then compare them. Everything you need is free.
- Orphans are
(B ∪ C ∪ D) − A. Paste every list into one column, dedupe, then flag anything absent from the crawl. - Screaming Frog does the diff for you: connect the Search Console and GA4 APIs, enable Crawl Linked XML Sitemaps, then run Crawl Analysis and open the Orphan URLs report. Filter out 404s, redirects and parameter variants first — you want live, indexable pages.
- List A — the crawl. Every page reachable by following internal links from your homepage.
- List B — the sitemap. Fetch
/sitemap.xmland its children. Your CMS generates this from the database, not from the link graph, which is exactly why it's useful. - List C — Search Console. Export the Performance report's Pages tab for 16 months, plus the Indexing → Pages report. URLs Google has actually seen, whatever your links say.
- List D — analytics and backlinks. GA4 landing pages catch URLs that get email and ad traffic; a backlink tool catches URLs other sites link to. Both surface old campaign pages nobody remembers.
How pages get orphaned in the first place
Nobody orphans a page deliberately. It's always a side effect, and the causes are the same across almost every site we audit.
- Campaign landing pages. A Diwali sale page linked only from an ad and a WhatsApp broadcast. The campaign ended, the page stayed.
- Deleted category pages. A collection is removed and its products survive at their own URLs, reachable from nowhere. The single largest source on ecommerce sites.
- Blog pagination. Posts reachable only through
/blog/page/12. Google crawls deep pagination reluctantly, so old posts orphan themselves by ageing. - Template and taxonomy changes. Tag archives get noindexed, then tag links get pulled from the post template, and every post that was only linked from a tag loses its route in.
- Migrations. A replatform maps the top 500 URLs and leaves the tail live, in the sitemap, and unlinked.
- Programmatic pages. Generate 4,000 location pages, link 40 from the footer, and you've orphaned 3,960. See programmatic SEO for the version that works.
Link it, redirect it, or remove it
Every URL on the list takes one of three decisions. Make them page by page — a bulk rule here creates a different mess in six months.
Link it if the page has organic impressions, backlinks, or a genuine job to do. Put the link where a human would plausibly click it: the relevant category page, a related-posts block, a body-copy mention in a related article. A footer link counts for crawling and very little else.
Redirect it if a better version already exists. A 301 to the closest genuine equivalent consolidates the signals. Not to the homepage — Google treats an irrelevant redirect as a soft 404 and passes close to nothing.
Remove it if it's a dead campaign with no links and no impressions. Return a 410 and drop it from the sitemap. A tidy 300-page site beats a 900-page site where 600 pages are archaeological.
Then close the loop and find out why the internal linking failed. Orphans are almost always a template that stopped linking somewhere, and fixing the template stops the next fifty.