如何在 Vue Meta 3 中创建自定义元标签?

How to create custom meta tags in Vue Meta 3?

我正在使用 Vue Meta 3 向网站提供元数据。 API 是 here

我不明白如何提供自定义元标记(例如 og:type 等 Open Graph 标记)。这是我在组件中尝试做的事情:

setup() {
    useMeta({
      title: "Homepage",
      meta: [
          {name: "hunky:dory", content: "website"}
      ],
      description: "This is the homepage."
    })
  },

得到的HTML输出结果是这样的:

<head>
 <title>Homepage</title>
 <meta name="description" content="This is the homepage.">
 <meta name="meta" content="website"> <!-- should be <meta name="hunky:dory content="website"> -->
</head>

如果我将代码更改为:

setup() {
    useMeta({
      title: "Homepage",
      "hunky:dory": [
          {content: "website"}
      ],
      description: "This is the homepage."
    })
  },

我得到非法的HTML输出:

<head>
     <title>Homepage</title>
     <meta name="description" content="This is the homepage.">
     <hunky:dory>website</hunky:dory> <!-- total nonsense -->
    </head>

如何让输出为:

<head>
         <title>Homepage</title>
         <meta name="description" content="This is the homepage.">
         <meta name="hunky:dory" content="website">
        </head>

让 og meta 工作有两个部分 -- 我想我可以帮助完成第 1 部分:

  1. 更正 vue-meta 语法
  2. 服务器端呈现 (SSR)

第 1 部分:Vue 3 的 vue-meta

我用 vue-class-component 写了这个,它似乎有效:

meta = setup(() => useMeta(computed(() => ({
  title: this.event?.name ?? 'Event not found',
  og: {
    image: this.event?.bannerUrl ?? 'http://yourwebsite.com/images/default-banner.png'
  }
}))))

...大概在 vanilla Vue 3 中转化为:

setup() {  
  useMeta(
    computed(() => ({
      title: this.event?.name ?? 'Event not found',
      og: {
        image: this.event?.bannerUrl ?? 'http://yourwebsite.com/images/default-banner.png'
      }
    }))
  )
}

结果:

<meta property="og:image" content="http://cloudstorage.com/images/event-123.png">

参考文献:

第 2 部分:SSR

完成第 1 部分后,我意识到我没有设置 SSR...所以我只为我的用户呈现元数据,而不是为 Facebook 的爬虫(不是很有用)。恐怕我还没有在我的项目中解决这个问题; 也许其他人可以参与该部分!

到那时,也许这会让你开始:

注意:vue-metaNuxt GitHub 组织下 => 你可以考虑迁移到 Nuxt v3(它建立在Vue 的顶部):