Can AI crawlers read Vue & Nuxt sites?
Hybrid
Readability depends on how the site is configured.
v2 scoring Estimated on the four-pillar score. A default Vue & Nuxt install earns 15/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 Vue & Nuxt renders.
Nuxt with SSR on is readable; a plain Vue SPA or Nuxt with ssr:false is not.
What is actually happening
Nuxt server-renders by default and produces complete HTML, which puts it in good standing. The two ways that breaks are explicit: setting ssr to false, and using plain Vue with Vite, which ships an empty #app div plus a script tag and nothing else. The subtler failure is data fetched in onMounted, which by definition runs only in the browser — the page structure server-renders, the content inside it does not.
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 Vue & Nuxt
- 01Confirm ssr is true in nuxt.config, or use nuxt generate for a fully static build where every route is prerendered.
- 02Fetch with useAsyncData or useFetch rather than in onMounted, so the data resolves during server rendering and lands in the HTML.
- 03Use useHead or useSeoMeta for per-page metadata so titles and descriptions are part of the server response rather than set after hydration.
- 04Use <ClientOnly> sparingly and only around components that genuinely cannot render on the server. Everything inside it is absent from the HTML.
- 05For a plain Vue SPA, add a prerender step to the build rather than migrating everything at once. Prerendering the public marketing routes captures most of the benefit.
What trips people up
- A component wrapped in <ClientOnly> is invisible to every non-rendering crawler, including its fallback content if you did not provide one.
- Nuxt route rules can switch individual routes to client-side rendering from a single config block, so one line can silently change the behaviour of a whole section.
- Composables that touch window during setup force you toward ClientOnly, which is how sites end up with more client-only components than anyone intended.
- Hydration mismatches can cause Vue to discard and re-render server content in the browser. The HTML was correct, so crawlers are fine — but it makes local testing confusing.
Where the files go on Vue & Nuxt
Put llms.txt and robots.txt in /public, or use the @nuxtjs/robots module for generated rules.
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 Vue & Nuxt 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.