Nuxt3 实战 (十二):SEO 搜索引擎优化指南

添加 favicon 图标和 TDK(标题、描述、关键词)

  1. nuxt.config.ts 添加配置:
export default defineNuxtConfig({
  app: {
    title:'Dream Site',
    meta: [
      { name: 'keywords', content: 'Nuxt.js,导航,网站' },
      { name: 'description', content: '致力于打造程序员的梦中情站' }
    ],
    link: [{ rel: 'icon', type: 'image/x-icon', href: 'favicon.ico' }],
    style: [],
    script: [],
    noscript: []
  }
})
  1. 使用 useHead
<script setup lang="ts">
  useHead({
   title:'Dream Site',
   link: [{ rel: 'icon', type: 'image/x-icon', href: 'favicon.ico' }],
   meta: [
     { name: 'keywords', content: 'Nuxt.js,导航,网站' },
     { name: 'description', content: '致力于打造程序员的梦中情站' }
   ]
  })
</script>
  1. 使用 useSeoMeta 组合函数
<script setup lang="ts">
 useSeoMeta({
 title: 'Dream Site',
 ogTitle: 'Dream Site',
 description: '致力于打造程序员的梦中情站',
 ogDescription: '致力于打造程序员的梦中情站',
 ogImage: 'https://example.com/image.png',
 twitterCard: 'summary_large_image',
 })
</script>
  1. /pages/ 目录中可以使用 definePageMeta 来根据当前路由设置元数据
<script setup lang="ts">
 definePageMeta({
   title: 'Dream Site'
 })
</script>
  1. 动态标题
<script setup lang="ts">
useHead({
 // 作为字符串,
 // 其中`%s`会被标题替换
 titleTemplate: '%s - Dream Site',
 // ... 或者作为一个函数
 titleTemplate: (productCategory) => {
   return productCategory
     ? `${productCategory} - Dream Site`
     : 'Dream Site'
 }
})
</script>

官方文档:SEO和Meta

安装 @nuxtjs/seo 模块

我们需要安装 @nuxtjs/seo 插件,@nuxtjs/seo 是一个模块集合,它覆盖了搜索引擎中常用的模块:

具体使用方式:

  1. @nuxtjs/seo 插件:
npx nuxi@latest module add seo
  1. nuxt.config.ts 中根据实际情况添加配置:
 export default defineNuxtConfig({
   // SEO 配置
   site: {
     url: 'https://dream-site.cn',
     name: 'Dream Site',
     description: '致力于打造程序员的梦中情站',
     defaultLocale: 'zh-cn',
     exclude: ['/admin/_components/**'], // 过滤不需要的 url
     cacheMaxAgeSeconds: 24 * 3600, // 缓存时间一天
     autoLastmod: true, // 自动检测每个 URL 的 lastmod 日期
   },
   routeRules: {
     // Don't add any /secret/** URLs to the sitemap.xml
     '/admin/_components/**': { robots: false },
   }
 })

现在你就能打开 sitemap.xmlrobots.txt 了,其他更加详细的配置可以参考官方文档:nuxt-seo

Robots

  1. 禁用网站索引
export default defineNuxtConfig({
  site: { indexable: false }
})
  1. 禁用页面索引
<script lang="ts" setup>
defineRouteRules({
  robots: false,
})
</script>
  1. 如果需要更精细的编程控制,可以使用 nuxt.config.ts 配置该模块
export default defineNuxtConfig({
  robots: {
    disallow: ['/secret', '/admin'],
  }
})

更加详细的配置可以参考官方文档:Robots

Sitemap

  1. 禁用 URL 模式的索引
export default defineNuxtConfig({
 routeRules: {
   // Don't add any /secret/** URLs to the sitemap.xml
   '/secret/**': { robots: false },
 }
})
  1. 对于所有其他情况,您可以使用 includeexclude 模块选项来过滤 url
export default defineNuxtConfig({
 sitemap: {
   // exclude all URLs that start with /secret
   exclude: ['/secret/**'],
   // include all URLs that start with /public
   include: ['/public/**'],
 }
})
  1. 设置 Lastmodchangefreqpriority
<script setup>
useSeoMeta({
  // will be inferred as the lastmod value in the sitemap
  articleModifiedTime: '2023-01-01'
})

defineRouteRules({
  sitemap: {
    changefreq: 'daily',
    priority: 0.3
  }
})
</script>
  1. 缓存时间
export default defineNuxtConfig({
  sitemap: {
   cacheMaxAgeSeconds: 3600 // 1 hour
  }
})
  1. 自定义样式
export default defineNuxtConfig({
 sitemap: {
   xslColumns: [
     { label: 'URL', width: '50%' },
     { label: 'Last Modified', select: 'sitemap:lastmod', width: '25%' },
     { label: 'Priority', select: 'sitemap:priority', width: '12.5%' },
     { label: 'Change Frequency', select: 'sitemap:changefreq', width: '12.5%' },
   ],
 },
})

更加详细的配置可以参考官方文档:Sitemap

OG Image

  1. 使用可组合 defineOgImageComponent 来定义主页的 og:image
<script lang="ts" setup>
 defineOgImageComponent('NuxtSeo')
</script>
  1. 在浏览器中访问主页并打开 Nuxt DevTools (Shift + Alt + D)
    在这里插入图片描述

  2. 自定义模板

<script lang="ts" setup>
defineOgImageComponent('NuxtSeo', {
 title: 'Hello OG Image 👋',
 description: 'Look what at me in dark mode',
 theme: '#ff0000',
 colorMode: 'dark',
})
</script>

更加详细的配置可以参考官方文档:OG Image

Schema.org

  1. 配置默认值
<script lang="ts" setup>
useSchemaOrg([
 defineWebPage({
   name: 'My Page'
 }),
 defineWebSite({
   name: 'My Site'
 })
])
</script>
  1. 如果你不想使用默认值
export default defineNuxtConfig({
 schemaOrg: {
   default: false
 }
})
  1. 设置身份类型
export default defineNuxtConfig({
 schemaOrg: {
   identity: {
     type: 'Organization', // or 'Person'
     name: 'My Company',
     url: 'https://example.com',
     logo: 'https://example.com/logo.png'
   }
 }
})
  1. 自定义节点
<script lang="ts" setup>
useSchemaOrg([
 {
   '@type': 'DefinedTerm',
   'name': 'Nuxt Schema.org',
   'description': 'Nuxt Schema.org is a Nuxt module for adding Schema.org to your Nuxt app.',
   'inDefinedTermSet': {
     '@type': 'DefinedTermSet',
     'name': 'Nuxt Modules',
   },
 }
])
</script>

更加详细的配置可以参考官方文档:Schema.org

添加 Google Analytics 统计代码

  1. 安装 nuxt-gtag
npx nuxi@latest module add gtag
  1. nuxt.config.ts 添加配置:
export default defineNuxtConfig({
  modules: ['nuxt-gtag'],

  gtag: {
    id: 'G-XXXXXXXXXX'
  }
})
  1. 或者在环境变量中添加 NUXT_PUBLIC_GTAG_ID
NUXT_PUBLIC_GTAG_ID = G-XXXXXXXXXX

添加 Microsoft Clarity 统计代码

  1. 安装 nuxt-clarity-analytics
pnpm add -D nuxt-clarity-analytics
  1. nuxt.config.ts 添加依赖:
export default defineNuxtConfig({
  modules: [
    'nuxt-clarity-analytics'
  ]
})
  1. 在环境变量中添加:
MICROSOFT_CLARITY_ID = 'clarity ID'

添加 Umami 统计代码

  1. 安装 nuxt-umami
pnpm add nuxt-umami
  1. nuxt.config.ts 添加配置:
defineNuxtConfig({
  extends: ['github:ijkml/nuxt-umami']
});
  1. app.config.ts 添加配置:
export default defineAppConfig({
  umami: {
   id: '95653e90-7b8b-4541-b6de-ea5e544d8c2d',
   host: 'https://umami.baiwumm.com',
   useDirective: true,
   version: 2,
   domains: ['dream-site.cn'],
   ignoreLocalhost: true
 }
});
  1. 跟踪事件
<button v-umami="'Event-Name'">
  Event Button
</button>

<button v-umami="{name: 'Event-Name'}">
  as object
</button>

<button v-umami="{name: 'Event-Name', position: 'left', ...others}">
  with event details
</button>

详细文档:nuxt-umami

总结

Nuxt3 集成了很多 SEO Modules,使开发者能够更加高效便捷地做好搜索引擎方面的优化。

好了,这篇文章就到这了,希望对你有所帮助!

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白雾茫茫丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值