Can AI crawlers read Angular sites?
Client-rendered
AI crawlers see almost nothing by default.
v2 scoring Estimated on the four-pillar score. A default Angular install earns 0/35 for raw-HTML readability; schema depth, llms.txt and AI-crawler rules depend on your setup, so they start at 0. The Fix Kit supplies those three (up to 65 points) but cannot change how Angular renders.
A default Angular application renders entirely in the browser, so AI crawlers receive an empty <app-root> and nothing else.
What is actually happening
Angular bootstraps in the browser and builds the DOM from JavaScript. Without server rendering, the served HTML contains a single <app-root> element and a set of script tags — that is the entire document as far as a non-rendering crawler is concerned. Angular is disproportionately used for applications behind a login, where this does not matter, and the problem usually appears when the public marketing pages were built in the same project.
13 of the major AI crawlers — including GPTBot, OAI-SearchBot, ChatGPT-User — fetch your HTML and parse it without running a JavaScript engine. Anything your page adds after hydration is not part of what they read.
What to do on Angular
- 01Enable Angular SSR. Running `ng add @angular/ssr` configures server rendering for an existing application without a rewrite.
- 02Prerender the routes whose content does not vary per request. Marketing, docs and pricing pages almost always qualify.
- 03Move Meta and Title service calls into route resolvers so they execute during server rendering rather than after the app boots.
- 04Verify with curl rather than the browser. The browser runs the JavaScript that the crawler skips, so it can only ever tell you the good news.
- 05If the public pages live in the same project as the application, consider splitting them out. A static marketing site alongside an Angular app is simpler than making the whole app render twice.
What trips people up
- Angular SSR still requires each route to be renderable without client-side state. A route that depends on something only available in the browser fails its server render and falls back to the shell, silently.
- TransferState avoids a duplicate fetch after hydration but does nothing for the initial HTML if SSR is off — it is a performance feature, not a visibility one.
- Third-party libraries that reference document or window at import time break server rendering entirely, which is the most common reason an SSR migration stalls.
Where the files go on Angular
Put llms.txt and robots.txt in src/assets or the configured public folder so they are emitted to the build root.
Stop guessing where your site sits
The baseline above is the platform. The free scan measures your actual site: how many words a crawler reads, whether your pages come back as empty shells, and which crawlers your robots.txt lets in.
Scan my Angular siteFurther reading
- How to Make React Apps Crawlable for AI Search: SSR, Prerendering and Dynamic Rendering
Google can render React; ChatGPT, Claude and Perplexity crawlers can't. Code for Vite SSR, Next.js and Astro prerendering, dynamic rendering, and a curl check.
- What GPTBot Actually Sees When Your Site Relies on Client-Side JavaScript
AI crawlers like GPTBot and OAI-SearchBot fetch raw HTML without executing client-side JS. Here is what they actually extract from SPAs.
- Why AI Search Engines Can’t Read Client-Side Rendered (CSR) Sites
Most AI crawlers fetch raw HTML and never run your JavaScript. Here's what they actually see on a client-rendered site, how to test it, and how to fix it.
- What is Generative Engine Optimization (GEO)? The Complete 2026 Guide
How ChatGPT Search, Perplexity and Claude find, read and cite pages, why that differs from Googlebot, and what the research says actually improves AI visibility.