⚠️ DEV TOOL — This website intentionally contains SEO issues for testing. Not for public use.Issues Index →

Orphan Page Audit — Test Matrix

6 Intentional Issues

Seven fixtures for exercising an orphan-page detector: six URLs that should be reported (each unreachable for a different reason) and one properly linked control that should not. The orphan URLs below are printed as text, never linked — linking them would destroy the fixture.

What counts as an orphan here

A page is orphaned when it exists and returns 200, but no crawlable <a href> on any fetchable, indexable page of the site points to it. Being present in sitemap.xml does not cure the problem: a sitemap entry declares a URL, it does not give the page internal link equity or a finite click depth.

Expected totals for this site: 6 orphans reported, /orphan-control-linked left clean.

/sitemap.xml and /robots.txt are generated per request from the Host header, so every <loc> is on the same origin you are crawling. They used to be static files pinned to https://example.com, which made every sitemap entry look cross-origin and silently reduced the sitemap set to zero — orphan detection could never fire.

URLExpected verdictIn sitemapInbound links
/orphan-simpleORPHANyesnone
/orphan-in-sitemapORPHANyesnone
/orphan-not-in-sitemapORPHANnonone
/orphan-linked-from-noindexEFFECTIVE ORPHANyes1, from /noindex-page
/orphan-linked-from-blockedEFFECTIVE ORPHANyes1, from /private/blocked-page (Disallow: /private/)
/orphan-js-only-linkEFFECTIVE ORPHANyes0 anchors; one button onClick on this page
/orphan-control-linkedNOT AN ORPHANyes1, from this page (a real anchor)

What each fixture catches

/orphan-simple
The simplest possible orphan — 200, indexable, in the sitemap, no inbound links, no canonical to confuse URL keying. If a detector misses this one, the fault is in the detector.
/orphan-in-sitemap
Same as above but with a self-referencing canonical, so it also checks that canonical handling does not suppress the finding.
/orphan-not-in-sitemap
Invisible to both crawling and sitemap diffing. Needs a URL source outside the site graph — route manifest, server logs, Search Console.
/orphan-linked-from-noindex
Counting raw anchors clears it; counting anchors on indexable pages flags it. Tests which definition your script implements.
/orphan-linked-from-blocked
Tests robots.txt compliance. A script that reads files off disk sees the link; a compliant crawler never fetches the source page.
/orphan-js-only-link
Tests that only href attributes count. A regex over response bodies finds the path string in the JS bundle and wrongly clears it.
/orphan-control-linked
False-positive check. Reporting this URL as an orphan means the detector is over-flagging.

The two non-anchor navigation paths

The button below navigates with router.push() from an onClick handler. View source and you will find no href for its destination — it is a button, not a link, so it must not count as link discovery. Beside it is the control, wired with an ordinary anchor.

Real anchor to the control →

Keeping these fixtures valid

  • Never add the orphan URLs to the navbar, the footer, the homepage or the issues index.
  • Keep /orphan-not-in-sitemap out of sitemap.xml.
  • Keep the sole inbound links to the noindex and robots-blocked fixtures on their current source pages only.
  • The orphan pages link outward to this hub. Outbound links do not affect orphan status — only inbound ones do.