{"ok":true,"kind":"crawlcheck-rulebook","v":1,"generated_at":"2026-10-07T17:46:23.499Z","score_version":28,"schema":"https://crawlcheck.io/schemas/rulebook.json","counts":{"rules":77,"by_kind":{"scan":52,"answer_correlation":5,"capability_mismatch":6,"self_audit":12,"mcp_server":2},"by_family":{"site":8,"headers":4,"mostly_code":3,"machine_files":11,"robots":13,"delivery":8,"jsonld":3,"nap":2,"answers":5,"capabilities":6,"self_audit":12,"mcp":1,"watch":1},"revised":7,"scored":48},"scans_counted":3137,"severity_scale":[{"level":"info"},{"level":"low"},{"level":"medium"},{"level":"high"},{"level":"critical"}],"method":{"revisions":"A rule that changes what it reports gets a new revision; a record keeps the revision that decided it, and a replay uses that revision, never today's.","share":"Share of counted scans that carried the code at least once, the same numbers /data publishes. Self-scans and opted-out sites are never counted.","grade":"Each finding has a level from info to critical. Open findings at medium and above lower the letter grade; fix them first."},"rules":[{"code":"BROKEN_INTERNAL_LINK","kind":"scan","family":{"id":"site","label":"Site, hosts and page"},"title":"Links on this site point at pages that do not answer","meaning":"A link on this site was followed and the target answered 4xx or 5xx. A crawler spends budget on every one of these and learns nothing; a reader following one gets an error page. The usual causes are a route renamed without updating the links to it, and a nav or footer that renders links to authenticated-only routes for everyone — those answer 404 when signed out, which is what a crawler always is. Only 404 and 410 count here. A link answering 401, 403 or 429 means something declined to answer this scanner — bot protection, a login wall, a rate limit — which is a fact about the request, not about the link, so those are counted and never reported as broken. Links are sampled rather than exhaustively crawled, so this is a floor and not a full link audit.","severity":{"level":"medium"},"scored":true,"measured_on":"every scan","revision":{"current":1,"revised_at":null},"fix":{"advice":"Fix or remove the internal links that return 404 so crawlers and visitors are not sent to dead pages.","effort":"content","endpoint":null},"share_of_scans":{"pct":3,"scans":94,"of_scans":3137,"basis":"share of counted scans that carried it; the same numbers /data publishes"},"links":{"self":"https://crawlcheck.io/rules#BROKEN_INTERNAL_LINK","api":"https://crawlcheck.io/api/rules?code=BROKEN_INTERNAL_LINK","glossary":["https://crawlcheck.io/glossary/broken-link","https://crawlcheck.io/glossary/internal-link","https://crawlcheck.io/glossary/dead-anchor"],"workflow":null,"lineage":"https://crawlcheck.io/docs/lineage-coverage","explain_template":"https://crawlcheck.io/api/explain?id={report_id}&code=BROKEN_INTERNAL_LINK"}}],"filter":{"code":"BROKEN_INTERNAL_LINK"}}