toolkit

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.