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

Related guides