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 是一个模块集合,它覆盖了搜索引擎中常用的模块:

  • @nuxtjs/sitemap:网站地图
  • nuxt-simple-robots:蜘蛛爬虫协议
  • nuxt-schema-org:网页标准
  • nuxt-seo-experiments:实验性 SEO 元特征
  • nuxt-og-image:生成动态的社交分享图片
  • nuxt-link-checker:检查失效链接

具体使用方式:

  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.xml 和 robots.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,使开发者能够更加高效便捷地做好搜索引擎方面的优化。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/745987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

倩女幽魂攻略:押镖任务详解!

《倩女幽魂》作为一款受欢迎的角色扮演游戏&#xff0c;押镖任务是其众多任务中具有挑战性和趣味性的一个环节。在押镖过程中&#xff0c;玩家需要通过一系列任务和地图&#xff0c;完成从接镖到运送货物的整个流程。本文将为您详细解析押镖任务的各个方面&#xff0c;包括任务…

维吉尼亚密文解密小程序

维吉尼亚密文解密小程序 这几天在看CTF相关的课程&#xff0c;涉及到古典密码学和近代密码学还有现代密码学。自己编了一个解密小程序。 Vigenere 维吉尼亚密码 维吉尼亚是多表替换密码中比较典型的代表&#xff0c;维吉尼亚密码是在凯撒密码基础上产生的一种加密方法&#…

idea或vscode支持vue语法,ts可解析*.vue

一、ide不能解析vue文件 刚开始导入时&#xff0c;在vscode中的vue文件中内容都是灰色的 ide不能解析vue解决方法&#xff1a; 1.idea或webstorm安装vue.js插件 2.在vscode中 vue2.0的项目安装vetur插件vue3.0及以上的项目安装Vue-official插件&#xff08;之前是Volar&…

批量打造怀旧风情:视频批量剪辑将现代视频打造成怀旧经典老视频效果

在繁忙的现代生活中&#xff0c;我们时常怀念那些旧时光&#xff0c;那些充满岁月痕迹的老电影片段。它们不仅记录了一个时代的风貌&#xff0c;更承载了无数人的情感与记忆。你是否想过&#xff0c;将现代的视频素材打造成这种怀旧经典的老视频效果&#xff0c;让每一帧都充满…

PHP入门

一、环境搭建 无脑&#xff1a; 小皮面板(phpstudy) - 让天下没有难配的服务器环境&#xff01;phpStudy官网2019正式推出phpStudy V8.0版本PHP集成环境&#xff0c;支持Windows与Linux系统&#xff0c;支持WEB面板操作管理&#xff0c;一键网站开发环境搭建配置&#xff0c;…

mac 常用工具快捷键集合

一、vim 快捷键 1、移动光标 h j k l 左 下 上 右 箭头上 上移一行 箭头下 下移一行 0 跳至行首&#xff0c;不管有无缩进&#xff0c;就是跳到第0个字符 ^ 跳至行首的第一个字符 $ 跳至行尾 gg 跳至文首 G 调至文尾 5gg/5G 调至第5行w 跳到下一个字首&#xff0c;按标点或…

高效运维:标准化与智能化的运维流程管理实践

高效运维&#xff1a;标准化与智能化的运维流程管理实践 在信息化建设日益深化的今天&#xff0c;运维流程管理已成为企业确保其信息系统稳定、高效运行的关键手段。通过系统化、标准化的运维流程管理&#xff0c;企业能够有效预防系统故障&#xff0c;提升服务质量&#xff0…

TCP:TCP连接的建立与终止

TCP连接的建立与终止 建立连接第一次握手第二次握手第三次握手 终止连接第一次挥手第二次挥手第三次挥手第四次挥手 T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前&#xff0c;都必须先在双方之间建立一条连接。本文将详细讨论一个T C P连接是如何建立的以及通信…

JJ-20H型水泥胶砂搅拌机

一、 用途和适用范围 水泥胶砂搅拌机是根据中国建材院水泥所的统一图纸制造&#xff0c;符合我国执行国际强度试验方法&#xff08;ISO679&#xff09;的标准设备。也可代替 JC/T722 用作GB/T17671 水泥胶砂试验方法的搅拌机。并可用作美国标准、欧洲标准、日本标准水泥试验的净…

TMGM外汇平台: 纽元未来走势,新西兰即将降息

2024年6月26日&#xff0c;全球金融市场对新西兰联储即将采取的货币政策持续关注。分析师普遍预估新西兰将实施降息政策&#xff0c;这一政策调整预计将对新西兰元&#xff08;纽元&#xff09;的国际交易价值产生重大影响。本文将TMGM深入探讨新西兰经济的当前状况&#xff0c…

最新!计算机类SCI期刊全名单!你想发的顶刊都在这里

【SciencePub学术】近日&#xff0c;2023JCR正式发布&#xff0c;最受瞩目就是各类期刊的最新影响因子排名&#xff0c;本期&#xff0c;小编对计算机类的期刊做了一个整理&#xff0c;供计算机方向的研究学者们参考&#xff01; 来源&#xff1a;WOS数据库官网 完整名单 ※ 本…

简述RocketMQ从了解到使用

概念篇 背景: 随着队列和虚拟主题使用的增加,ActiveMQ IO模块达到了一个瓶颈。我们尽力通过节流、断路器或降级来解决这个问题,但效果并不理想。于是我们尝试了流行的消息传递解决方案Kafka。不幸的是,Kafka不能满足我们的要求,其尤其表现在低延迟和高可靠性方面,详见下…

c++ 智能指针实战分析

一.智能指针的设计思路 智能指针是类模板&#xff0c;再栈上创建智能指针对象。把普通指针交给智能指针对象。智能指针对象过期时&#xff0c;调用析构函数释放普通指针的内存。 智能指针的类型 auto_ptr是C98的标准&#xff0c;c17已经弃用。unique_ptr、shared_ptr和weak_…

从环型到树型:多种网络拓扑结构的优缺点及应用

网络拓扑作为网络设计的基础&#xff0c;对于网络的性能、可靠性和扩展性起着重要作用。作为网络通信工程师&#xff0c;我们不仅需要了解网络拓扑的基本概念&#xff0c;还需深入掌握其在实际网络设计中的应用。本文将详细介绍网络拓扑&#xff0c;包括物理拓扑、逻辑拓扑&…

怎么压缩pdf文件大小,如何压缩pdf文件大小

pdf文件怎么压缩&#xff1f;在当下这个信息爆炸的时代&#xff0c;无论是在工作场所还是校园中&#xff0c;我们经常会面临需要处理大文件的情况&#xff0c;而PDF格式作为一种保留文档结构和布局完整性的理想选择&#xff0c;有时候pdf文件太大&#xff0c;因此&#xff0c;对…

echarts 5.5.0版本下的层叠柱形图,每个值都从0开始,会有覆盖情况

需求&#xff1a; 1、每个公司&#xff0c;需要两个柱子去展示&#xff08;stack: 1是第一个柱子&#xff0c;stack:2,是第二个柱子&#xff09;&#xff1b; 2、必须每个数据都是从0开始&#xff0c;不在上一个值上累加&#xff1b; 3、鼠标滑上去的时候&#xff0c;最大值…

arco.design 利用 a-input-search 和 a-trigger 自己实现一个关键字查询select

先看效果 <div class"search-content" id"map-search-wrapper"><a-triggerpopup-visibleposition"bl"autoFitPopupWidth:popup-offset"4":unmount-on-close"true"trigger"click"popup-container"#m…

Netdiscover基本使用 - 发现局域网中存活主机

目录 0x00 介绍0x01 常用参数0x02 常用方式1. 主动模式2. 被动模式 0x00 介绍 原理&#xff1a;是一个二层&#xff08;数据链路层&#xff09;的ARP发现工具&#xff0c;执行命令的时候可以通过Wireshark查看是基于arp协议的。在不使用DHCP的无线网络上非常有用。 作用&#…

Go使用Gin框架开发的Web程序部署在Linux时,无法绑定监听Ipv4端口

最近有写一部分go语言开发的程序&#xff0c;在部署程序时发现&#xff0c;程序在启动后并没有绑定ipv4的端口&#xff0c;而是直接监听绑定ipv6的端口。 当我用netstat -antup | grep 3601查找我的gin服务启动的端口占用情况的时候发现&#xff0c;我的服务直接绑定了tcp6 &a…

Lua博客网站支持搜索、评论、登录注册

该简易博客示例用于学习网站的基础知识与MySQL数据库。 简述&#xff1a;开源Lua网站开发服务(FastWeb)支持&#xff1a;注册、登录、文章分页、评论分页、简易权限管理和搜索功能。发帖功能支持Markdown(支持记忆功能)图示&#xff1a;