All checks
Content & UXmediumdead-link-targetchecked on every page we scan

Dead link target

A primary call-to-action link has no destination — its href is # or empty, and there is no script attribute on it to handle the click.

Why it matters

A primary call-to-action link has no destination — its href is # or empty, and there is no script attribute on it to handle the click. A visitor who does the one thing the page asks them to do stays exactly where they were, which is where sign-ups are lost without ever showing up in your analytics as a failure.

How ShipReady detects it

Six page-readable Content & UX rules. Genuinely per-page: a polished homepage routinely hides a /pricing that still shows `{{plan_name}}` and a /terms governed by the laws of `[Your State]`. Reads only already-fetched HTML. Detection is uniform across all six: match a maintained pattern corpus against the page's READABLE TEXT — markup stripped, scripts stripped, and `<code>`/`<pre>`/`<kbd>`/`<samp>` stripped first — never against raw HTML. A minified bundle contains the very strings these rules look for, and a docs page legitimately displays them inside a code sample; matching source rather than prose would fire on both. Pages the crawler labelled Docs or Content are skipped entirely by the two artifact rules, because quoting an artifact is what those pages are for.

Detection is deterministic. ShipReady reports this only when it observes the condition directly, and prefers to miss a real problem over inventing one. Rule version 1.0.0.

How to fix it

This is the prompt ShipReady puts in your report — written to be pasted straight into Cursor, Claude Code, or whichever assistant built the app.

Your primary call to action has no destination — its href is # or empty, and there is no click handler on the element. A visitor who clicks the main action on the page stays exactly where they were. Point the link at the page it should open (your sign-up route, checkout, or booking page), or if it is meant to trigger something in JavaScript, use a <button> with an onClick handler instead of an anchor — a <button> is the correct element for an action, is keyboard-accessible by default, and cannot be mistaken for a broken link. Then click every primary button on the page yourself and confirm each one goes somewhere.

Frequently asked questions

What does "Dead link target" mean?
A primary call-to-action link has no destination — its href is # or empty, and there is no script attribute on it to handle the click.
How serious is it?
ShipReady rates this medium. Fix soon. Meaningfully weakens a defence or degrades how the site works.
How do I fix it?
Paste the fix prompt on this page into Cursor, Claude Code or your AI editor. It is the same prompt ShipReady puts in your report.
Can I check my own site?
Yes — ShipReady scans up to ten pages of any public site for free and reports this alongside every other check. The free report lists every issue it finds and shows full evidence and a fix prompt for the critical and high-severity ones; medium and low findings are counted and unlock on Pro.

Related checks

Run this check on your site

ShipReady checks this and 193 other things across up to ten pages of your site, with an AI-ready fix for each. Free, no signup.