【问题标题】:vue-meta refusing to render server-side on nuxt appvue-meta 拒绝在 nuxt 应用程序上呈现服务器端
【发布时间】:2020-06-23 09:28:34
【问题描述】:

我在nuxt.config.js 中有{src: '~/plugins/vue-meta.js', ssr: true},

index.vue:

  async asyncData({ params, store }) {
    await store.dispatch("articles/getArticle", params.slug);
    return {
      article: store.getters["articles/getArticle"]
    };
  },
  metaInfo() {
    return {
      title: this.article.title,
      meta: [
        {
          vmid: "description",
          hid: "description",
          name: "description",
          content: this.article.meta_tag_content
        },
        {
          property: "og:title",
          hid: "og-title",
          vmid: "og-title",
          content: this.article.title
        },
        {
          property: "og:description",
          hid: "og-description",
          vmid: "og-description",
          content: this.article.meta_tag_content
        },
        {
          property: "og:image",
          hid: "og-image",
          vmid: "og-image",
          content: this.article.small_image_url
        },
        {
          property: "og:type",
          hid: "og-type",
          vmid: "og-type",
          content: "article"
        },
        {
          property: "og:url",
          hid: "og-url",
          vmid: "og-url",
          content: location.origin
        },
        {
          name: "twitter:card",
          hid: "twitter-card",
          vmid: "twitter-card",
          content: this.article.meta_tag_content
        }
      ]
    };
  },

但这些都不会呈现服务器端 - 它只呈现客户端,这意味着 Facebook 不会读取 OG 元元素。

是否需要为 Nuxt 设置其他内容才能呈现此服务器端?

模式在 nuxt.config.js 中设置为“通用”。不管我是使用 generate、run dev 还是 run start,结果都是一样的。

【问题讨论】:

  • 嗯,我刚刚使用一个新的 nuxtjs 创建的项目测试了你的描述,它对我有用吗?我做了什么:创建'~/plugins/vue-meta.js',添加vue-meta的“安装”部分中指定的代码,yarn add vue-meta,按照你说的将插件添加到nuxt.config.js,然后创建一个带有静态 data() 函数和您的 metaInfo() 的简单 index.vue。然后它确实成功地渲染了元信息服务器端。
  • 但也请参阅我的回答,您甚至不需要手动添加 vue-meta 作为默认情况下 nuxt 的一部分。

标签: nuxt.js vue-meta


【解决方案1】:

Nuxt.js 默认已经包含vue-meta。但是,您需要使用head() 而不是metaInfo()

来自vue-meta docs

注意

尽管我们在此页面上讨论了 metaInfo 变量,但请注意 keyName 是可配置的,并且在您的情况下可能会有所不同。例如。 Nuxt.js 使用head 作为keyName

因此,将metaInfo 替换为head 并删除{src: '~/plugins/vue-meta.js', ssr: true}(因为它已经包含在内)然后它应该可以工作(我在一个新项目上测试过)。

【讨论】:

  • 谢谢 - 我试过这样做,现在它根本不渲染元数据。很明显其他地方有问题,但是我继承了这个项目,不知道如何找到问题......
  • 好的,我从其他地方得到了一个可能的解决方案 - 整个 元素都包含在 中。为什么,我不知道。我也不知道为什么head 不起作用但metaInfo 起作用-即使我从 nuxt.config.js 中删除了 vue-meta 插件-也许如果我删除 也可以解决该问题,或者其他奇怪的东西可能导致它!感谢您对此进行调查
猜你喜欢
  • 2018-05-20
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多