An SPA rendering failure leaves crawlers an empty page shell where a Singapore site's content loads by JavaScript. Your facts then miss the engines Singapore buyers ask. A single-page app, or SPA, builds its pages in the visitor's browser. Google renders that JavaScript in a separate, later step. Vercel's study of 17 December 2024 found that OpenAI's crawlers and Anthropic's ClaudeBot fetch JavaScript files without running them. The fix serves the full page content in the HTML from the server.
Rendering Failures Show Up as a Site Visitors See and Crawlers Miss
On a Singapore site, an SPA rendering failure shows as a site that looks complete in a browser while its raw HTML holds little more than a script tag and an empty container, so crawlers that skip JavaScript find no text, links or facts to index or cite. The gap shows only when you compare the page source with the rendered page.
| Symptom | Where you see it | Likely cause to test | Fix | Where it gets fixed |
|---|---|---|---|---|
| The page source holds no body text | View source, or a Screaming Frog crawl with JavaScript rendering off | Content built in the browser by JavaScript | Server-side rendering, static rendering or hydration | Application framework and hosting |
| AI chats describe your business from other sites, never your own | Tested prompts in ChatGPT, Claude and Perplexity | AI crawlers that skip JavaScript read an empty shell | Serve core content in the initial HTML | Application framework |
| Routes share one title and description | Search results and a crawl of page titles | Titles and meta tags set only by JavaScript, or not set | Render title, description and canonical tag per route in the HTML | Route templates |
| Missing pages return a 200 status | URL Inspection in Search Console, soft 404 reports | Client-side routing serves the app for each URL | Redirect to a URL that returns 404, or add noindex by JavaScript to error views | Router and server |
| Internal pages go undiscovered | Search Console page indexing report and a crawl | Links built as click handlers or fragment URLs, not a elements with href | Use a elements with href and History API URLs | Navigation components |
Symptoms, likely causes and fixes for SPA SEO rendering failures on a Singapore site.
SPA rendering failures sit in a group of technical faults that stop the right page being read, and responsive template heading failures start in the same place: the template your developers reuse on each page. Migration redirect failures follow a move to a JavaScript framework when old URLs go unmapped, keyword cannibalisation splits rankings between pages, and the web design and development guide covers build choices before launch.
Why is Google not indexing my single-page app?
Google indexes a single-page app only in part when the content, titles or links exist only after JavaScript runs and the render step fails, times out or meets routes returning a 200 status for missing pages. URL Inspection in Search Console shows the rendered HTML Google received for a page.
Rendering Fails Because an SPA Sends Two Readers Two Different Pages
SPA rendering failures form because a single-page app sends two pages: an empty shell in the HTML response and a full page only after JavaScript runs, so each crawler sees whichever version its own rules reach. Google processes JavaScript pages in three phases: crawling, rendering and indexing. Google states that a page waits in a render queue for a few seconds, and that the wait runs longer in some cases.
AI crawlers read the first version only. Vercel's network study of 17 December 2024 found that OpenAI's crawlers and Anthropic's ClaudeBot fetch JavaScript files but do not execute them, so they do not read content rendered in the browser. Gemini uses Googlebot's infrastructure and renders JavaScript.
Sources: Google Search Central, October 2026, and Vercel, December 2024
An SPA that ships an empty shell removes your own site from the sources these AI crawlers read, so the AI chats describe your business from directories, reviews and other sites. Aemorph's EAV Exhaustion Methodology counts each fact slot your site fills; an empty shell fills not one of them for those crawlers.
Do AI crawlers read JavaScript content?
Vercel's December 2024 tests found that OpenAI's crawlers, Anthropic's ClaudeBot and PerplexityBot requested pages without executing their JavaScript, while Gemini rendered it through Googlebot and AppleBot through a browser-based crawler. Content that appears only after JavaScript runs stays unread by crawlers that skip JavaScript.
Singapore Buyers Reach Your App Through Google and AI Crawlers That Render Differently
Singapore buyers search overwhelmingly on Google, which renders JavaScript later, while the AI chats rely on crawlers that skip JavaScript, so an SPA reaches Google and the AI chats in two different states. Google held 92.16% of search engine market share in Singapore in September 2026 and Bing 4.53% (StatCounter).
| Measure | Figure | Market and date | Source |
|---|---|---|---|
| Google search engine market share | 92.16% | Singapore, September 2026 | StatCounter |
| Bing search engine market share | 4.53% | Singapore, September 2026 | StatCounter |
| Internet users | 5.78 million, 98.4% of the population | Singapore, as of October 2025 | DataReportal |
| Surveyed workers using AI tools at work | 73.8% | Singapore, May and June 2025 pulse survey | IMDA |
| AI adoption among non-SMEs | 62.5% | Singapore, 2024 | IMDA |
| AI adoption among SMEs | 14.5%, up from 4.2% in 2023 | Singapore, 2024 | IMDA |
Sources: StatCounter, September 2026 and others
Singapore organisations often commission apps and portals through a tendered vendor, and the rendering method is set in the vendor's build. Aemorph's specification states the rendering requirement per template, so the vendor builds server-rendered HTML from the start of the next release.
The Fix Serves Each Route's Full Page From the Server
Fixing an SPA rendering failure on a Singapore site serves each route's content, title, description, canonical tag and links in the initial HTML through server-side rendering, static rendering or hydration, so crawlers read the full page without JavaScript. Google recommends those three approaches and describes dynamic rendering, serving crawlers a separate pre-rendered version, as a workaround and not a recommended solution:
- Compares the raw HTML with the rendered page for each template, with a Screaming Frog crawl run twice, JavaScript rendering off and on.
- Lists each fact, link and tag that appears only in the rendered version.
- Specifies server-side rendering, static rendering or hydration for each affected template, chosen to fit your framework and hosting.
- Moves titles, meta descriptions, canonical tags and robots tags into the server-rendered HTML for each route, and keeps noindex out of the initial HTML of a page you want indexed.
- Replaces click-handler and fragment links with a elements that carry an href, and fragment URLs with History API paths.
- Returns a true 404 status for missing routes, or applies noindex to error views, so empty routes stop reaching the index.
- Verifies the result with URL Inspection in Search Console, a repeat crawl with JavaScript off and tested prompts in the AI chats.
Aemorph specifies the rendering change, your developers or IT vendor implement it, and Aemorph verifies it once live.
Is dynamic rendering still a good fix for SPA SEO?
Dynamic rendering is not Google's recommended fix any more: Google describes it as a workaround with extra complexity and resource demands, and recommends server-side rendering, static rendering or hydration. Sites still running dynamic rendering keep it working while the move to server rendering is planned.
Each New Route Ships Empty Until the Rendering Method Changes
An SPA rendering failure covers each route the app serves, so each new page your Singapore team or IT vendor adds ships to AI crawlers as an empty shell until the rendering method changes. Aemorph checks rendering on each new template and each framework upgrade.
| Rendering state | What crawlers receive | What it costs you | Next step | What triggers a recheck |
|---|---|---|---|---|
| Client-side rendering only | An empty shell; Google renders later | AI crawlers read nothing from your site | Move core templates to server rendering | A new route or template |
| Server-rendered shell, content by JavaScript | Navigation and footer, no body content | Pages index thin and AI answers miss your facts | Render the body content on the server | A content model change |
| Server rendering with JavaScript-only meta tags | Content, but shared or missing titles and canonical tags | Duplicate titles and the wrong canonical URL | Render meta tags per route in the HTML | A routing or SEO plugin change |
| Full server or static rendering | The complete page in the first response | Crawlers read the same page visitors see | Keep the two-crawl comparison in each release | A framework upgrade or a new hosting setup |
Cost and recheck point by rendering state, as illustrative scenarios.
Aemorph sets no fixed recheck interval. Your first working day with Aemorph is the first check date, and pages are then assigned for update in order of importance: bottom-of-funnel, middle-of-funnel, then top-of-funnel. For a Singapore app, that puts service, fees, enquiry and contact routes first.
Does an SPA need to be rebuilt to fix SEO?
The rendering fix depends on the app's framework, architecture and hosting: the major frameworks, including Next.js for React and Nuxt for Vue, support server-side rendering, static rendering or hydration, and on those frameworks the fix changes how each route renders, starting with your service and fees templates. Aemorph checks the framework, architecture and hosting first, because they decide whether a rendering change is enough or a larger rebuild is needed.
Disclosures That Load by JavaScript Drop Out of AI Answers
A disclosure that loads only after JavaScript runs is missing from what most AI crawlers read, so an AI answer about your product draws on a page without its conditions, fees or eligibility rules for Singapore buyers. The page a visitor sees is complete; the version the crawler read is not.
Where a page carries regulated statements, such as a financial product's fees and risks under MAS guidelines, a licensed healthcare provider's statements under the Healthcare Services (Advertisement) Regulations or a licence number, the statement belongs in the server-rendered HTML beside the claim it qualifies. The Consumer Protection (Fair Trading) Act applies to misleading claims made to consumers, so a qualification that drops out of the version an AI crawler read is a gap to close. Aemorph checks the raw HTML of each regulated page against your verified record, the one approved set of facts about your business, after each rendering change. Aemorph's guide to the ASAS advertising code sets out the advertising standards, and a question about a specific obligation is one for a qualified Singapore legal adviser.
General guidance, not legal advice.
Does content loaded by JavaScript count for compliance?
Content loaded by JavaScript appears to visitors whose browsers run it, but most AI crawlers miss it, so a disclosure that loads only by JavaScript leaves AI answers about your Singapore offer without it. Regulated text sits most safely in the server-rendered HTML beside the claim it qualifies.
Technical SEO Makes Your App Readable to Google and the AI Crawlers
Aemorph's technical SEO for Singapore sites compares what each crawler receives with what visitors see, specifies the rendering change per template and verifies it once live, so Google and the AI crawlers read the facts your buyers read. The audit records your robots.txt rules for GPTBot, ClaudeBot, PerplexityBot and Google-Extended alongside the rendering check, and the free Money on the Table audit puts a number on the revenue lost at your current visibility in search.
The Showstopper Sensor (Sprint 1), a 30-day showstopper-answer sprint for ChatGPT, Claude, Gemini and Perplexity, publishes your approved answers to your showstopper questions, the buyer questions that stop a purchase when AI answers them badly, on your site. An answer that loads by JavaScript stays unread by the AI crawlers that skip it, so Sprint 1 answers belong on pages that serve their content in the HTML.
Who fixes SPA rendering failures, Aemorph or your developers?
Aemorph specifies the fix and your developers or IT vendor implement it: Aemorph compares what each crawler receives, specifies the rendering method and meta tags per template, and verifies the raw HTML once live. Your team and your IT vendor keep control of the framework, hosting and release schedule.
Begin with a free strategic conversation, which includes prompting the AI chats for your current brand answers about your Singapore business. Technical SEO fixes are scoped from the audit findings and set out in your quote; starting points are on the pricing page.