JavaScript SEO audit checklist
Crawl, render, index, status codes, and visible-body parity for a JavaScript site. Print this. The generic technical SEO checklist is a different job.
Run on the homepage, one hub, one article, and one known 404. If those four disagree, the template is lying.
Do this before you argue about keywords. If curl cannot see the article, rankings are not the problem.
flowchart LR
C["Crawl"] --> R["Render"]
R --> I["Index"]
C --> H["HTTP status"]
Raw HTML (before JavaScript)
- curl or View Source shows the H1 and article body, not an empty #root
- title element is complete (no truncated apostrophes, no placeholder)
- No accidental noindex on production HTML or HTTP headers
- Canonical in the first HTML matches the live URL
HTTP status and routing
- Money URLs return 200 with the real page
- Unknown paths return 404, not a 200 SPA shell
- Trailing-slash policy matches canonicals (no bounce loop)
- Client-only “not found” either redirects to a server 404 or injects noindex
Discovery
- Internal links are <a href> to real paths, not click-only buttons
- Sitemap lists the slashless (or slashful) URLs you actually serve
- robots.txt does not block JS/CSS needed to render if you rely on rendering
Search Console
- URL Inspection: crawled HTML contains the article
- Rendered HTML still contains the article (not a widget only)
- Page indexing report is not full of Soft 404 on real URLs