Page with no outgoing internal links
What is this issue?
This is advice, not a defect. It reports a page that links to no other page of your site — a dead end.
A reader who lands on it from search has two ways to leave: the back button, or closing the tab. A crawler that lands on it learns nothing about the rest of the site from it.
For a page to pass this check:
- It contains at least one link to another page of the same site.
Example: a landing page built in a page builder with no header, no footer and a single "Buy now" button pointing at an external checkout. It is a fine page for a campaign, and a dead end for anyone who arrives on it from anywhere else.
A link to the page itself does not count. A logo linking to the current page, a breadcrumb ending on it, or an in-page anchor goes nowhere new.
External links do not count either. This check is about how your own pages connect.
It is the mirror of an orphan page. An orphan (#11) is a page nothing links TO; a dead end is a page that links to nothing. A page can be both.
Some dead ends are deliberate — an order confirmation, a print view, a campaign page. That is why this is a suggestion: it shows you the pages, and you decide.
Why it matters
Readers have nowhere to go next. A visitor who arrives from search and wants more — a related article, the product category, the home page — has to go back or type an address. Most leave instead.
Crawlers discover sites through links. A search engine that reaches a dead end follows nothing onward from it. On a site with many dead ends, crawling depends on the sitemap and on the few pages that do link out.
Link signals stop there. Whatever standing the page earns from links pointing at it is passed on through its own links. A page with none keeps it to itself instead of sharing it with the rest of the site.
It often reveals a template problem. Many dead ends of the same kind usually mean a template that drops the navigation, or links rendered by JavaScript that the HTML does not contain.
Effect on the health score
None, by design. This is a suggestion, so it carries no severity and deducts nothing.
How to fix it
Restore the site navigation. If the page's template drops the header or footer, put them back. One template fix usually clears every page reported.
Link back to the section it belongs to. A breadcrumb (
Home › Guides › This guide) gives every page at least two ways out and tells readers where they are.Add related links in the body. Two or three links to related pages, written into the content where they are relevant, help readers and crawlers more than a list at the bottom.
Render links in the HTML. If navigation is built by JavaScript after the page loads, make sure the links are present in the HTML the server sends.
<!-- Before: a landing page with one external button -->
<main>
<h1>Spring sale</h1>
<a href="https://checkout.example.net/sale">Buy now</a>
</main>
<!-- After: the same page, with a way back into the site -->
<nav aria-label="Breadcrumb"><a href="/">Home</a> › <a href="/offers">Offers</a></nav>
<main>
<h1>Spring sale</h1>
<a href="https://checkout.example.net/sale">Buy now</a>
<p>See also <a href="/offers">all current offers</a>.</p>
</main>When to leave it alone
- An order or form confirmation page.
- A print-only or embed view of another page.
- A short-lived campaign page meant to be reached from an ad or email.
Examples
Example 1: A landing page with no way back
Reported. The page has no header, no footer, and one link to an external checkout.
<main>
<h1>Spring sale</h1>
<a href="https://checkout.example.net/sale">Buy now</a>
</main>Example 2: A page whose only link is to itself
Reported. The logo links to the current page, which goes nowhere new.
<!-- on /thanks -->
<a href="/thanks"><img src="/logo.svg" alt="Example"></a>
<p>Thanks for your order.</p>Example 3: A page with a breadcrumb
Not reported. Two links lead to other pages of the site.
<nav aria-label="Breadcrumb">
<a href="/">Home</a> › <a href="/guides">Guides</a> › Choosing a kettle
</nav>Example 4: A PDF
Not judged. /brochure.pdf is served as application/pdf; it has no navigation to
add.
How PixyScan detects this
Records every internal link as it walks the site. For each page it fetches, PixyScan stores each link to another page of the same site as an edge from that page.
Waits until the link graph is finished. Links to pages the crawl had not reached yet are held and resolved once the crawl finishes, so a page is judged on all its links, not on the ones whose targets happened to be fetched first.
Finds pages with no edge leading out. A page whose only recorded link points at itself still counts as a dead end. A link to a page the scan skipped (for example beyond your URL allowance) still counts as a way out — the reader can follow it.
Only judges pages that can have links. A page must have been fetched by the crawl, answered 2xx, and been served as HTML (
text/htmlorapplication/xhtml+xml). Redirects, error pages, PDFs and feeds are not judged, and neither is a page whose content type was not recorded.Refuses the question when it cannot be answered. If links were still waiting to be resolved when the check ran, or the scan stopped at its page limit, no page is reported: in both cases a page could look like a dead end only because its links were never recorded.
Caps what it writes. Every dead end is counted; the first 500 by address get a finding each.
Known limitation. Links to addresses your robots.txt disallows, or that match your scan's exclude patterns, are not recorded at all. A page whose only links point at such addresses can be reported here even though it does link out.
What we store
Storage Level
Page Level
Database Table / Prisma Model
InternalLink (internal_links), completed after the crawl from
PendingInternalLink, and Url (urls) for which pages are judged. The finding is
stored on audit_issues.details.
Fields Used
| Field | Type | Description |
|---|---|---|
| internal_links.source_num | Int | The page carrying the link. A page with no row here (other than to itself) is a dead end |
| internal_links.target_num | Int | The linked page. A row whose target is the page itself does not count |
| urls.status | Enum | Only completed pages — fetched and read — are judged |
| urls.status_code | Int | Only 200–299 is judged |
| urls.content_type | String | Only HTML (text/html, application/xhtml+xml) is judged; null is not judged |
| pending_internal_links (row count) | Int | Any row means the graph is unfinished and no page is judged |
| scans.max_pages | Int | If the crawl reached it, no page is judged |
Stored Fields on the finding
| Field | Type | Description |
|---|---|---|
| message | String | "/thanks links to no other page of this site" |
| url | String | The page reported |
| recommendation | String | What to add |
| outlinkCount | Int | Always 0 — the number of links to other pages of the site |
Detection Dependencies
- Internal Links — the completed link graph
- HTTP Response — status and Content-Type of each page
- Scan configuration — the page ceiling