Skip to content
Issue docs

Page with no outgoing internal links

Suggestiondead_end_pageIssue 167

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

  1. 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.

  2. 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.

  3. 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.

  4. 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>

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

  1. 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.

  2. 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.

  3. 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.

  4. Only judges pages that can have links. A page must have been fetched by the crawl, answered 2xx, and been served as HTML (text/html or application/xhtml+xml). Redirects, error pages, PDFs and feeds are not judged, and neither is a page whose content type was not recorded.

  5. 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.

  6. 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

Further reading