Đăng nhập

BÀI 23: TỐI ƯU SEO VỚI useHead() & useSeoMeta()

Tiếp tục với Bài 23 – Tối ưu SEO với useHead(), OpenGraph, và meta động trong NuxtJS. SEO là yếu tố quan trọng giúp bài viết/blog/app của bạn hiển thị tốt trên Google, có preview đẹp trên mạng xã hội, và dễ chia sẻ, tăng traffic tự nhiên.


BÀI 23: TỐI ƯU SEO VỚI useHead() & useSeoMeta()


1. Mục tiêu bài học

  • Hiểu cách gán tiêu đề (title), mô tả (description), ảnh đại diện cho từng trang
  • Tối ưu cho cả Google Search (SEO) và mạng xã hội (Facebook, Zalo, Twitter…)
  • Dùng useSeoMeta()useHead() đúng cách

2. Dùng useHead() trong component

<script setup>
useHead({
  title: 'Giới thiệu về Nuxt 3',
  meta: [
    { name: 'description', content: 'Tìm hiểu cách Nuxt hoạt động và triển khai SEO' },
    { property: 'og:title', content: 'Giới thiệu về Nuxt 3' },
    { property: 'og:description', content: 'Khám phá kiến trúc Nuxt, tối ưu SSR và routing' },
    { property: 'og:image', content: 'https://example.com/nuxt-cover.jpg' },
    { name: 'twitter:card', content: 'summary_large_image' }
  ]
})
</script>

3. Dùng useSeoMeta() – cách viết ngắn hơn

<script setup>
useSeoMeta({
  title: 'Nuxt và SEO',
  ogTitle: 'Nuxt và SEO là bạn thân',
  description: 'Cách tối ưu SEO với Nuxt 3',
  ogDescription: 'Tối ưu OpenGraph, Twitter Card, Description',
  ogImage: 'https://example.com/banner.jpg',
  twitterCard: 'summary_large_image'
})
</script>

useSeoMeta() tự động chuyển thành chuẩn HTML meta tags.


4. SEO động cho từng bài viết Markdown

Giả sử mỗi bài viết có frontmatter như sau:

---
title: Làm chủ Nuxt Content
description: Hướng dẫn viết blog chuyên nghiệp bằng Nuxt
image: /images/nuxt-banner.jpg
---

Trong pages/blog/[slug].vue:

<script setup>
const route = useRoute()
const { data: post } = await useAsyncData(() =>
  queryContent('/blog').where({ _path: `/blog/${route.params.slug}` }).findOne()
)

useSeoMeta({
  title: post.value.title,
  description: post.value.description,
  ogTitle: post.value.title,
  ogDescription: post.value.description,
  ogImage: `https://yourdomain.com${post.value.image || '/default.jpg'}`,
  twitterCard: 'summary_large_image'
})
</script>

5. Gán title mặc định toàn site

Trong nuxt.config.ts:

export default defineNuxtConfig({
  app: {
    head: {
      title: 'My Nuxt App',
      meta: [
        { name: 'description', content: 'Trang web Nuxt 3 chuyên nghiệp' },
        { name: 'viewport', content: 'width=device-width, initial-scale=1' }
      ]
    }
  }
})

→ Tất cả trang sẽ có tiêu đề này nếu không override bằng useHead().


6. Tạo ảnh preview đẹp cho mạng xã hội

Facebook, Zalo, Twitter sẽ hiện preview đẹp nếu bạn thêm:

{
  property: 'og:image',
  content: 'https://yourdomain.com/images/share-cover.jpg'
}

Ảnh nên có size 1200×630 và đặt tại link công khai (không localhost).


7. Meta khác bạn có thể thêm

Meta tagTác dụng
og:titleTiêu đề khi chia sẻ Facebook
og:descriptionMô tả khi chia sẻ
og:imageẢnh đại diện khi share
og:typearticle hoặc website
twitter:cardDạng hiển thị Twitter (thường là summary_large_image)
author, robotsGợi ý thêm

Bạn đã học được

  • Phân biệt useHead()useSeoMeta()
  • Tạo meta động theo từng bài viết
  • Gán title, description, image, open graph
  • Thiết lập meta mặc định trong nuxt.config.ts
  • Tối ưu preview mạng xã hội: Facebook, Twitter, Zalo

Bài tập mở rộng

  1. Gán SEO meta cho từng trang /about, /contact
  2. Mỗi bài viết Markdown cần có title, description, image
  3. Test chia sẻ link lên Facebook để xem preview
  4. Tạo fallback image nếu bài viết không có ảnh

Thảo luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Đăng ký nhận tin mới

Nhận bài học, tài nguyên và cơ hội việc làm qua email hàng tuần.

Chúng tôi cam kết không spam. Bạn có thể hủy bất cứ lúc nào.