Can AI crawlers read Vue & Nuxt sites?
Hybrid
Readability depends on how the site is configured.
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 site