iBetter Books
수정

Ch 05. SEO 메타 태그와 Head 관리

검색 엔진과 SNS 공유 미리보기는 모두 <head> 영역의 태그를 읽습니다. Nuxt 3는 useHeaduseSeoMeta 두 Composable로 페이지별 head를 동적으로 제어할 수 있게 해 줍니다.

useHead — 모든 head 태그를 제어하기

useHead<title>, <meta>, <link>, <script> 등 head 안의 모든 요소를 설정할 수 있는 범용 Composable입니다.

// pages/blog/[slug].vueconst { data: post } = await useFetch(`/api/posts/${route.params.slug}`)useHead({  title: post.value?.title,  meta: [    { name: 'description', content: post.value?.summary },    { property: 'og:title', content: post.value?.title },    { property: 'og:image', content: post.value?.thumbnail }  ],  link: [    { rel: 'canonical', href: `https://example.com/blog/${route.params.slug}` }  ]})

data가 Ref이면 useHead는 반응성을 자동으로 추적합니다. 데이터가 바뀌면 head도 함께 업데이트됩니다.

useSeoMeta — SEO 전용 단축어

Open Graph, Twitter Card, 기본 메타 태그를 한 번에 설정하려면 useSeoMeta가 편리합니다. 속성 이름이 직관적이고, TypeScript 자동 완성도 잘 됩니다.

useSeoMeta({  title: '실전 Nuxt.js',  description: 'Nuxt 3로 풀스택 개발 배우기',  ogTitle: '실전 Nuxt.js',  ogDescription: 'Nuxt 3로 풀스택 개발 배우기',  ogImage: 'https://example.com/og.png',  ogUrl: 'https://example.com',  twitterCard: 'summary_large_image',  twitterTitle: '실전 Nuxt.js',  twitterImage: 'https://example.com/og.png'})

og:twitter: 접두어를 camelCase로 변환한 속성명을 씁니다. 예를 들어 og:imageogImage가 됩니다.

nuxt.config.ts에서 기본값 설정하기

모든 페이지에 공통으로 적용할 기본값은 nuxt.config.tsapp.head에 정의합니다.

// nuxt.config.tsexport default defineNuxtConfig({  app: {    head: {      titleTemplate: '%s | 실전 Nuxt.js',      meta: [        { name: 'author', content: '작성자' },        { property: 'og:site_name', content: '실전 Nuxt.js' }      ],      link: [        { rel: 'icon', type: 'image/png', href: '/favicon.png' }      ]    }  }})

titleTemplate%s 자리에 각 페이지에서 설정한 title 값이 들어갑니다. 예를 들어 페이지에서 title: '1장. 시작하기'로 설정하면 브라우저 탭에는 1장. 시작하기 | 실전 Nuxt.js로 표시됩니다.

페이지별로 고유한 타이틀과 설명을 설정하고 공통 템플릿으로 묶는 것이 SEO의 기본입니다. useSeoMeta로 시작해서 세밀한 제어가 필요할 때 useHead를 더하는 방식으로 활용하면 됩니다.