Orphan pages with no internal links
What Is This Issue
Orphan pages are web pages that have no internal links pointing to them from other pages on your website. This issue checks whether all your indexable pages are linked from at least one other internal page, making them discoverable by search engines and users.
A passing implementation requires:
- Every important page has at least one inbound internal link
- Pages are discoverable through your site’s navigation or content links
- No important pages are only reachable through sitemaps or direct URLs
- Internal linking structure provides clear paths between related content
Example: A newly published blog post that appears in your XML sitemap but isn’t linked from your blog listing page, homepage, or any other page on your site.
Why Is This Important
Orphan pages are important for SEO because they:
- Reduce Crawlability: Search engines may not discover orphan pages during normal crawling
- Weaken Indexability: Pages without internal links may be crawled less frequently or not at all
- Dilute Link Equity: Orphan pages don’t receive internal link authority from other pages
- Create Poor User Experience: Users cannot navigate to these pages through normal site browsing
- Waste Crawl Budget: Search engines may spend crawl budget on sitemap URLs that aren’t properly integrated into the site structure
Orphan pages directly impact your SEO health score by making it harder for search engines to discover, crawl, and understand your content relationships. They may also indicate poor site architecture or content that’s been forgotten.
How XeoPix Detects This
XeoPix performs orphan page detection through the following logical steps:
-
Page Discovery: XeoPix identifies all pages on your site through crawl seeds, sitemap URLs, and successfully fetched internal URLs.
-
Link Extraction: For each page, XeoPix parses the raw HTML and extracts all internal links from
<a href>attributes. -
URL Normalization: XeoPix normalizes all source and target URLs using canonical URL rules (removing fragments, resolving relative URLs, etc.).
-
Inbound Link Counting: XeoPix builds an internal link graph and counts how many unique internal pages link to each target page.
-
Orphan Identification: XeoPix flags pages as orphaned when:
- The inbound internal link count is zero (SUGGESTION)
- The page is only discoverable through sitemaps or seeds, not through internal links
-
Context Tracking: XeoPix also records whether orphan pages:
- Appear in your XML sitemap
- Were discovered through redirect chains
- May have incomplete link data due to crawl constraints
Note: XeoPix analyzes links in raw HTML only and does not execute JavaScript. Links generated only by JavaScript cannot be detected and won’t clear orphan status.
How To Fix
-
Audit your pages: Identify which pages have no inbound internal links using crawl data or site audits.
-
Add contextual links: Include links to orphan pages from relevant content, such as:
- Blog posts related to the topic
- Category or hub pages
- Related product or service pages
- Navigation menus or footer links (for important pages)
-
Update sitemaps: Ensure orphan pages are at least included in your XML sitemap as a discovery fallback.
-
Review site architecture: Check if orphan pages indicate poor site structure that needs reorganization.
-
Link from high-authority pages: Add links from your homepage, main navigation, or top-performing pages to important orphan pages.
-
Use related content modules: Implement “Related Posts” or “Related Products” sections that automatically link to relevant pages.
-
Check after fixes: Re-crawl your site to confirm orphan pages now have inbound internal links.
What We Store
Storage Level
Page Level — This issue is evaluated for each individual page and its internal links.
Database Table / Prisma Model
PageInternalLink
Stored Fields
| Field | Type | Description |
|---|---|---|
| urlId | String | The ID of the page being analyzed |
| targetUrl | String | The internal URL that is linked to |
| statusCode | Int? | HTTP status code of the internal link (if crawled) |
| url | Url | The source URL of the page containing the link |
Detection Dependencies
- The following data sources are required to evaluate this issue:
- HTML Document — The crawler extracts all internal links from the page
- HTTP Response — The crawler may optionally follow links to check their status
- Internal Links — All same-domain links are identified and analyzed for nofollow attributes
Examples
Example 1: Simple Orphan Page
Problematic State (Fails): A blog post exists but has no internal links pointing to it:
- Page
/blog/new-postis in the sitemap - No other page on the site links to
/blog/new-post
Corrected State (Passes): Add internal links to the page:
- Link from the blog listing page:
<a href="/blog/new-post">New Post</a> - Link from related blog posts
- Add to main navigation or footer if important
Example 2: Orphan Page with Sitemap Only
Problematic State (Fails): A product page is only discoverable through the sitemap:
/products/special-itemis in the XML sitemap- No internal links point to this product page
Corrected State (Passes): Integrate the page into the site structure:
- Add to product category page
- Link from homepage featured products section
- Include in related products section on other product pages
Example 3: JavaScript Navigation
Problematic State (Fails): Links are generated only by JavaScript:
<div id="navigation"></div>
<script>
// Links created dynamically
</script>XeoPix cannot detect these links.
Corrected State (Passes): Add fallback HTML links:
<noscript>
<a href="/page1">Page 1</a>
<a href="/page2">Page 2</a>
</noscript>Unit Test
Test File
xeopix-crawling-v2/__tests__/seo-audit-checks/crawlBehaviour/issue-17-no-orphan-all.test.js
Purpose
This unit test validates that the runCrawlBehaviour() function correctly detects orphan pages — crawled pages that have no incoming internal links from other pages on the site.
Tested Function
runCrawlBehaviour() from toggleGroups/crawlBehaviour.js
Issue Information
- Issue Number: 17
- Issue Code:
NO_ORPHAN_ALL - Toggle Group:
crawlBehaviour
Test Scenarios
Positive Test Cases
- Every crawled page has incoming internal links → no orphan page issues reported
Negative Test Cases
- A crawled page has no incoming internal links (
/contactis not linked from any page) →NO_ORPHAN_ALLissue created with the orphan page URL
Boundary Cases
None
Edge Cases
None
Expected Outcome
Pass
A NO_ORPHAN_ALL issue is not reported when every crawled page is referenced by at least one incoming internal link from another page.
Fail
A NO_ORPHAN_ALL issue is reported when a crawled page exists in visitedUrls but has no corresponding entry in the internalLinks map pointing to it.
Validation
- Verifies that comparing
internalLinksagainstvisitedUrlscorrectly identifies orphan pages - Validates issue code and URL in the detected issue payload
- Ensures pages with proper internal linking produce no false positives
Related Production Files
xeopix-crawling-v2/toggleGroups/crawlBehaviour.jsxeopix-crawling-v2/issueCodes.js
Coverage Summary
- 2 test cases (one positive, one negative)
- Tests the core orphan page detection logic
- Validates payload structure (issueCode, details.url)
- Uses mocked API responses for sitemap fetching and data submission
References
- Links and Crawlability — Google Search Central
- Sitemaps Overview — Google Search Central
- Hyperlink Elements — WHATWG