Guides

SPA SEO Rendering Failures in Australia: Why Your JavaScript App Shows Crawlers an Empty Page

For an Australian business, an SPA rendering failure leaves crawlers an empty page shell where your content loads by JavaScript. Your facts then miss the engines Australian 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, Anthropic's ClaudeBot and PerplexityBot do not render JavaScript. The fix serves the full page content in the HTML from the server.

Book a strategic conversation


Rendering Failures Show Up as a Site Visitors See and Crawlers Miss

On an Australian site, an SPA rendering failure appears 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.

SymptomWhere you see itLikely cause to testFixWhere it gets fixed
The page source holds no body textView source, a Screaming Frog crawl with JavaScript rendering off, or a crawl comparing raw and rendered HTMLContent built in the browser by JavaScriptServer-side rendering, static rendering or hydrationApplication framework and hosting
AI chats describe your business from other sites, never your ownTested prompts in ChatGPT, Claude and PerplexityAI crawlers that skip JavaScript read an empty shellServe core content in the initial HTMLApplication framework
Routes share one title and descriptionSearch results and a crawl of page titlesTitles and meta tags set only by JavaScript, or not setRender title, description and canonical tag per route in the HTMLRoute templates
Missing pages return a 200 statusURL Inspection in Search Console, soft 404 reportsClient-side routing serves the app for each URLRedirect to a URL that returns 404, or add noindex by JavaScript to error viewsRouter and server
Internal pages go undiscoveredSearch Console page indexing report and a crawlLinks built as click handlers or fragment URLs, not a elements with hrefUse a elements with href and History API URLsNavigation components

Symptoms, likely causes and fixes for SPA SEO rendering failures on an Australian 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 partly when the content, titles or links exist only after JavaScript runs and the render step fails, times out or meets routes that return 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 start because a single-page app sends two different pages: an empty shell in the HTML response and a full page only after JavaScript runs, so each crawler sees whichever version its 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?

In Vercel's tests of December 2024, OpenAI's crawlers, Anthropic's ClaudeBot and PerplexityBot fetched pages but did not run 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.


Australian Buyers Reach Your App Through Google, Bing and AI Crawlers That Render Differently

Australian buyers search mainly on Google, which renders JavaScript later, and on Bing, which carries close to a tenth of searches, while the AI chats rely on crawlers that skip JavaScript, so an SPA reaches each engine in a different state. Google held 87.9% of search engine market share in Australia in September 2026 and Bing 9.17% (StatCounter).

MeasureFigureMarket and dateSource
Google search engine market share87.9%Australia, September 2026StatCounter
Bing search engine market share9.17%Australia, September 2026StatCounter
Google AI OverviewsRolled out Australia-wideAustralia, 29 October 2024Google Australia
Google AI ModeRollout began, in EnglishAustralia, 8 October 2025Google Australia
Internet users26.2 million, 97.1% of the populationAustralia, as of October 2025DataReportal
Adults who recently used a generative AI tool45.6%Australia, survey of more than 5,500 adults, published November 2025ADM+S

Sources: StatCounter, September 2026 and others

An Australian SPA that relies on client-side rendering reaches Google after the render queue and the major AI crawlers as an empty shell. Aemorph tests the raw HTML, Google's rendered HTML and Bing's view for Australian clients before specifying the fix.


The Fix Serves Each Route's Full Page From the Server

Fixing an SPA rendering failure on an Australian 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 running 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:

  1. Compares the raw HTML with the rendered page for each template, with a Screaming Frog crawl run twice, JavaScript rendering off and on.
  2. Lists each fact, link and tag that appears only in the rendered version.
  3. Specifies server-side rendering, static rendering or hydration for each affected template, chosen to fit your framework and hosting.
  4. 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.
  5. Replaces click-handler and fragment links with a elements that carry an href, and fragment URLs with History API paths.
  6. Returns a true 404 status for missing routes, or applies noindex to error views, so empty routes stop reaching the index.
  7. 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 no longer the fix Google recommends: Google calls it a workaround that adds complexity and resource demands, and recommends server-side rendering, static rendering or hydration instead. 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 Australian team 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 stateWhat crawlers receiveWhat it costs youNext stepWhat triggers a recheck
Client-side rendering onlyAn empty shell; Google renders laterAI crawlers read nothing from your siteMove core templates to server renderingA new route or template
Server-rendered shell, content by JavaScriptNavigation and footer, no body contentPages index thin and AI answers miss your factsRender the body content on the serverA content model change
Server rendering with JavaScript-only meta tagsContent, but shared or missing titles and canonical tagsDuplicate titles and the wrong canonical URLRender meta tags per route in the HTMLA routing or SEO plugin change
Full server or static renderingThe complete page in the first responseCrawlers read the same page visitors seeKeep the two-crawl comparison in each releaseA 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 an Australian app, that puts service, pricing, booking 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 pricing 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 Australian 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 ASIC's rules, a health service's conditions under Ahpra's advertising guidelines or a licence number, the statement belongs in the server-rendered HTML beside the claim it qualifies. Section 18 of the Australian Consumer Law applies to the overall impression a claim leaves, 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 ACCC and the Australian Consumer Law sets out the rules, and a question about a specific obligation is one for a qualified Australian 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 Australian 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 Australian sites compares what each crawler receives with what visitors see, specifies the rendering change per template and verifies it once live, so Google, Bing 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 checks the raw HTML once live in Australian business hours. Your team keeps control of the framework, hosting and release schedule.

Aemorph is headquartered in Singapore and has no office in Australia. Australian clients are served remotely in Australian business hours, and prices are quoted in Australian dollars. Start with a free strategic conversation, which includes prompting the AI chats for your current brand answers. Technical SEO fixes are scoped from the audit findings and set out in your quote; starting points are on the pricing page.

Book a strategic conversation

See technical SEO

THE STRATEGIC CONVERSATION

Start with a free strategic conversation.

Every Aemorph engagement starts with a free strategic conversation. It is the fastest way to see whether Aemorph fits your business before you commit budget.

Book a strategic conversation →
STARTING POINT
Free
You talk through your goals with Aemorph, and Aemorph quotes your engagement after the conversation.