04 / Indexing
JavaScript indexing is the final test of everything in this course. A page is only useful in search when it is discovered, rendered correctly, and chosen for the index. This lesson shows how to diagnose why JavaScript pages are not indexed and how to confirm what Google actually stored.
It connects the Rendering, JavaScript links, and Dynamic content lessons with the fundamentals in the Indexing lesson.
1. The JavaScript indexing pipeline
| Stage | Question | What can fail |
|---|---|---|
| Discovery | Does Google know the URL exists? | Links only in script, hash routes, missing sitemap |
| Crawl | Is Googlebot allowed to fetch it? | robots.txt, firewall, 5xx errors |
| Render | Does the page produce content? | Blocked resources, script errors, slow APIs |
| Index selection | Is the page chosen for the index? | noindex, canonical to another URL, duplicate or thin rendered content |
| Serving | Does it appear for relevant queries? | Weak content, missing titles, poor internal links |
Diagnose problems in this order. A rendering fix does not help a URL that was never discovered.
2. Confirming indexing in Search Console
- URL InspectionCheck whether the URL is on Google, the user-declared and Google-selected canonical, and the crawl date.
- Test live URLRun a live test and view the rendered HTML and screenshot.
- Check page resourcesReview resources that could not be loaded and JavaScript console messages.
- Review the Page indexing reportLook for patterns in Crawled, currently not indexed and Discovered, currently not indexed.
| Search Console status | Common JavaScript cause |
|---|---|
| Discovered, currently not indexed | URLs known from sitemaps but weakly linked, or crawling limited by server capacity |
| Crawled, currently not indexed | The rendered page was thin, empty, or duplicate |
| Duplicate, Google chose different canonical | Rendered pages look identical because data did not load |
| Soft 404 | Client-side not found views returning HTTP 200 |
| Excluded by noindex tag | A noindex in the raw HTML, even if JavaScript removes it later |
3. When rendering failures look like duplicates
If the API fails during rendering, every product page may render the same empty template. Google then sees hundreds of near-identical pages and picks one canonical, dropping the rest.
A rendering failure reported as duplication
Duplicate, Google chose different canonicalLooks like a canonical problem.
Fixing canonicals would not help. Allowing the API endpoint fixes the rendering and the duplication.
Related: near-duplicate pages and canonical tag issues.
4. Checking indexed content
To confirm that JavaScript content was indexed, search Google for an exact phrase that only exists in the dynamic content, in quotes, combined with site:. If the page appears for the phrase, the rendered content was indexed. This is a quick spot check, not a complete report, because results can be delayed or filtered.
site:example.com "lightweight trail shoe with a rock plate"
5. Speed of indexing
JavaScript pages can take longer to index because links and content are processed after rendering. News sites, large catalogs, and frequently updated pages feel this most. Server-rendered HTML, crawlable links in the raw HTML, accurate XML sitemaps with lastmod, and fast server responses all reduce the delay. See the XML sitemaps lesson.
6. JavaScript and AI answer engines
AI search systems use their own crawlers and indexes. Most fetch raw HTML only, so a client-side rendered page can be indexed by Google while missing from AI answers. If AI visibility matters, confirm that key pages serve full content without JavaScript and that AI crawlers are not blocked. The AI Search course covers this in depth, and the article on technical SEO and AI search explains the connection.
7. Fixing JavaScript indexing problems
| Problem | Recommended fix |
|---|---|
| Content only after render | Move to SSR or SSG for indexable templates |
| Links only after render | Render navigation and pagination as anchors in the raw HTML |
| Blocked resources | Allow JavaScript, CSS, and API paths in robots.txt |
| Soft 404s | Return real 404 status codes from the server |
| Conflicting noindex or canonical | Set correct values in the server response |
| Slow rendering | Reduce bundle size, remove unused scripts, speed up APIs |
Dynamic rendering and prerender services can work as a temporary bridge, but they add a second version of the site to maintain. Server-side rendering or static generation removes the risk for search engines and AI crawlers alike.
8. Auditing JavaScript indexing with SiteAuditLint
- Run raw and rendered crawlsCompare discovered URLs, titles, canonicals, and word counts.
- Flag rendering gapsPages with content or links only after rendering.
- Check indexability signalsReview noindex, canonicals, and status codes in the raw HTML.
- Cross-check Search ConsoleMatch crawl findings with Page indexing statuses.
- Validate after fixesRecrawl, run live URL tests, and monitor indexing over the following weeks.
9. Practical exercise: Diagnose one unindexed page
Pick a JavaScript page that is not indexed and work through the pipeline stage by stage.
JavaScript indexing checklist
0 of 10 tasks completed
Key takeaways
- JavaScript pages must be discovered, crawled, rendered, and selected before they can rank.
- Diagnose in pipeline order, starting with discovery.
- URL Inspection shows Google's rendered HTML and selected canonical.
- Rendering failures often appear as duplicates or thin content.
- Raw HTML signals such as noindex are applied before rendering.
- Server-side rendering is the most reliable fix for search engines and AI crawlers.
Knowledge check
You have completed JavaScript SEO. Next, explore how generative and answer engines crawl and cite content in AI Search.