当前位置: 首页 > news >正文

Nuxt 菜鸟入门学习笔记七:SEO 和 Meta 设置

文章目录

  • SEO 和 Meta
    • 默认值
    • useHead
    • useSeoMeta 和 useServerSeoMeta
    • Components
    • Meta 对象数据类型格式
    • 特性
      • 响应式 Reactivity
      • 标题模板 Title Template
      • Body Tags
    • 示例 Examples
      • definePageMeta
      • 动态设置标题
      • 动态添加外部 CSS

Nuxt
Nuxt 官网地址: https://nuxt.com/

SEO 和 Meta

Nuxt 可以通过 3 种方式提高 Nuxt 应用程序的搜索引擎优化:

  • 强大的头部配置nuxt.config
  • 组合式函数useHead
  • 组件HeadTitleMeta

默认值

在开箱即用的情况下,Nuxt 提供了合理的默认值,如:

  • charset: utf-8
  • viewport: width=device-width, initial-scale=1

如果需要,可以覆盖这些默认值,还可以设置 title 和 meta,如下代码示例:

// nuxt.config.tsexport default defineNuxtConfig({app: {head: {charset: "utf-8",viewport: "width=device-width, initial-scale=1",title: "Nuxt3学习实践",meta: [{name: "description",content: "菜鸟小白nuxt3从入门到精通,边理论边实践",},],},},
});

上面的代码运行结果可以通过在浏览器中查看网页源代码。

nuxt.config.ts中提供app.head属性允许自定义整个应用程序的head

缺点:这种方式无法使用响应式数据。
如果需要,推荐在 app.vue 或者在页面中使用useHead组合式函数。

useHead

useHead组合式函数允许我们通过Unhead以编程和响应式的方式管理页面的head标签。
与所有组合式函数一样,它只能用在组件的setup函数和生命周期钩子中。

// app.vue<template><div><NuxtLayout><NuxtPage /></NuxtLayout></div>
</template><script setup lang="ts">
useHead({title: "Nuxt3学习实践 ~ 坚持",meta: [{ name: "keywords", content: "Nuxt Vue SSR Typescript" }],bodyAttrs: {class: "page-container",},script: [{children: "console.log('Hello World')",},],
});
</script>

我们建议您查看useHead和useHeadSafe组件。

useSeoMeta 和 useServerSeoMeta

通过useSeoMetauseServerSeoMeta组合式函数,可以将网站的 SEO 元标签定义为一个完全支持 TypeScript 的扁平对象。
这可以帮助您避免错别字和常见错误,例如使用name而不是property

// pages/about.vue<script setup lang="ts">
useSeoMeta({title: "@about page",ogTitle: "@about page ..ogTitle",description: "@about page ..description",ogDescription: "@about page ..ogDescription",ogImage: "https://example.com/image.png",twitterCard: "summary_large_image",
});
</script>

了解更多关于useSeoMeta和useServerSeoMeta可组合项的信息。

Components

Nuxt 提供了<Title><Base><NoScript><Style><Meta><Link><Body><Html><Head>组件,这样就可以在组件模板中直接与元数据交互。
由于这些组件名称与本地 HTML 元素相匹配,因此在模板中将它们大写是非常重要的。
<Head><Body>可以接受嵌套的元标签(出于美观的考虑),但这对嵌套的元标签在最终 HTML 中的呈现位置没有影响。

// pages/login.vue<template><div><Head><Title>登录页</Title><Meta name="description" :content="message" /><Styletype="text/css"children="body { background-color: lightgreen; }"/></Head><h1>@ login page</h1></div>
</template><script setup lang="ts">
const message = ref("Hello World");
</script><style lang="scss" scoped></style>

Meta 对象数据类型格式

以下是用于useHeadapp.head和组件的非响应式类型。

interface MetaObject {title?: string;titleTemplate?: string | ((title?: string) => string);templateParams?: Record<string, string | Record<string, string>>;base?: Base;link?: Link[];meta?: Meta[];style?: Style[];script?: Script[];noscript?: Noscript[];htmlAttrs?: HtmlAttributes;bodyAttrs?: BodyAttributes;
}

特性

响应式 Reactivity

所有属性都支持响应式,包括 computed、getters 和 reactive。

建议
computed 建议使用 getters(() => value) 而不是computed(() => value)

  • useHead 响应式应用

    <script setup lang="ts">
    const description = ref("My amazing site.");useHead({meta: [{ name: "description", content: description }],
    });
    </script>
    
  • useSeoMeta 响应式应用

    <script setup lang="ts">
    const description = ref("My amazing site.");useSeoMeta({description,
    });
    </script>
    
  • 标签组件响应式应用

    <script setup>
    const description = ref("My amazing site.");
    </script><template><div><Meta name="description" :content="description" /></div>
    </template>
    

标题模板 Title Template

可以使用titleTemplate选项为自定义网站标题提供一个动态模板,例如,在每个页面的标题中添加网站名称。
titleTemplate可以是一个字符串(其中%stitle属性的值替换),也可以是一个函数。
如果使用函数(完全控制),则不能在nuxt.config中设置,建议在app.vue文件中设置,它将适用于网站的所有页面:

// app.vue<script setup lang="ts">
useHead({titleTemplate: (titleChunk) => {return titleChunk ? `${titleChunk} - www.51blog.xyz` : "www.51blog.xyz";},
});
</script>

现在,每个页面标题的后面都增加了 - www.51blog.xyz

Body Tags

可以在适用的标记上增加 tagPosition 选项,将它们追加到页面的不同位置。
tagPosition 可选值:

  • head:将标记添加到页面的 <head> 标签内;
  • bodyOpen:将标记添加到页面的 <body> 标签的开始;
  • bodyClose:将标记添加到页面的 <body> 标签的末尾;
<script setup lang="ts">
// pages/about.vueuseHead({script: [{src: "https://third-party-script.com",tagPosition: "bodyClose",},],
});
</script>

示例 Examples

definePageMeta

pages/目录中,您可以使用definePageMetauseHead来设置基于当前路由的元数据。
例如,可以首先设置当前页面的标题(这是在构建时通过宏提取的,因此无法动态设置):

<script setup>
definePageMeta({title: "Some Page",
});
</script>

然后在布局文件中,您可以使用之前设置的路由元数据(Route Meta):

<script setup>
const route = useRoute();useHead({meta: [{ property: "og:title", content: `App Name - ${route.meta.title}` }],
});
</script>

动态设置标题

在下面的示例中,titleTemplate既可以设置为带有%s占位符的字符串,也可以设置为函数,这样就可以为 Nuxt 应用程序的每个路由动态设置页面标题,具有更大的灵活性:

<script setup>
useHead({// 字符串形式: `%s` 将被 title 替换titleTemplate: "%s - Site Title",// 函数形式titleTemplate: (productCategory) => {return productCategory ? `${productCategory} - Site Title` : "Site Title";},
});
</script>

nuxt.config也是设置页面标题的另一种方法。但是,nuxt.config不允许页面标题是动态的。因此,建议在app.vue文件中使用titleTemplate添加动态标题,然后将其应用于 Nuxt 应用程序的所有路由。

动态添加外部 CSS

  • 使用useHead组合式函数的 link 属性:

    <script setup lang="ts">
    useHead({link: [{rel: "preconnect",href: "https://fonts.googleapis.com",},{rel: "stylesheet",href: "https://fonts.googleapis.com/css2?family=Roboto&display=swap",crossorigin: "",},],
    });
    </script>
    
  • 使用组件来启用谷歌字体

    <template><div><Link rel="preconnect" href="https://fonts.googleapis.com" /><Linkrel="stylesheet"href="https://fonts.googleapis.com/css2?family=Roboto&display=swap"crossorigin=""/></div>
    </template>
    

相关文章:

Nuxt 菜鸟入门学习笔记七:SEO 和 Meta 设置

文章目录 SEO 和 Meta默认值useHeaduseSeoMeta 和 useServerSeoMetaComponentsMeta 对象数据类型格式特性响应式 Reactivity标题模板 Title TemplateBody Tags 示例 ExamplesdefinePageMeta动态设置标题动态添加外部 CSS Nuxt 官网地址&#xff1a; https://nuxt.com/ SEO 和 …...

栈(Stack)和队列(Queue)

栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;都是常见的数据结构&#xff0c;用于存储和操作一组元素。 栈是一种后进先出&#xff08;Last-In-First-Out&#xff0c;LIFO&#xff09;的数据结构&#xff0c;类似于把元素堆在一起形成的一堆物体&…...

LeetCode 75 part 06 栈

2390.从字符串中移除星号 思路&#xff1a;把元素加入栈中&#xff0c;遇到 * 号直接弹出栈顶元素 class Solution { public:string removeStars(string s) {stack<char>st;for(int i0;i<s.size();i){//字符加入栈&#xff0c;遇到星号弹出栈if(s[i]!*) st.push(s[i…...

19.组合模式(Composite)

意图&#xff1a;将对象组成树状结构以表示“部分&#xff0d;整体”的层次结构&#xff0c;使得Client对单个对象和组合对象的使用具有一致性。 上下文&#xff1a;在树型结构的问题中&#xff0c;Client必须以不同的方式处理单个对象和组合对象。能否提供一种封装&#xff0c…...

应用在IPM接口隔离领域中的光电耦合器

IPM即Intelligent Power Module(智能功率模块)的缩写&#xff0c;它是通过优化设计将IGBT连同其驱动电路和多种保护电路封装在同一模块内&#xff0c;使电力变换装置的设计者从繁琐的IGBT驱动和保护电路设计中解脱出来&#xff0c;大大降低了功率半导体器件的应用难度&#xff…...

rust引用

一、引用是什么 引用&#xff0c;又叫做借用。是一个指针类型。 引用是指向数据的指针&#xff0c;它允许我们以只读或可变的方式访问数据&#xff0c;而不获取数据的所有权。 编译器静态地保证了引用总是指向有效的对象。也就是说&#xff0c;当存在引用指向一个对象时&#…...

Android AMS——Activity Pause(八)

在前面的文章《Android AMS——ATMS解析(四)》中,介绍了 Activity 的启动流程,其中调用到 Task.resumeTopActivityInnerLocked() 时,会先调用 startPausingLocked 暂停前一个 Activity,在启动新的 Activity。 这里我们就看以下 Activity 的暂停流程。 一、Activity暂停流…...

【数据结构】冒泡排序,快速排序的学习知识总结

目录 1、冒泡排序 1.1 算法思想 1.2 代码实现 方式一&#xff1a;顺序表 方式二&#xff1a;链表 2、快速排序 2.1 算法思想 2.2 代码实现 2.3 例题分析 1、冒泡排序 1.1 算法思想 冒泡排序是一种简单的排序算法&#xff0c;它的基本思想是从数组的第一个元素开始…...

ubuntu终端 中文显示 改为 英文显示

临时有效 如果希望终端显示英文&#xff0c;可以在终端设置环境变量 export LC_ALLC 若希望取消环境变量 unset LC_ALL 实际是改变系统两个环境变量 $LANGUAGE 和 $LANG的值&#xff08;可以用echo $LANG 来查看值&#xff09; 永久有效&#xff1b; 1.打开终端&#xf…...

ChatGPT Prompting开发实战(十二)

一、如何开发prompts实现个性化的对话方式 通过设置“system”和“user”等roles&#xff0c;可以实现个性化的对话方式&#xff0c;并且可以结合参数“temperature”的设定来差异化LLM的输出内容。在此基础上&#xff0c;通过构建一个餐馆订餐对话机器人来具体演示对话过程。…...

springboot整合eureka

1、直入主题&#xff0c;导入pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…...

记录一个 GUI 库的对比测试结果

1&#xff0c;Java 的 JavaFX 2&#xff0c;golang 的 Fyne 1, Java 测试的是一个俄罗斯方块的 GUI 程序。一切正常。 2&#xff0c;Golang github 的原仓库网络问题&#xff0c;没能测试上&#xff0c;使用以下库 https://gitee.com/mirrors/Fyne 下载代码后提示“编译失…...

解决 MyBatis-Plus 中增加修改时,对应时间的更新问题

问题&#xff1a;在添加修改时&#xff0c;对应的 create_time 与 insert_time 不会随着添加修改而自动的更新时间 第一步&#xff1a;首先在对应的属性上&#xff0c;加上以下注解 如果只添加以下注解&#xff0c;在增加或者修改时&#xff0c;可能对应的 LocalDateTime 会出…...

【力扣2057】值相等的最小索引

&#x1f451;专栏内容&#xff1a;力扣刷题⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接&#xff1a;值相等的最小索引 给你一个下标从 0 开始的整数数组 nums …...

计算机图像处理:图像轮廓

图像轮廓 图像阈值分割主要是针对图片的背景和前景进行分离&#xff0c;而图像轮廓也是图像中非常重要的一个特征信息&#xff0c;通过对图像轮廓的操作&#xff0c;就能获取目标图像的大小、位置、方向等信息。画出图像轮廓的基本思路是&#xff1a;先用阈值分割划分为两类图…...

解决java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset.的错误

文章目录 1. 复现错误2. 分析错误3. 解决问题3.1 下载Hadoop3.2 配置Hadoop3.3 下载winutils3.4 配置winutils 1. 复现错误 今天在运行同事给我的项目&#xff0c;但在项目启动时&#xff0c;报出如下错误&#xff1a; java.io.FileNotFoundException: java.io.FileNotFoundEx…...

软件设计中常见的设计模式

以下是常见的设计模式&#xff0c;并且给出了应用场景&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09;&#xff1a;用于创建对象&#xff0c;隐藏了具体对象的创建细节&#xff0c;客户端只需要通过工厂接口获取对象即可。应用场景包括&#xff1a;当需要根据不…...

为什么我的remix没有injected web3

原因 Remix近期做了升级&#xff0c;去除了Web3的选项&#xff0c;您在进行部署的时候&#xff0c;可以选择injected provider metamask&#xff0c;同样能连接到Web3钱包哦。具体如下图所示&#xff1a;...

第1章 数据结构绪论

1.1 开场白 1.2 你数据结构怎么学的 1.3 数据结构起源 早期人们都把计算机理解为数值计算工具&#xff0c;就是感觉计算机当然是用来计算的&#xff0c;所以计算机解决问题&#xff0c;应该是先从具体问题中抽象出一个适当的数据模型&#xff0c;设计出一个解此数据模型的算…...

现代 GPU 容易受到新 GPU.zip 侧通道攻击

来自四所美国大学的研究人员开发了一种新的 GPU 侧通道攻击&#xff0c;该攻击利用数据压缩在访问网页时泄露现代显卡中的敏感视觉数据。 研究人员通过 Chrome 浏览器执行跨源 SVG 过滤器像素窃取攻击&#xff0c;证明了这种“ GPU.zip ”攻击的有效性。 研究人员于 2023 年 …...

告别网络盲区:用RTL8811CU让旧笔记本变身Linux双频WiFi网卡/AP二合一网关

旧硬件新生&#xff1a;用RTL8811CU打造Linux双频无线网关实战指南 每次升级笔记本后&#xff0c;那些陪伴我们多年的旧设备往往被束之高阁。作为一名网络技术爱好者&#xff0c;我发现这些"退役"笔记本其实蕴藏着巨大的再利用价值——特别是当它们遇到RTL8811CU这样…...

Arduino Uno R3 bootloader烧写避坑全记录:从USBasp驱动安装到熔丝位设置(Win10/11实测)

Arduino Uno R3 bootloader烧写实战指南&#xff1a;从驱动配置到熔丝位安全操作 当一块全新的Atmega328P芯片静静躺在工作台上时&#xff0c;它就像一张白纸&#xff0c;等待着被赋予生命。作为硬件开发者&#xff0c;我们常常需要为这些空白芯片注入灵魂——烧写bootloader。…...

优化ESP32 ADF 音频问题

可以&#xff0c;现在已经进入音质调试阶段了&#xff0c;不是“能不能播放”的阶段。 你现在的问题大概率不是一个单点问题&#xff0c;而是下面几类之一&#xff1a; 1. 音量 / 增益太大&#xff0c;导致 ES8388 或 MD8002A 功放削顶失真 2. I2S 时钟不准&#xff0c;导致声音…...

液态硅胶注塑加工供应商推荐

随着液态硅胶&#xff08;LSR&#xff09;在医疗、母婴、电子、汽车等多个领域的广泛应用&#xff0c;选择一个可靠的液态硅胶注塑加工供应商变得至关重要。作为天沅智能制造科技有限公司&#xff08;简称TYM&#xff09;&#xff0c;我们不仅深耕于液态硅胶注射成型机械的设计…...

《凰标》与《第一大道》:同一宇宙下的龙凤双璧@凤凰标志

龙凤双璧&#xff1a;海棠山铁哥文学宇宙宣言——《第一大道》《凰标》世界观联动白皮书一、时代之问&#xff1a;当网文只剩“单兵”市场痛点铁哥答案单兵叙事双IP共生世界观割裂同源宇宙IP不成体系闭环叙事 二、宇宙基石&#xff1a;一破一立的双璧格局 #mermaid-svg-A2eFhZn…...

实战解析:用高斯过程回归搞定不确定性预测

1. 高斯过程回归能解决什么问题 我第一次接触高斯过程回归是在一个金融风控项目里。当时我们需要预测未来三个月的用户违约概率&#xff0c;但传统机器学习模型只能给出一个冰冷的数字预测&#xff0c;完全无法体现预测的可信程度。这就像天气预报只告诉你"明天会下雨&quo…...

从日偏食图像处理开始:手把手在VS2019里跑通你的第一个OpenCV 4.3程序

从日偏食图像处理开始&#xff1a;手把手在VS2019里跑通你的第一个OpenCV 4.3程序 当那张日偏食照片第一次在屏幕上成功显示时&#xff0c;仿佛打开了计算机视觉的大门。本文将带你从零开始&#xff0c;用VS2019和OpenCV 4.3实现这个充满仪式感的"Hello World"——不…...

别再折腾官网了!手把手教你从Kaggle快速下载20bn-jester-v1手势数据集(附完整合并教程)

高效获取20bn-jester-v1手势数据集的Kaggle实战指南 在计算机视觉和手势识别领域&#xff0c;20bn-jester-v1数据集因其大规模、高质量的视频标注而备受研究者青睐。然而&#xff0c;许多开发者在第一步——数据获取上就遇到了意想不到的障碍。官方下载渠道不仅速度缓慢&#…...

新加坡高校 Canvas 攻击事件影响评估与安全治理研究

摘要 2026 年 5 月发生的 Canvas 学习平台全球供应链攻击事件&#xff0c;对新加坡国立大学、新加坡社科大学、新加坡管理学院等高校造成服务中断与数据泄露风险&#xff0c;成为教育数字化场景下第三方平台安全风险的典型案例。本次攻击由 Shiny Hunters 组织实施&#xff0c;…...

运维实战:ESXi主机物理网卡闪断致部分VM网络中断的排查与应急恢复

1. 故障现象与初步判断 那天凌晨2点15分&#xff0c;值班手机突然响起刺耳的告警声。监控系统显示&#xff0c;ESXi主机上的三台关键业务虚拟机网络连接中断&#xff0c;而其他虚拟机却运行正常。这种部分VM断网的情况立刻引起了我的警觉——这通常意味着问题出在物理层而非虚拟…...