SvelteKit sites often mix prerendered pages, server-rendered routes, endpoints, and client navigation. That flexibility is useful, but it also means a route can fail in more than one layer. A QA checklist should make those layers visible.
SvelteKit route inventory starter
A simple file-based route inventory can catch missing pages before a deeper crawl.
import { readdirSync, statSync } from "node:fs";
import { join } from "node:path";
function routeFiles(dir, prefix = "") {
return readdirSync(dir).flatMap((name) => {
const full = join(dir, name);
const next = join(prefix, name);
if (statSync(full).isDirectory()) return routeFiles(full, next);
return name.startsWith("+page.") ? ["/" + prefix.replace(/\\/g, "/")] : [];
});
}
console.log(routeFiles("src/routes").sort());SvelteKit-Relevant Workflow
Checklist
- crawl prerendered public routes and confirm canonical output
- test dynamic routes with missing or retired slugs
- watch for load-function errors that render partial pages
- confirm old migration URLs redirect or return clean 404s
- run a browser pass for client navigation and authenticated surfaces
Why SvelteKit needs both checks
A static pass is fast and useful for public route coverage. A browser pass catches the failures that only appear after hydration, navigation, or data loading.
That split mirrors the broader rule for modern frameworks: use the simplest crawler that can see the failure mode you care about.