Debug Nuxt SEO Issues · Nuxt SEO

[NuxtSEO](https://nuxtseo.com/ "Home")

- [Modules](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [Tools](https://nuxtseo.com/tools)
- [Pro](https://nuxtseo.com/pro)
- [Learn SEO](https://nuxtseo.com/learn-seo/nuxt) [Releases](https://nuxtseo.com/releases)

[1.4K](https://github.com/harlan-zw/nuxt-seo)

[Nuxt SEO on GitHub](https://github.com/harlan-zw/nuxt-seo)

Learn SEO

Master search optimization

Nuxt

 Vue

[SEO Checklist](https://nuxtseo.com/learn-seo/checklist) [Pre-Launch Warmup](https://nuxtseo.com/learn-seo/pre-launch-warmup) [Backlinks & Authority](https://nuxtseo.com/learn-seo/backlinks)

[Mastering Meta](https://nuxtseo.com/learn-seo/nuxt/mastering-meta)

- [Titles](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/titles)
- [Meta Description](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/descriptions)
- [Image Alt Text](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/alt-text)
- [Social Sharing](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/open-graph)
- [Rich Results](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/rich-results)
- [Schema.org](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/schema-org)
- [Twitter Cards](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/twitter-cards)

[ Controlling Crawlers](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers)

- [Robots Txt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/robots-txt)
- [Sitemaps](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/sitemaps)
- [Robot Meta Tag](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/meta-tags)
- [Canonical Link Tag](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/canonical-urls)
- [HTTP Redirects](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/redirects)
- [Duplicate Content](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/duplicate-content)
- [llms.txt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/llms-txt)

[ Routes & Rendering](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering)

- [URL Structure](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/url-structure)
- [Pagination](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/pagination)
- [Trailing Slashes](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/trailing-slashes)
- [Query Parameters](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/query-parameters)
- [Hreflang & i18n](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/i18n)
- [404 Pages](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/404-pages)
- [Dynamic Routes](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/dynamic-routes)
- [Internal Linking](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/internal-linking)
- [Programmatic SEO](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/programmatic-seo)
- [Rendering Modes](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/rendering)
- [Security](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/security)

[ Launch & Listen](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen)

- [Getting Indexed](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/going-live)
- [Google Search Console](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/search-console)
- [Core Web Vitals](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/core-web-vitals)
- [Indexing Issues](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexing-issues)
- [SEO Monitoring](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/seo-monitoring)
- [Site Migration](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/site-migration)
- [IndexNow](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexnow)
- [Debugging](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/debugging)
- [AI Search Optimization](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/ai-optimized-content)

1. [Learn SEO for Nuxt](https://nuxtseo.com/learn-seo)
2.
3. [Launch And Listen](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen)
4.
5. [Debugging](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/debugging)

# Debug Nuxt SEO Issues

Fix meta tags not rendering, hydration mismatches, and indexing problems in 2026. Chrome DevTools workflow and server-side debugging guide.

[![Harlan Wilton](https://avatars.githubusercontent.com/u/5326365?v=4)Harlan Wilton](https://x.com/harlan-zw)10 mins read Published Dec 17, 2025 Updated Jan 29, 2026

What you'll learn

- Use View Source (not DevTools) to see what Google sees. If meta tags are missing there, SSR isn't working
- `useFetch()` and `useAsyncData()` work during SSR; `onMounted()` fetches are client-only
- URL Inspection in Search Console shows exactly how Google renders your page including JavaScript

If you can't see meta tags in View Source, neither can Google. Most Nuxt SEO bugs come from hydration mismatches, configuration mistakes, or disabling SSR where you shouldn't.

## [View Source vs Inspect Element](#view-source-vs-inspect-element)

Two different ways to view HTML show different content:

**View Source** (Right-click → View Page Source) shows the initial HTML your server sends. This is what Google's crawler sees first.

**Inspect Element** (F12 → Elements tab) shows the live DOM after JavaScript executes. Meta tags added by JavaScript appear here but might not be indexed.

Test: Open your site, right-click, select "View Page Source." Search for `<title>` or `<meta name="description"`. If you can't find your content in View Source, Google can't either.

```
<!-- ❌ BAD: Empty in View Source (SPA mode) -->
<!DOCTYPE html>
<html>
  <head>
    <title>Loading...</title>
  </head>
  <body>
    <div id="__nuxt"></div>
    <script src="/_nuxt/entry.js"></script>
  </body>
</html>

<!-- ✅ GOOD: Content in View Source (SSR mode, default) -->
<!DOCTYPE html>
<html>
  <head>
    <title>How to Debug Nuxt SEO | MySite</title>
    <meta name="description" content="Fix meta tags not rendering in Nuxt apps...">
  </head>
  <body>
    <div id="__nuxt">
      <h1>How to Debug Nuxt SEO</h1>
      <p>Fix meta tags not rendering...</p>
    </div>
    <script src="/_nuxt/entry.js"></script>
  </body>
</html>
```

Google [renders JavaScript](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics) but it's a two-wave process: crawl the HTML first, then render JavaScript days later. If critical content only appears after JavaScript executes, indexing gets delayed by weeks.

## [Meta Tags Not Updating on Navigation](#meta-tags-not-updating-on-navigation)

Single Page Applications change routes without full page reloads. Meta tags set during initial render might not update when users navigate.

**Common mistake:** Using `document.title` instead of Nuxt's composables.

```
<!-- ❌ Doesn't work on navigation -->
<script setup lang="ts">
const route = useRoute()

watch(() => route.path, () => {
  document.title = route.meta.title // Won't update in head manager
})
</script>
```

Fix: Use `useHead()` or `useSeoMeta()`. Nuxt tracks navigation and updates meta tags correctly.

```
<!-- ✅ Updates on every navigation -->
<script setup lang="ts">
const route = useRoute()

useHead({
  title: () => route.meta.title as string
})
</script>
```

Nuxt's Unhead integration synchronizes meta tags across SSR and client-side navigation. The [Unhead documentation](https://unhead.unjs.io/usage/composables/use-head) explains reactivity patterns.

### [Debugging Navigation Updates with Nuxt DevTools](#debugging-navigation-updates-with-nuxt-devtools)

Nuxt DevTools provides a dedicated view for monitoring meta tags:

1. Open app in browser
2. Click Nuxt DevTools icon (bottom right)
3. Select "Head" tab
4. Navigate between pages
5. Watch meta tags update in real-time

If meta tags don't change, you're not using reactive values correctly or have SSR disabled.

## [Hydration Mismatches Breaking Meta Tags](#hydration-mismatches-breaking-meta-tags)

Hydration is when Vue takes server-rendered HTML and "activates" it with reactivity and event listeners. A hydration mismatch occurs when the HTML rendered on the client differs from the server-rendered HTML.

Nuxt displays warnings like "Hydration completed but contains mismatches" or "Text content does not match server-rendered HTML." These warnings appear in browser console and indicate server/client HTML differences ([Vue SSR Guide](https://vuejs.org/guide/scaling-up/ssr.html)).

### [Common Causes](#common-causes)

**Invalid HTML nesting** triggers browser auto-correction, causing mismatches:

```
<!-- ❌ Invalid: div inside p -->
<template>
  <p /><div>Content</div> <!-- Browser auto-closes <p> before <div> -->
</template>

<!-- ✅ Valid HTML structure -->
<template>
  <div>
    <p>Content</p>
  </div>
</template>
```

**Browser-only APIs** don't exist during SSR:

```
<!-- ❌ Crashes during SSR -->
<script setup lang="ts">
const userAgent = window.navigator.userAgent
</script>

<!-- ✅ Only access on client -->
<script setup lang="ts">
const userAgent = ref('')

onMounted(() => {
  userAgent.value = window.navigator.userAgent
})
</script>
```

**Random values and timestamps** differ between server and client:

```
<!-- ❌ Different on server vs client -->
<script setup lang="ts">
/* eslint-disable harlanzw/nuxt-no-random */
const randomId = Math.random()
const timestamp = new Date().toLocaleString()
</script>
```

ID: {{ randomId }}

**Third-party libraries** without SSR support cause mismatches ([How to Fix Vue Hydration Mismatch](https://dev.to/jacobandrewsky/how-to-fix-vue-hydration-mismatch-47eg)):

```
<!-- Wrap client-only libraries -->
<template>
  <ClientOnly>
    <GoogleMap />
  </ClientOnly>
</template>
```

### [Suppressing Mismatches in Vue 3.5+](#suppressing-mismatches-in-vue-35)

For inevitable mismatches (like timestamps), use `data-allow-mismatch`:

```
<template>
  <time :data-allow-mismatch="true">
    {{ new Date().toLocaleString() }}
  </time>
</template>
```

This tells Vue to expect differences and skip warnings.

### [External Factors](#external-factors)

**HTML minification** causes hydration mismatches. Disable most HTML minifiers ([Harlan Wilton - Nuxt 3 Hydration Mismatch](https://harlanzw.com/blog/nuxt3-hydration-node-mismatch)).

[Cloudflare](https://cloudflare.com) users: Disable Cloudflare's automatic HTML minifier in dashboard → Speed → Optimization → Auto Minify.

**Browser cache** loads outdated JavaScript. Clear cache when debugging mismatches.

## [Nuxt Configuration Mistakes](#nuxt-configuration-mistakes)

Most Nuxt SEO bugs come from configuration errors or disabling essential features.

### [Disabling SSR Globally](#disabling-ssr-globally)

Setting `ssr: false` in `nuxt.config.ts` breaks SEO for the entire site:

```
// ❌ Disables SSR globally (bad for SEO)
export default defineNuxtConfig({
  SSR: false
})
```

Fix: Remove global SSR disable or use route-level rules:

```
// ✅ Disable SSR only where needed
export default defineNuxtConfig({
  routeRules: {
    '/dashboard/**': { SSR: false }, // Client-only for authenticated routes
    '/blog/**': { prerender: true } // SSG for blog pages
  }
})
```

### [Reactive Values Not Updating](#reactive-values-not-updating)

Passing `.value` instead of the ref breaks reactivity:

```
<script setup>
const pageTitle = ref('Loading...')

// ❌ Loses reactivity
useHead({
  title: pageTitle.value
})

// ✅ Stays reactive
useHead({
  title: pageTitle
})

// Later update works with reactive version
pageTitle.value = 'Loaded Content'
</script>
```

For computed values, use getter functions:

```
<script setup>
const post = ref({ title: 'Loading...' })

useHead({
  title: () => post.value.title // Updates when post changes
})
</script>
```

### [Duplicate Meta Tags](#duplicate-meta-tags)

Multiple `useHead()` calls with same meta tags create duplicates:

```
<!-- ❌ Creates 2 description tags -->
<script setup>
useHead({
  meta: [{ name: 'description', content: 'First description' }]
})

useHead({
  meta: [{ name: 'description', content: 'Second description' }]
})
</script>
```

Unhead deduplicates by default but multiple calls can override unexpectedly. Consolidate meta tags into single `useHead()` or `useSeoMeta()` call per component.

### [Missing Data During SSR](#missing-data-during-ssr)

Data fetched in `onMounted()` won't be available during SSR:

```
<!-- ❌ Client-only fetch -->
<script setup>
const post = ref({ title: 'Loading...' })

onMounted(() => {
  (async () => {
    post.value = await fetch('/api/post').then(r => r.json())
  })()
})

useHead({ title: () => post.value.title })
</script>

<!-- ✅ SSR-compatible fetch -->
<script setup>
const { data: post } = await useFetch('/api/post')

useHead({ title: () => post.value?.title || 'Loading...' })
</script>
```

Nuxt's `useFetch()` and `useAsyncData()` work during both SSR and client-side navigation.

## [Chrome DevTools SEO Workflow](#chrome-devtools-seo-workflow)

DevTools helps debug meta tags, rendering issues, and JavaScript errors.

### [1. Check Initial HTML Response](#_1-check-initial-html-response)

Network panel shows server-sent HTML before JavaScript executes:

1. Open DevTools (F12)
2. Network tab → Clear (trash icon)
3. Reload page
4. Click first request (usually document)
5. Preview or Response tab shows initial HTML

Look for meta tags in this response. If missing, your SSR isn't working.

### [2. Search for Meta Tags](#_2-search-for-meta-tags)

Elements panel lets you find all meta tags quickly:

1. Elements tab
2. Ctrl+F (Cmd+F on Mac) to search
3. Search for `<meta name="description"`
4. Examine content attributes

Compare what you find against your `useHead()` calls.

### [3. Console Errors](#_3-console-errors)

JavaScript errors break meta tag updates. Console shows Vue warnings and Unhead errors.

Look for:

- "Hydration completed but contains mismatches"
- Failed fetch requests preventing data load
- Component errors during SSR
- Route errors breaking navigation

Fix errors before debugging meta tags. Broken JavaScript breaks everything.

### [4. Lighthouse SEO Audit](#_4-lighthouse-seo-audit)

Lighthouse tab includes basic SEO checks:

1. Lighthouse tab
2. Select "SEO" category
3. Click "Generate report"

Checks:

- Document has `<title>` element
- Document has meta description
- Links have descriptive text
- `<html>` has `lang` attribute

Lighthouse doesn't verify correctness. Presence. A title "undefined" passes but isn't useful.

## [Google Search Console URL Inspection](#google-search-console-url-inspection)

URL Inspection tool shows exactly what Google sees when crawling your page.

### [How to Use URL Inspection](#how-to-use-url-inspection)

1. Open [Google Search Console](https://search.google.com/search-console)
2. Enter URL in search bar at top
3. Click "Test Live URL" for current version
4. View results

Tool shows ([Google URL Inspection documentation](https://support.google.com/webmasters/answer/9012289)):

- Whether page is indexed
- How it was crawled
- What resources were blocked
- [Structured data](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/schema-org) Google found
- Rendered page screenshot

### [Index Status](#index-status)

"URL is on Google" means the URL is eligible to appear in search results (not guaranteed). "URL is not on Google" means the URL can't appear. Check "Page indexing" section for why.

### [View Crawled Page](#view-crawled-page)

See how Google renders your page:

1. Click "View tested page"
2. Screenshot tab shows visual render
3. More info → HTML shows rendered HTML
4. More info → Console log shows JavaScript errors

Compare screenshot to your actual page. Missing content indicates rendering problems.

### [JavaScript Rendering Test](#javascript-rendering-test)

Google renders JavaScript but [processes happen in two waves](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics):

1. **First wave:** Crawl initial HTML
2. **Second wave:** Render JavaScript (days later)

If content only appears after JavaScript, it gets delayed. URL Inspection shows both:

- "Live test" → Current rendered version
- "Indexed version" → What's in Google's index

### [Request Indexing](#request-indexing)

After fixing issues:

1. URL Inspection → "Request Indexing"
2. Google queues URL for recrawl
3. Re-indexing takes 1-4 weeks

[Google doesn't guarantee indexing](https://support.google.com/webmasters/answer/7440203). It still evaluates content quality.

Daily quota limits requests. For bulk operations, use [Google Indexing API](https://developers.google.com/search/apis/indexing-api/v3/quickstart) (up to 2,000 URLs/day).

## [Common Nuxt SEO Debugging Scenarios](#common-nuxt-seo-debugging-scenarios)

### [Meta Tags Appear in DevTools But Not View Source](#meta-tags-appear-in-devtools-but-not-view-source)

**Cause:** SSR disabled globally or for specific routes.

**Test:**

```
curl -s https://yoursite.com | grep "<title>"
```

If curl shows empty title, check `nuxt.config.ts` for `ssr: false` or route rules disabling SSR.

**Fix:** Re-enable SSR:

```
// nuxt.config.ts
export default defineNuxtConfig({
  // Remove SSR: false if present

  // Or use route-level control
  routeRules: {
    '/dashboard/**': { SSR: false }, // Only disable for client-only sections
  }
})
```

### [Meta Tags Don't Update on Navigation](#meta-tags-dont-update-on-navigation)

**Cause:** Not using reactive values or using `document.title` directly.

**Test:** Navigate between pages, watch `<title>` in Nuxt DevTools Head tab.

**Fix:**

```
<script setup>
const route = useRoute()

useHead({
  title: () => route.meta.title as string
})
</script>
```

### [Google Shows Wrong Title/Description](#google-shows-wrong-titledescription)

**Cause:** [Google rewrites 60-70% of meta descriptions](https://dev.to/hmzas/vuejs-seo-in-2025-why-you-still-need-server-side-rendering-ssr-12b9) and titles it deems low-quality.

**Test:** Search for `site:yoursite.com` in Google. Compare displayed titles to your actual meta tags.

**Fix:** Write better [titles](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/titles) and [descriptions](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/descriptions):

- Titles: 50-60 characters, unique per page, include target keyword
- Descriptions: 150-160 characters, compelling copy, match search intent
- Avoid duplicates across pages
- Make them relevant to page content

Google still might rewrite. That's normal. If it rewrites everything, your meta tags are probably too generic or off-topic.

### [Hydration Mismatch on Meta Tags](#hydration-mismatch-on-meta-tags)

**Cause:** Server and client render different meta tag values (timestamps, random IDs, browser APIs).

**Test:** Look for console warnings: "Hydration completed but contains mismatches."

**Fix:** Use `ClientOnly` wrapper or `data-allow-mismatch`:

```
<script setup>
const timestamp = ref('')

onMounted(() => {
  timestamp.value = new Date().toISOString()
})

useHead({
  meta: [
    { property: 'og:updated_time', content: timestamp }
  ]
})
</script>
```

### [Content Loads After SSR](#content-loads-after-ssr)

**Cause:** Data fetched in `onMounted()` instead of during SSR.

**Test:** View Source shows "Loading..." instead of actual content.

**Fix:** Use `useFetch()` or `useAsyncData()`:

```
<!-- ❌ Client-only fetch -->
<script setup>
const post = ref({ title: 'Loading...' })

onMounted(() => {
  (async () => {
    post.value = await fetch('/api/post').then(r => r.json())
  })()
})

useHead({ title: () => post.value.title })
</script>

<!-- ✅ SSR-compatible fetch -->
<script setup>
const { data: post } = await useFetch('/api/post')

useHead({ title: () => post.value?.title || 'Loading...' })
</script>
```

## [Testing Before Deployment](#testing-before-deployment)

Don't wait for Google to tell you something's broken. Test locally:

### [1. View Source Test](#_1-view-source-test)

Right-click → View Page Source. Search for critical meta tags. If they're missing, fix SSR before deploying.

### [2. Curl Test](#_2-curl-test)

```
# Check initial HTML
curl -s https://yoursite.com | grep -A 5 "<head>"

# Check specific meta tag
curl -s https://yoursite.com | grep 'name="description"'
```

Should show full meta tags in output.

### [3. Search Console Test Environment](#_3-search-console-test-environment)

Set up staging site in Search Console. Test URL Inspection on staging before pushing to production.

### [4. Lighthouse CI](#_4-lighthouse-ci)

Automate SEO checks in CI/CD:

```
[npm](https://npmjs.com) install -g @lhci/cli

# Run Lighthouse
lhci autorun --collect.url=http://localhost:3000
```

Configure assertion for minimum SEO score.

### [5. Nuxt DevTools in Production](#_5-nuxt-devtools-in-production)

Enable DevTools in production for debugging (temporarily):

```
// nuxt.config.ts
export default defineNuxtConfig({
  DevTools: {
    enabled: true // Normally auto-disabled in production
  }
})
```

Remember to disable after debugging. DevTools add overhead.

[The 2026 SEO Checklist for Nuxt & Vue Pre-launch setup, post-launch verification, and ongoing monitoring. Interactive checklist with links to every guide.](https://nuxtseo.com/learn-seo/checklist)

---

[IndexNow Notify search engines instantly when content changes using IndexNow, Google Indexing API, and RequestIndexing in 2026.](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexnow) [AI Search Optimization Make your Nuxt site visible in AI Overviews, ChatGPT, and other generative search engines with structured data and content strategies in 2026.](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/ai-optimized-content)

On this page

- [View Source vs Inspect Element](#view-source-vs-inspect-element)
- [Meta Tags Not Updating on Navigation](#meta-tags-not-updating-on-navigation)
- [Hydration Mismatches Breaking Meta Tags](#hydration-mismatches-breaking-meta-tags)
- [Nuxt Configuration Mistakes](#nuxt-configuration-mistakes)
- [Chrome DevTools SEO Workflow](#chrome-devtools-seo-workflow)
- [Google Search Console URL Inspection](#google-search-console-url-inspection)
- [Common Nuxt SEO Debugging Scenarios](#common-nuxt-seo-debugging-scenarios)
- [Testing Before Deployment](#testing-before-deployment)

[GitHub](https://github.com/harlan-zw/nuxt-seo) [ Discord](https://discord.com/invite/275MBUBvgP)

### [NuxtSEO](https://nuxtseo.com/ "Home")

- [Getting Started](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction)
- [MCP](https://nuxtseo.com/docs/nuxt-seo/guides/mcp)

Modules

- [Robots](https://nuxtseo.com/docs/robots/getting-started/introduction)
- [Sitemap](https://nuxtseo.com/docs/sitemap/getting-started/introduction)
- [OG Image](https://nuxtseo.com/docs/og-image/getting-started/introduction)
- [Schema.org](https://nuxtseo.com/docs/schema-org/getting-started/introduction)
- [Link Checker](https://nuxtseo.com/docs/link-checker/getting-started/introduction)
- [SEO Utils](https://nuxtseo.com/docs/seo-utils/getting-started/introduction)
- [Site Config](https://nuxtseo.com/docs/site-config/getting-started/introduction)
- [Skew Protection](https://nuxtseo.com/docs/skew-protection/getting-started/introduction)
- [AI Ready](https://nuxtseo.com/docs/ai-ready/getting-started/introduction)

### [NuxtSEO Pro](https://nuxtseo.com/pro "Nuxt SEO Pro")

- [Getting Started](https://nuxtseo.com/pro)
- [Dashboard](https://nuxtseo.com/pro/dashboard)
- [Pro MCP](https://nuxtseo.com/pro/docs/getting-started/mcp-setup)

### [Learn SEO](https://nuxtseo.com/learn-seo "Learn SEO")

Nuxt

- [Mastering Meta](https://nuxtseo.com/learn-seo/nuxt/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers)
- [Launch & Listen](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen)
- [Routes & Rendering](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering)
- [Staying Secure](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/security)

Vue

- [Vue SEO Guide](https://nuxtseo.com/learn-seo/vue)
- [Mastering Meta](https://nuxtseo.com/learn-seo/vue/mastering-meta)
- [Controlling Crawlers](https://nuxtseo.com/learn-seo/vue/controlling-crawlers)
- [SPA SEO](https://nuxtseo.com/learn-seo/vue/spa)
- [SSR Frameworks](https://nuxtseo.com/learn-seo/vue/ssr-frameworks)
- [SEO Checklist](https://nuxtseo.com/learn-seo/checklist)
- [Pre-Launch Warmup](https://nuxtseo.com/learn-seo/pre-launch-warmup)
- [Backlinks & Authority](https://nuxtseo.com/learn-seo/backlinks)

### [Tools](https://nuxtseo.com/tools "SEO Tools")

- [Social Share Debugger](https://nuxtseo.com/tools/social-share-debugger)
- [Robots.txt Generator](https://nuxtseo.com/tools/robots-txt-generator)
- [Meta Tag Checker](https://nuxtseo.com/tools/meta-tag-checker)
- [HTML to Markdown](https://nuxtseo.com/tools/html-to-markdown)
- [XML Sitemap Validator](https://nuxtseo.com/tools/xml-sitemap-validator)
- [Schema.org Validator](https://nuxtseo.com/tools/schema-validator)
- [Keyword Idea Generator](https://nuxtseo.com/tools/keyword-generator)
- [Keyword Research](https://nuxtseo.com/tools/keyword-research)
- [SERP Analyzer](https://nuxtseo.com/tools/serp-analyzer)
- [Domain Rankings](https://nuxtseo.com/tools/domain-rankings)

Copyright © 2023-2026 Harlan Wilton - [MIT License](https://github.com/harlan-zw/nuxt-seo/blob/main/license) · [mdream](https://mdream.dev)