---
title: "The 2026 SEO Checklist for Nuxt & Vue"
description: "Check crawler access, metadata, sitemaps, and rendering before and after launching your Nuxt or Vue app."
canonical_url: "https://nuxtseo.com/learn-seo/checklist"
last_updated: "2026-10-05"
---

> Index of every page on this site: [llms.txt](https://nuxtseo.com/llms.txt)

::key-takeaways
- Check the deployed HTML, crawler access, sitemap, and response status before requesting indexing.
- Measure Core Web Vitals at the 75th percentile. A good score does not guarantee rankings.
- llms.txt is optional documentation delivery. Google Search does not use it for visibility or rankings.
- Publish useful public content when it is ready. A fixed warmup period does not guarantee indexing.
::

Before launch, check for a leftover `noindex` tag, missing sitemap pages, and repeated descriptions. Use the post-launch checks to inspect what crawlers receive.

Every item links to a framework-specific guide. For full walkthroughs, see Getting Indexed for [Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/going-live) or [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/going-live).

::callout{type="warning" title="Do this right now"}
Open your deployed site and hit "View Source." If your content is absent from the initial HTML, check the rendered HTML in URL Inspection too. Google can render JavaScript; other clients may need server-rendered content.
::

## Pre-Launch Checklist

::checklist{#seo-prelaunch-ssr title="SSR & Rendering"}
- SSR implemented or prerendering configured ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/rendering) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/rendering))
- Route rules configured for special cases (hybrid rendering, static pages)
- Hydration errors resolved (check browser console for mismatches, see debugging guides for [Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/debugging) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/debugging))
- "View Source" tested on deployed site (meta tags and content visible in raw HTML)
- SSR framework chosen if using Vue SPA ([framework comparison](https://nuxtseo.com/learn-seo/vue/ssr-frameworks))
::

::checklist{#seo-prelaunch-meta title="Meta Tags & AI Readiness"}
- Page titles configured per route, descriptive and unique, with important words near the start ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/titles) · [Vue](https://nuxtseo.com/learn-seo/vue/mastering-meta/titles))
- Meta descriptions set per page, specific and unique; Google may use a different snippet ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/descriptions) · [Vue](https://nuxtseo.com/learn-seo/vue/mastering-meta/descriptions))
- Social sharing tags configured (OG image, Twitter Card) ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/open-graph) · [Vue](https://nuxtseo.com/learn-seo/vue/mastering-meta/social-sharing))
- [Schema.org](http://Schema.org) structured data added for applicable content types ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/schema-org) · [Vue](https://nuxtseo.com/learn-seo/vue/mastering-meta/schema-org))
- llms.txt configured if documentation tools in your workflow use it ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/llms-txt) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/llms-txt))
- Structured data checked in [Google Rich Results Test](https://search.google.com/test/rich-results); social metadata checked in [Facebook Debugger](https://developers.facebook.com/tools/debug/)
::

::checklist{#seo-prelaunch-urls title="URL Structure"}
- URL structure uses hyphens (not underscores), lowercase paths, descriptive slugs ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/url-structure) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/url-structure))
- Trailing slashes handled consistently: pick one style, redirect the other ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/trailing-slashes) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/trailing-slashes))
- Dynamic routes configured with unique meta per route param ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/dynamic-routes) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/dynamic-routes))
- Equivalent URL variants use consistent canonical hints; distinct query content has its own indexing policy ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/query-parameters) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/query-parameters))
- Pagination uses self-referencing canonicals ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/pagination) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/pagination))
- 404 pages return proper 404 status code, not 200 soft 404 ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/404-pages) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/404-pages))
::

::checklist{#seo-prelaunch-crawlers title="Crawler Control"}
- robots.txt configured, including AI agent permissions ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/robots-txt) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/robots-txt))
- XML sitemap generated with all indexable pages ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/sitemaps) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/sitemaps))
- Canonical URLs set on every page ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/canonical-urls) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/canonical-urls))
- Meta robots tags configured for noindex pages ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/meta-tags) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/meta-tags))
- Permanent redirects use 301 or 308 where appropriate; temporary moves use temporary redirects; unnecessary chains removed ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/redirects) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/redirects))
- Duplicate content resolved: www vs non-www, query parameters ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/duplicate-content) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/duplicate-content))
::

::checklist{#seo-prelaunch-security title="Security"}
- HTTPS configured with valid SSL certificate
- Security headers set (CSP, X-Frame-Options, HSTS) without blocking crawlers ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/security) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/security))
- No sensitive data exposed in HTML source or robots.txt
::

::checklist{#seo-prelaunch-performance title="Performance"}
- Images optimized with useful alt text; offscreen images lazy-loaded, important initial-viewport images loaded promptly ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/mastering-meta/alt-text) · [Vue](https://nuxtseo.com/learn-seo/vue/mastering-meta/alt-text))
- Interaction to Next Paint (INP) optimized: break up long tasks, use `scheduler.yield()`{lang="ts"}
- Critical CSS inlined, non-critical CSS deferred
- JavaScript code-split by route
- Fonts preloaded (WOFF2 format)
- CDN configured for static assets
::

::checklist{#seo-prelaunch-authority title="Authority & Pre-Launch Warmup"}
- Public landing page deployed when ready, domain configured, Search Console property verified ([guide](https://nuxtseo.com/learn-seo/pre-launch-warmup))
- Internal linking structure reviewed: no orphan pages, important pages reachable through crawlable links ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/internal-linking) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/internal-linking))
- [Backlinks](https://nuxtseo.com/learn-seo/backlinks) and cross-links from existing properties pointing to new site
::

## Post-Launch Checklist

::checklist{#seo-postlaunch-gsc title="Google Search Console"}
- GSC property created and verified ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/search-console) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/search-console))
- Sitemap submitted via GSC ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/controlling-crawlers/sitemaps) · [Vue](https://nuxtseo.com/learn-seo/vue/controlling-crawlers/sitemaps))
- URL Inspection tool tested on key pages (check rendered HTML)
- Page Indexing report reviewed: investigate important excluded pages against their intended indexing policy
- IndexNow configured to notify participating engines of content changes ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexnow) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/indexnow))
::

::checklist{#seo-postlaunch-indexing title="Indexing Verification"}
- Indexing status checked for important pages with URL Inspection ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexing-issues) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/indexing-issues))
- Rendered HTML verified via URL Inspection tool (meta tags appear in rendered output)
- Soft 404 errors resolved (404 pages must return 404 status, not 200)
- Duplicate exclusions reviewed against intended canonical URLs; expected exclusions distinguished from mistakes
- Orphan pages linked from sitemap or internal navigation
::

::checklist{#seo-postlaunch-ai title="AI Discovery & Citations"}
- Google generative AI performance reviewed in the current Search Console report ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/search-console) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/search-console))
- Content tested in [ChatGPT](https://chatgpt.com), [Perplexity](https://perplexity.ai), and [Gemini](https://gemini.google.com) (verify citation accuracy)
- Brand mentions tracked on authoritative third-party sites
::

::checklist{#seo-postlaunch-cwv title="Performance & Core Web Vitals"}
- Core Web Vitals passing p75 thresholds: LCP ≤2.5s, INP ≤200ms, CLS ≤0.1 ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/core-web-vitals) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/core-web-vitals))
- Mobile rendering and navigation checked on real pages
- Real user metrics (RUM) monitored via web-vitals library or speed insights
::

::checklist{#seo-postlaunch-social title="Social Sharing"}
- OG images tested in [Facebook Debugger](https://developers.facebook.com/tools/debug/) (clear cache if needed)
- Twitter Cards validated (compose tweet without posting to preview card)
- Slack and Discord link previews tested (OG tags control unfurls)
::

::checklist{#seo-postlaunch-analytics title="Analytics"}
- Analytics configured (GA4, Plausible, Fathom, or Umami) ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/seo-monitoring) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/seo-monitoring))
- SPA tracking set up if applicable (router change events fire pageview events)
- Conversion tracking enabled for key user actions
::

## Ongoing Monitoring

SEO degrades silently. A plugin update breaks your schema markup, a deploy adds `noindex` to a template, a redirect chain forms over three months of URL changes. These tasks catch regressions before they compound.

::checklist{#seo-ongoing-weekly title="Weekly Tasks"}
- GSC Performance report reviewed (track impressions, clicks, CTR, and the report's stated scope)
- Page Indexing report checked for new errors
- p75 INP monitored for responsiveness regressions
- Broken links scanned
::

::checklist{#seo-ongoing-monthly title="Monthly Tasks"}
- SEO monitoring tools reviewed ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/seo-monitoring) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/seo-monitoring))
- Competitor rankings and AI citation share tracked
- Content gaps investigated using Search Console queries and the pages that answer them
- Backlink profile reviewed (identify new links, lost links, investigate unexpected links; use disavow only when Google's criteria apply)
::

::checklist{#seo-ongoing-quarterly title="Quarterly Tasks"}
- Full technical SEO audit (crawl site with [Screaming Frog](https://screamingfrog.co.uk) or Sitebulb)
- Redirect chains audited and flattened
- Internal link audit performed: orphan pages, crawl depth, broken links ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/routes-and-rendering/internal-linking) · [Vue](https://nuxtseo.com/learn-seo/vue/routes-and-rendering/internal-linking))
- Structured data updated for deprecated types (Google removes schema types periodically)
- Canonical URL configuration verified (GSC shows user-declared vs Google-selected canonical)
- If your documentation workflow uses llms.txt, update its relevant sections
::

::checklist{#seo-ongoing-changes title="After Major Changes"}
- Site migration checklist followed if domain or URL structure changed ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/site-migration) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/site-migration))
- IndexNow or URL submission used for urgent updates ([Nuxt](https://nuxtseo.com/learn-seo/nuxt/launch-and-listen/indexnow) · [Vue](https://nuxtseo.com/learn-seo/vue/launch-and-listen/indexnow))
- Redirects tested after URL structure changes (intended permanent or temporary status, correct destination)
- GSC URL Inspection re-run on changed pages
- Search rankings monitored weekly for 60 days post-migration
::

## Mistakes to Check

Check these conditions when public pages are missing, metadata is incorrect, or navigation is slow.

::callout{type="danger" title="Ignoring INP"}
Interaction to Next Paint replaced FID in 2024. Improve responsiveness for your users; a metric score does not determine the ranking of every competitive query. Break up long tasks, use `scheduler.yield()`{lang="ts"}, and watch your p75 weekly.
::

::callout{type="danger" title="Accidentally blocking AI bots"}
Check each provider's documented crawler before changing access. [OpenAI](https://openai.com) separates training and Search crawlers. Blocking one bot does not establish how every product fetches or cites your pages.
::

::callout{type="warning" title="Soft 404s"}
Your 404 page must return a 404 status code, not a 200. Google may classify an empty or error-like page as a soft 404. Use the correct status for pages that do not exist.
::

::callout{type="warning" title="Template meta descriptions"}
Write descriptions that summarize each page accurately. Google may choose another snippet. Compare observed click-through rates without assuming the description caused a change.
::

::callout{type="warning" title="Redirect chains"}
A→B→C adds requests and can delay navigation and crawling. Flatten to A→C. Audit quarterly.
::

## Automate the Hard Parts

Modules handle sitemap generation, crawler rules, and metadata defaults. You still need to check the deployed output.

### Nuxt

This command installs the bundled SEO modules. Configure them for your site and check the deployed output:

```bash
npx nuxt module add @nuxtjs/seo
```

The [Nuxt SEO module](https://nuxtseo.com/docs/nuxt-seo/getting-started/introduction) sets up XML sitemaps, robots.txt (with AI crawler rules), [schema.org](http://schema.org) via `useSchemaOrg()`{lang="ts"}, canonical URLs, trailing slash normalization, and OG image generation. Version 6 also sets up llms.txt, Markdown versions of each page, and skew protection. See the full [Nuxt SEO learning path](https://nuxtseo.com/learn-seo/nuxt) for details on every item.

Vue SPAs don't get this for free: there's no build-time module wiring up sitemaps and rendering strategy, so each item is a decision you make explicitly. Pick a rendering strategy first ([prerendering](https://nuxtseo.com/learn-seo/vue/spa/prerendering) or an [SSR framework](https://nuxtseo.com/learn-seo/vue/ssr-frameworks)), since sitemaps, meta tags, and crawler access all depend on which one you choose. Coming from vue-meta? The [migration guide](https://nuxtseo.com/learn-seo/vue/mastering-meta/migrating-vue-meta) covers switching to Unhead. See the full [Vue SEO learning path](https://nuxtseo.com/learn-seo/vue) for the rest.

## What's Next

**Launching soon?** The [Pre-Launch Warmup](https://nuxtseo.com/learn-seo/pre-launch-warmup) guide shows how to prepare public content and technical checks before launch.

**Already live?** Start with the post-launch section above. Highest impact first: submit your sitemap to [Search Console](https://search.google.com/search-console), verify SSR rendering, and fix soft 404s.

**Want to verify right now?** Use these tools to inspect the deployed output:

- [Meta Tag Checker](https://nuxtseo.com/tools/meta-tag-checker): Are your titles, descriptions, and OG tags rendering?
- [XML Sitemap Validator](https://nuxtseo.com/tools/xml-sitemap-validator): Does your sitemap include all indexable pages?
- [Schema Validator](https://nuxtseo.com/tools/schema-validator): Does your structured data use valid vocabulary? Check Google eligibility separately.
- [Social Share Debugger](https://nuxtseo.com/tools/social-share-debugger): How do your links look on Twitter, Slack, and Discord?

**Building habits?** Bookmark this page. The weekly, monthly, and quarterly sections above keep your SEO from quietly degrading.

## Sitemap

See the full [sitemap](https://nuxtseo.com/sitemap.md) for all pages.
