【问题标题】:Nuxt.js preview on Facebook/Twitter doesn't work: 404 errorFacebook/Twitter 上的 Nuxt.js 预览不起作用:404 错误
【发布时间】:2020-10-10 02:16:55
【问题描述】:

我有一个使用 Nuxt.js 实现的网站,并希望在 Facebook、Twitter 和 WhatsApp 上共享页面。我必须使用元标记 opengraph,所以我已经包含了它们。当我尝试将页面共享到社交网络时,我看不到元标记的内容。我也看不到图片,标题和描述。

在我的情况下,元标记 opengraph 非常适合并填充在页面中。我已经在几个资源中阅读了如何做到这一点,所以这不是问题。它们位于<head> 标记中。

但问题是当您使用 Facebook 调试器工具查看您的页面预览时,或 https://metatags.io/ 工具。当我编写页面的 url 时,会为这些工具返回一个 404。对于浏览器中的相同 url,您可以正确查看页面的内容。如果您检查页面,您可以看到元标记。 我认为问题在于 Twitter 或 Facebook 正在对我的网址进行 GET 调用,但据我了解,此调用的结果是在浏览器中执行的 Nuxt.js 预渲染页面。在浏览器中,JS 源代码在页面加载时执行,因此它可以注入所有元标记和许多其他内容。我认为这就是 Nuxt.js SSR 的工作方式。水化过程?

所以我的意思是当GET 完成时如何发送完整的 HTML,或者在 Facebook 或 Twitter 中显示我的预览页面的解决方法。

顺便说一句,我已经在 Netlify 中部署了我的网站,我不知道这是否重要。 我的 nuxtjs 应用正在通用模式下运行。

有解决爬虫和机器人问题的想法吗? 任何预渲染选项?

【问题讨论】:

    标签: vue.js facebook-opengraph server-side-rendering share-open-graph nuxtjs


    【解决方案1】:

    我一直在研究,最后我意识到我真正的问题是什么。 主要问题是我将 Nuxt 应用程序部署到 netlify 中。此平台仅允许您将 Nuxt 应用部署为静态资源(静态生成部署,预渲染)。我的意思是,部署 Nuxt 应用程序有三种方法:通用、spa 和通用作为静态模式(静态生成部署,预渲染)。第三种情况是一种特殊情况,在这种情况下,您必须在部署时将所有静态资源创建为 html 页面。为此,您必须使用“npm run generate”命令。就我而言,我有一些动态路线,我必须做一些休息查询才能在每种情况下获得数据。我没有在构建时生成所有 html 页面的所有 db 行。对我来说真的很贵。所以最后的 Nuxt,对于动态路由的情况,它只生成一个 html 页面,但包括作为数据客户端的 js 部分。因此,当 Facebook 或 google 调用 url 时,他们会获取带有 js 的 html,但没有任何数据,因为 js 仅在浏览器中执行,并且当页面通过 rest 获取数据时,它就在那里。因此,Facebook、WhatsApp 的 Twitter 无法获取缺失内容的元数据。此外,这些服务在调用我的网址时会收到 404 http 错误代码,而不是 200 http 代码。因此,不可能将 url 分享到这些社交服务中。 解决方案:或者在构建时为每个资源生成所有 html 页面(案例 3),或者移动到另一个提供商作为 firebase,以便使用快速服务器部署为通用应用程序(案例 1)。 我想我会将其移至 firebase 以实现良好的 SEO 和社交媒体功能。

    另一方面,我改变了我的 head 方法来完成开放图元数据:

      head() {
    return {
      title: `${MyStringHandler.truncate(defaultTitle, 65)}`,
      description: defaultDescription,
      link: [
        {
          rel: 'canonical',
          href: `${routePath}`
        }
      ],
      htmlAttrs: {
        lang: `${language}`
      },
      meta: [
        {
          charset: 'utf-8'
        },
        {
          hid: 'title',
          name: 'title',
          content: `${MyStringHandler.truncate(defaultTitle, 65)}`
        },
        {
          hid: 'description',
          name: 'description',
          content: `${MyStringHandler.truncate(overviewDefault, 155)}`
        },
        {
          hid: 'og:type',
          property: 'og:type',
          content: 'website'
        },
        {
          hid: 'og:title',
          property: 'og:title',
          content: `${MyStringHandler.truncate(defaultTitle, 35)}`
        },
        {
          hid: 'og:description',
          property: 'og:description',
          content: `${MyStringHandler.truncate(overviewDefault, 65)}`
        },
        {
          hid: 'og:image',
          property: 'og:image',
          content: URLHelper.get2XURL(path) // the size has to be more 200px at least 
        },
        {
          hid: 'og:url',
          property: 'og:url',
          content: `www.mydomain.com${routePath}`
        },
        {
          hid: 'og:site_name',
          property: 'og:site_name',
          content: `mydomain.com`
        },
        {
          hid: 'og:locale',
          property: 'og:locale',
          content: `es`
        },
        {
          hid: 'og:image:type',
          property: 'og:image:type',
          content: 'image/jpeg'
        },
        {
          hid: 'twitter:card',
          property: 'twitter:card',
          content: `${MyStringHandler.truncate(overviewDefault, 65)}`
        },
        {
          hid: 'twitter:site',
          property: 'twitter:site',
          content: 'mydomain'
        },
        {
          hid: 'twitter:title',
          name: 'twitter:title',
          content: `${MyStringHandler.truncate(defaultTitle, 35)}`
        },
        {
          hid: 'twitter:description',
          name: 'twitter:description',
          content: `${MyStringHandler.truncate(overviewDefault, 65)}`
        },
        {
          hid: 'twitter:creator',
          property: 'twitter:creator',
          content: 'mydomain'
        },
        {
          hid: 'twitter:image:src',
          property: 'twitter:image:src',
          content: URLHelper.getImageURL(path)
        },
        {
          hid: 'twitter:domain',
          property: 'twitter:domain',
          content: 'mydomain.com'
        },
        {
          hid: 'twitter:image',
          name: 'twitter:image',
          content: URLHelper.getImageURL(path)
        },
        {
          hid: 'twitter:url',
          name: 'twitter:url',
          content: `www.mydomain.com${routePath}`
        }
      ]
    }
    

    }

    您可以将元数据测试到下一页:

    更新: nuxt 可以在部署时使用 npm run generate 生成您的静态资源,这些资源是 SEO-ables。元标记运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 2015-05-08
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      相关资源
      最近更新 更多