Link & image checker · Playbook
Link & image checker — what each check flags, and why
klink’s detection logic is ported from superaudit’s static link cluster. This is the reference for what each finding means and how the threshold is set. Detection matches superaudit; the FAIL/REVIEW mapping is klink’s own (broken → FAIL, everything else → REVIEW).
Broken (→ FAIL)
| Finding | Rule |
|---|---|
| Broken link | Any <a href> (http/https, deduped) whose final status is ≥ 400, or which errors/times out. Redirects are followed to the final status first, so a 301→200 link is not broken. |
| Broken image | Any <img src> (http/https, not data:) whose final status is ≥ 400. |
A dead link or image is a real defect, so any broken target fails the page — not a percentage.
Quality / hygiene (→ REVIEW)
| Finding | Rule | Why it matters |
|---|---|---|
| Non-descriptive anchor text | ≥ 10% of links with text match a generic phrase | Screen-reader users navigate by link text; search engines use it to understand the target |
| Image-only link, no alt | Link whose only content is an <img> with no alt/aria-label (text < 3 chars) |
The link has no accessible name |
| Malformed link | javascript:, empty/#-only href, invalid mailto: (no @ / < 5 chars) or tel: (not ^\+?\d{7,}$), unencoded spaces, file:// |
Not crawlable / not accessible / broken navigation |
| Insecure external | External link over http:// |
Mixed-content risk; should be https:// |
target="_blank" no rel="noopener" |
Blank-target link missing noopener |
Reverse tabnabbing — the opened page can script window.opener |
| Nofollow on internal links | Internal link with rel="nofollow" |
Wastes internal PageRank flow within your own site |
| Excessive link count | > 3,000 links (REVIEW) / > 300 (INFO) | Dilutes link equity; may exceed crawl budget |
The 16 generic anchor phrases (case-insensitive, whole-string)
click here · here · read more · learn more · more · link · this · go · see more ·
view more · details · info · more info · more details · continue · continue reading
Internal vs external
A link is internal if its resolved host matches the page’s host (relative links are always internal);
external otherwise. tel: / mailto: are neither (excluded from most checks).
Redirects
klink follows redirects to the final status for broken-detection. For the redirect chain itself —
loops, temporary-where-permanent-belongs, hop count, https→http downgrades — pass --abra to run the
abra skill on the redirecting links and fold its verdict in.