Quick setup for Nuxt SEO with best practices
Sets up comprehensive SEO configuration for Nuxt projects with @nuxtjs/seo module.
/plugin marketplace add secondsky/claude-skills/plugin install nuxt-seo@claude-skillsQuickly set up comprehensive SEO for a Nuxt project using @nuxtjs/seo.
site-url: Your production URL (required)site-name: Your site name (required)bunx nuxi module add @nuxtjs/seo
# or: npx nuxi module add @nuxtjs/seo
Add site configuration:
export default defineNuxtConfig({
modules: ['@nuxtjs/seo'],
site: {
url: '${site-url}',
name: '${site-name}',
description: 'Your site description here',
defaultLocale: 'en'
},
// Optional: Organization identity for Schema.org
schemaOrg: {
identity: {
type: 'Organization',
name: '${site-name}',
url: '${site-url}',
logo: '${site-url}/logo.png'
}
},
// Optional: Route-specific SEO rules
routeRules: {
'/admin/**': { robots: 'noindex, nofollow' },
'/api/**': { robots: 'noindex' }
}
})
Create a default OG image template in components/OgImage/:
<!-- components/OgImage/Default.vue -->
<template>
<div class="w-full h-full flex flex-col justify-center items-center bg-gradient-to-br from-green-500 to-blue-600 p-16">
<h1 class="text-6xl font-bold text-white text-center">
{{ title }}
</h1>
<p v-if="description" class="text-2xl text-white/80 text-center mt-4">
{{ description }}
</p>
</div>
</template>
<script setup>
defineProps<{
title: string
description?: string
}>()
</script>
<!-- app.vue -->
<script setup>
useSeoMeta({
titleTemplate: '%s | ${site-name}',
ogSiteName: '${site-name}',
twitterCard: 'summary_large_image'
})
</script>
<template>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>
After setup, verify:
http://localhost:3000/robots.txthttp://localhost:3000/sitemap.xmluseSeoMeta()defineOgImage()useSchemaOrg()<!-- Example page SEO -->
<script setup>
useSeoMeta({
title: 'Page Title',
description: 'Page description for search results',
ogImage: '/images/og-page.jpg'
})
defineOgImage({
component: 'Default',
title: 'Page Title',
description: 'For social sharing'
})
useSchemaOrg([
defineWebPage({
name: 'Page Title'
})
])
</script>