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

简介: 这篇文章介绍了如何为Nuxt.js项目添加favicon图标和TDK(标题、描述、关键词),安装@nuxtjs/seo模块,以及如何设置Robots、Sitemap、OG Image、Schema.org、Experiments等。文章还提到了添加Google Analytics、Microsoft Clarity和Umami统计代码的方法。文章最后总结称,Nuxt.js 3集成了很多SEOModules,使开发者能够更加高效便捷地做好搜索引擎方面的优化。

添加 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: []
    }
    })
    
    AI 代码解读
  2. 使用 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>
    
    AI 代码解读
  3. 使用 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>
    
    AI 代码解读
  4. /pages/ 目录中可以使用 definePageMeta 来根据当前路由设置元数据
    <script setup lang="ts">
    definePageMeta({
          
          
    title: 'Dream Site'
    })
    </script>
    
    AI 代码解读
  5. 动态标题
    <script setup lang="ts">
    useHead({
          
          
    // 作为字符串,
    // 其中`%s`会被标题替换
    titleTemplate: '%s - Dream Site',
    // ... 或者作为一个函数
    titleTemplate: (productCategory) => {
          
          
    return productCategory
      ? `${
            
            productCategory} - Dream Site`
      : 'Dream Site'
    }
    })
    </script>
    
    AI 代码解读

官方文档:SEO和Meta

安装 @nuxtjs/seo 模块

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

具体使用方式:

  1. @nuxtjs/seo 插件:
    npx nuxi@latest module add seo
    
    AI 代码解读
  2. 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 },
    }
    })
    
    AI 代码解读

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

Robots

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

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

Sitemap

  1. 禁用 URL 模式的索引
    export default defineNuxtConfig({
         
         
    routeRules: {
         
         
    // Don't add any /secret/** URLs to the sitemap.xml
    '/secret/**': { robots: false },
    }
    })
    
    AI 代码解读
  2. 对于所有其他情况,您可以使用 includeexclude 模块选项来过滤 url
    export default defineNuxtConfig({
         
         
    sitemap: {
         
         
    // exclude all URLs that start with /secret
    exclude: ['/secret/**'],
    // include all URLs that start with /public
    include: ['/public/**'],
    }
    })
    
    AI 代码解读
  3. 设置 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>
    
    AI 代码解读
  4. 缓存时间

    export default defineNuxtConfig({
         
         
    sitemap: {
         
         
    cacheMaxAgeSeconds: 3600 // 1 hour
    }
    })
    
    AI 代码解读
  5. 自定义样式

    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%' },
    ],
    },
    })
    
    AI 代码解读

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

OG Image

  1. 使用可组合 defineOgImageComponent 来定义主页的 og:image
    <script lang="ts" setup>
    defineOgImageComponent('NuxtSeo')
    </script>
    
    AI 代码解读
  2. 在浏览器中访问主页并打开 Nuxt DevTools (Shift + Alt + D)
    0cfab565q2w6en3x0lrwjn9wgpicott2.png

  3. 自定义模板

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

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

Schema.org

  1. 配置默认值
    <script lang="ts" setup>
    useSchemaOrg([
    defineWebPage({
          
          
    name: 'My Page'
    }),
    defineWebSite({
          
          
    name: 'My Site'
    })
    ])
    </script>
    
    AI 代码解读
  2. 如果你不想使用默认值
    export default defineNuxtConfig({
         
         
    schemaOrg: {
         
         
    default: false
    }
    })
    
    AI 代码解读
  3. 设置身份类型
    export default defineNuxtConfig({
         
         
    schemaOrg: {
         
         
    identity: {
         
         
      type: 'Organization', // or 'Person'
      name: 'My Company',
      url: 'https://example.com',
      logo: 'https://example.com/logo.png'
    }
    }
    })
    
    AI 代码解读
  4. 自定义节点
    <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>
    
    AI 代码解读

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

添加 Google Analytics 统计代码

  1. 安装 nuxt-gtag
    npx nuxi@latest module add gtag
    
    AI 代码解读
  2. nuxt.config.ts 添加配置:

    export default defineNuxtConfig({
         
         
    modules: ['nuxt-gtag'],
    
    gtag: {
         
         
     id: 'G-XXXXXXXXXX'
    }
    })
    
    AI 代码解读
  3. 或者在环境变量中添加 NUXT_PUBLIC_GTAG_ID
    NUXT_PUBLIC_GTAG_ID = G-XXXXXXXXXX
    
    AI 代码解读

添加 Microsoft Clarity 统计代码

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

添加 Umami 统计代码

  1. 安装 nuxt-umami
    pnpm add nuxt-umami
    
    AI 代码解读
  2. nuxt.config.ts 添加配置:
    defineNuxtConfig({
         
         
    extends: ['github:ijkml/nuxt-umami']
    });
    
    AI 代码解读
  3. 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
    }
    });
    
    AI 代码解读
  4. 跟踪事件

    <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>
    
    AI 代码解读

    详细文档:nuxt-umami

总结

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

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

目录
打赏
0
1
0
0
54
分享
相关文章
SEO 基础知识
SEO 基础知识遇上圣诞节
146 0
怎么做谷歌SEO?
答案是:做足够多的GPB外链+足够多的优质内容。 谷歌搜索引擎优化(SEO)是提升网站在线可见性的关键步骤。 正确进行谷歌SEO可以显著提升您的网站在谷歌搜索结果中的排名,从而提升网站流量和转化率。 以下是关于怎么做谷歌SEO的一些关键步骤。
160 0
怎么做谷歌SEO?
谷歌seo搜索引擎优化怎么做?
答案是:谷歌seo搜索引擎优化需要做足够多的GPB外链+足够多的优质内容。 SEO在当今数字化时代的网站推广中占有重要的位置,特别是在谷歌这样的大型搜索引擎上。 为了使您的网站在谷歌上获得更好的排名,以下是一些建议和策略。 关键词策划 确定目标关键词 首先,您需要知道目标用户在谷歌上搜索什么内容。 使用关键词规划工具,研究与您网站内容相关的关键词。
168 0
谷歌seo搜索引擎优化怎么做?
谷歌SEO搜索引擎优化怎么做?
答案是:做足够多的GPB外链+足够多的优质内容。 优化网站结构 优化网站的结构能够提高谷歌搜索引擎的爬取效率,从而提升SEO效果。 提高网站的导航性 清晰、简洁的导航不仅有利于用户的使用体验,也方便谷歌的爬虫程序对网站的抓取。 构建清晰的URL结构 URL结构的清晰可以帮助谷歌更好地理解你网站的内容和结构,从而提升你的谷歌SEO效果。 优化网页元素 网页元素的优化可以帮助谷歌搜索引擎更好地理解你的网页内容。
158 0
谷歌SEO搜索引擎优化怎么做?
做谷歌seo要发大量文章吗?谷歌seo现在还好做么?
因为谷歌是一个智能搜索引擎,它不是人,也就无法读取内容里所表达的一些情感,细腻的情绪,个人色彩等。
152 0
做谷歌seo要发大量文章吗?谷歌seo现在还好做么?
SEO笔记
SEO笔记
95 0
【简历加分】hexo框架搭建个人博客站点,手把手教学。
作为应届毕业生或者1-3年工作经验的程序员拥有自己的个人博客站点,绝对是简历的加分项,然而学习的成本确实非常的低,只要几十分钟就能搭建好自己的个人博客。闲话不多说,下面我们就开始动手来搭...
293 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等