JavaScript SEO Checklist
For sites built with client-side frameworks or heavy scripting. Google can render JavaScript, but rendering is queued and can fail silently, and many other crawlers do not run it. Use this list when pages look fine in a browser but index poorly.
0% 0 of 11 done
- critical
Why and how
- Why it matters
- Content that exists only after rendering depends on Google's render queue and may be delayed or missed.
- How to check or fix it
- Use View Source versus the URL Inspection live test's rendered HTML. In Screaming Frog, crawl once in Text Only and once in JavaScript mode.
- critical
Why and how
- Why it matters
- Server-side rendering or static generation makes indexing faster and works for crawlers that skip JavaScript.
- How to check or fix it
- Run curl on the URL and search the output for your main heading and body text. Move missing pieces to server rendering.
- critical
Why and how
- Why it matters
- Links built from click handlers or buttons are not reliably followed, so deep pages go undiscovered.
- How to check or fix it
- Inspect menu and pagination elements in DevTools. Each should be an <a href="/path"> element, not a div with onclick.
- critical
Why and how
- Why it matters
- Blocked resources stop Google from rendering the page as users see it.
- How to check or fix it
- Check the page resources list in URL Inspection for blocked files, then remove the matching Disallow lines.
- important
Why and how
- Why it matters
- Google generally ignores content after a # in a URL, so fragment-based routes collapse into one page.
- How to check or fix it
- Confirm each view has a path like /products/blue-widget and loads directly when pasted into a new tab.
- important
Why and how
- Why it matters
- Single-page apps often return 200 for everything, which creates soft 404s in the index.
- How to check or fix it
- Request a nonsense URL and check the status in the DevTools Network panel. Return a true 404 from the server or add noindex to the error view.
- important
Why and how
- Why it matters
- Google may skip rendering a page that already says noindex, so the script change never takes effect.
- How to check or fix it
- Check the robots meta tag in raw source. Output the final intended directive server-side.
- important
Why and how
- Why it matters
- Shared head tags across routes cause duplicate titles and canonical confusion.
- How to check or fix it
- Crawl in JavaScript mode and review the Page Titles and Canonicals tabs for duplicates.
- important
Why and how
- Why it matters
- Googlebot does not click, scroll to trigger events or type, so hidden content is never seen.
- How to check or fix it
- Check tabs, accordions and infinite scroll in the rendered HTML. Add paginated URLs as a crawlable fallback.
- nice
Why and how
- Why it matters
- Heavy scripts slow rendering and hurt Interaction to Next Paint.
- How to check or fix it
- Use the Lighthouse Treemap and Coverage tab in DevTools to find unused code. Split bundles by route.
- nice
Why and how
- Why it matters
- Many AI and social crawlers do not execute JavaScript and see only the initial HTML.
- How to check or fix it
- Fetch the page with curl using the user agent of the bot you care about and confirm key content appears.
Checklist complete. Re-run it after your next release or major change, and use the related lists below to keep going.
Progress is saved in this browser only. Nothing is sent to a server.
Common questions
Can Google index JavaScript content?
Yes, Google renders JavaScript with a recent version of Chromium. Rendering happens after crawling and can be delayed, so critical content is safer in the initial HTML.
Is dynamic rendering still recommended?
Google describes dynamic rendering as a workaround, not a long-term solution. Server-side rendering or static generation is the recommended approach.