NUXT SEO AUDIT · VUE 3 · NITRO · AI VISIBILITY

Free Nuxt SEO Audit

Nuxt 3 ships with excellent SEO primitives — but useSeoMeta() gaps, dynamic routes missing prerender: true, and Nuxt Image defaulting to lazy on LCP elements are pervasive issues that a generic audit misses. DeepSEOAnalysis audits Nuxt sites with framework-specific context.

Audit my Nuxt site →How we score

WHAT WE CHECK

6 Nuxt-specific SEO checks

Beyond the 80+ general checks, the engine applies Nuxt 3-aware analysis when it detects a Nuxt site — covering metadata composables, module configurations, and rendering strategy.

📝

useSeoMeta() and useHead() coverage

Nuxt 3's `useSeoMeta()` composable is the recommended way to set title, description, og:title, og:description, and canonical on each page. Pages that rely solely on the `app.vue` or layout default produce duplicate or missing metadata across routes. The audit checks every crawled page for unique, present title tags and meta descriptions — flagging pages that appear to share the same title or have no description at all.

🗺️

@nuxt/sitemap module configuration

The `@nuxtjs/sitemap` (or `nuxt-simple-sitemap`) module auto-generates sitemap XML from your Nuxt routes. Common issues: dynamic routes from `useFetch()` or `$fetch()` aren't pre-registered and appear missing; excluded routes are hardcoded rather than derived from `noindex` signals; the Sitemap directive in robots.txt points to the wrong URL. The audit checks whether your sitemap includes all crawled pages and flags any pages reachable via internal links that are absent from the sitemap.

🖼️

Nuxt Image and LCP

`@nuxt/image`'s `<NuxtImg>` and `<NuxtPicture>` components automatically generate optimised srcsets, WebP, and AVIF variants — but they lazy-load by default via `loading="lazy"`. The LCP image (the largest visible element above the fold on load) should use `loading="eager"` or `preload` to load immediately rather than after the viewport intersection. The audit identifies the LCP element on each page and flags `<NuxtImg>` components on LCP elements missing the `loading="eager"` attribute.

⚙️

routeRules: SSG vs SSR per route

Nuxt 3's `routeRules` in `nuxt.config.ts` gives per-route rendering control: `{ '/blog/**': { prerender: true } }` generates those routes at build time as static HTML, while routes without a `prerender` rule are server-rendered on each request. Static pages are faster, CDN-cacheable, and crawled immediately — SSR pages require a server hit per crawl. The audit identifies which of your key content pages are statically generated vs. dynamically rendered, and flags routes that would benefit from `prerender: true`.

🤖

@nuxtjs/robots module and AI crawler access

The `@nuxtjs/robots` module generates robots.txt from your Nuxt config, integrates with the sitemap module, and allows per-route disallow rules. A common misconfiguration: blocking AI crawlers (GPTBot, ClaudeBot, PerplexityBot) in the robots.txt either explicitly or via a blanket wildcard disallow, cutting off AI visibility without realising it. The audit checks whether your robots.txt allows the major AI crawlers and whether the Sitemap directive points to the correct sitemap URL.

🧠

AI visibility for Nuxt apps

Nuxt makes AI visibility straightforward: `llms.txt` goes in `/public/llms.txt`, FAQPage JSON-LD can be added via `useSchemaOrg()` from `nuxt-schema-org` or directly with `useHead({ script: [{ type: 'application/ld+json', children: JSON.stringify(schema) }] })`. The audit checks all five AI visibility signals — llms.txt presence, AI crawler access, FAQPage/HowTo schema, question-heading ratio, and content chunkability — and surfaces the exact Nuxt pattern to implement each fix.

HOW IT WORKS

Audit your Nuxt site in 60 seconds

  1. Enter your deployed Nuxt URL. Works with Vercel, Netlify, Cloudflare Pages, NuxtHub, or self-hosted with Nitro. No source code access needed — the audit crawls the live site.
  2. We crawl and analyse. The engine crawls up to 50 pages (free) or 1,000 pages (paid), checks metadata coverage across all routes, validates all JSON-LD schema, measures CrUX Core Web Vitals from real user data, and evaluates all five AI visibility signals.
  3. You get a prioritised report. Framework-aware issues first — missing `useSeoMeta()`, routes that should be prerendered, LCP image lazy-loading — then general SEO, each with a specific Nuxt 3 fix including the exact composable or config property to use.

FAQ

Questions about the Nuxt SEO audit

Does DeepSEOAnalysis detect Nuxt-specific SEO issues?

Yes. The engine detects Nuxt signals — server-rendered HTML from Nitro, Nuxt Image output, sitemap module patterns, and SEO meta composable usage — and surfaces framework-specific guidance alongside the 80+ general checks.

Does Nuxt handle SEO automatically?

Nuxt 3 has strong SEO primitives — `useSeoMeta()`, `useHead()`, the `@nuxt/sitemap` module, and `routeRules` for per-route SSG/SSR control — but gaps are common. Pages missing `useSeoMeta()` fall through to the app.vue default. Dynamic routes without `prerender: true` in routeRules are SSR rather than static. Nuxt Image defaults to lazy-loading, which delays LCP. The audit finds these patterns across all crawled pages.

How does the audit handle Nuxt's server-side rendering?

Nuxt renders pages server-side by default (SSR mode), so the initial HTML response should contain full content for Googlebot. The audit fetches pages directly and checks whether the H1, body content, and meta tags are present in the server response — no JavaScript execution required. It flags any pages where content appears to be client-side only (missing from the initial HTML).

Is the Nuxt SEO audit free?

Yes. The complete audit is free with no signup and no email gate. Paid plans add saved history, scheduled monitoring, larger crawls (up to 1,000 pages), and agency workflows.