{"ok":true,"kind":"crawlcheck-rulebook","v":1,"generated_at":"2026-10-07T17:45:10.037Z","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":"STALE_CACHE_SERVED","kind":"scan","family":{"id":"headers","label":"Headers"},"title":"Visitors and crawlers are being served an old copy of this page","meaning":"The page handed to us carried a cache age older than an hour. The detail says whether the copy still matches what the origin produces now: if it matches, nothing is broken today; if it differs, an edit is already waiting behind the cache. It matters the moment you change something: an edit, a new price, a corrected phone number stays invisible to every visitor and every crawler for about that long, and nothing in your dashboard says so.","severity":{"level":"low"},"scored":true,"measured_on":"full scans only (the daily watch does not measure it)","revision":{"current":2,"revised_at":"2026-09-30"},"fix":{"advice":"Lower the cache lifetime on HTML (an hour or less), or purge the edge and origin caches after every publish so crawlers see the current copy.","effort":"config","endpoint":"https://crawlcheck.io/api/fix/cache?domain={domain}"},"share_of_scans":{"pct":17.5,"scans":549,"of_scans":3137,"basis":"share of counted scans that carried it; the same numbers /data publishes"},"links":{"self":"https://crawlcheck.io/rules#STALE_CACHE_SERVED","api":"https://crawlcheck.io/api/rules?code=STALE_CACHE_SERVED","glossary":["https://crawlcheck.io/glossary/stale-response","https://crawlcheck.io/glossary/edge-cache","https://crawlcheck.io/glossary/age-header"],"workflow":"https://crawlcheck.io/workflow/STALE_CACHE_SERVED","lineage":"https://crawlcheck.io/docs/lineage-coverage","explain_template":"https://crawlcheck.io/api/explain?id={report_id}&code=STALE_CACHE_SERVED"}}],"filter":{"code":"STALE_CACHE_SERVED"}}