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



    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.ts
    
    export default defineNuxtConfig({
      app: {
        head: {
          charset: "utf-8",
          viewport: "width=device-width, initial-scale=1",
          title: "Nuxt3学习实践",
          meta: [
            {
              name: "description",
              content: "菜鸟小白nuxt3从入门到精通,边理论边实践",
            },
          ],
        },
      },
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

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

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

    useHead

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

    // app.vue
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    我们建议您查看useHeaduseHeadSafe组件。

    useSeoMeta 和 useServerSeoMeta

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

    // pages/about.vue
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    了解更多关于useSeoMetauseServerSeoMeta可组合项的信息。

    Components

    Nuxt 提供了</code>、<code><Base></code>、<code><NoScript></code>、<code><Style></code>、<code><Meta></code>、<code><Link></code>、<code><Body></code>、<code><Html></code>和<code><Head></code>组件,这样就可以在组件模板中直接与元数据交互。<br> 由于这些组件名称与本地 HTML 元素相匹配,因此在模板中将它们大写是非常重要的。<br> <code><Head></code>和<code><Body></code>可以接受嵌套的元标签(出于美观的考虑),但这对嵌套的元标签在最终 HTML 中的呈现位置没有影响。</p> <pre data-index="3" class="set-code-hide prettyprint"><code class="prism language-vue has-numbering" onclick="mdcp.signin(event)" style="position: unset;">// pages/login.vue <template> <div> <Head> <Title>登录页

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    特性

    响应式 Reactivity

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

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

    • useHead 响应式应用

      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • useSeoMeta 响应式应用

      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    • 标签组件响应式应用

      
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    标题模板 Title Template

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

    // app.vue
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    Body Tags

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

    • head:将标记添加到页面的 标签内;
    • bodyOpen:将标记添加到页面的 标签的开始;
    • bodyClose:将标记添加到页面的 标签的末尾;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    示例 Examples

    definePageMeta

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

    
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    动态设置标题

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

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    动态添加外部 CSS

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

      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    • 使用组件来启用谷歌字体

      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
  • 相关阅读:
    腾讯面试——机器学习/算法面试案例集
    token登录的实现
    【给你的臭宝推送天气的专属公众号】--理工男的浪漫
    Vue | 自定义组件双向绑定基础用法
    【Docker】docker构建java项目
    使用SemanticKernel 进行智能应用开发(2023-10更新)
    Three.js Shader 与自定义材质—深入理解与应用
    Spring Boot 教程:使用 Spring Boot 整合 JdbcTemplate
    零基础搭建网站,快解析远程调试无需公网IP
    【毕设必备】手把手带你用Python搭建一个简单的后端服务- API的创建,前后端交互的数据传递,GET,POST,JSON,FLASK
  • 原文地址:https://blog.csdn.net/assokoo123/article/details/133366147