【问题标题】:Social Cards with Gatsby problems有盖茨比问题的社交卡
【发布时间】:2020-04-23 09:41:56
【问题描述】:

我正在尝试让社交卡出现在我的网站上。我正在使用 graphQL 从内容中提取数据,这将返回我的图像 - 例如,我将获取 backgroundImage.fluid 并将其放入 gatsby 中,它工作正常。

但是,当我尝试将此图像放入 SEO 卡时,它并没有按预期工作,也没有任何显示 - 我认为是因为元描述无法将其识别为图像,因为 Gatsby 图像正在做一些聪明的事情。

这是 SEO 组件

function SEO({ description, lang, meta, title, mainImage, pathname , defaultImage}) {
  const { site } = useStaticQuery(
    graphql`
      query {
        site {
          siteMetadata {
            title
            description
            author
            siteUrl
            defaultImage

          }
        }
      }
    `
  )

  const metaDescription = description || site.siteMetadata.description


  return (
    <Helmet
      htmlAttributes={{
        lang,
      }}
      title={title}
      titleTemplate={`%s | ${site.siteMetadata.title}`}

      meta={[
        {
          name: `description`,
          content: metaDescription,
        },
        {
          property: `og:title`,
          content: title,
        },
        {
          property: `og:image`,
          content: mainImage,
        },
        {
          property: `og:description`,
          content: metaDescription,
        },
        {
          property: `og:type`,
          content: `website`,
        },
        {
          name: `twitter:card`,
          content: `summary`,
        },
        {
          name: `twitter:creator`,
          content: site.siteMetadata.author,
        },
        {
          name: `twitter:title`,
          content: title,
        },
        {
          name: `twitter:image`,
          content: mainImage,
        },
        {
          name: `twitter:description`,
          content: metaDescription,
        },

      ]

        .concat(meta)}
    />
  )}

这是组件


    <SEO
          title={name}
          mainImage={mainImage.fluid.src}
        />

这将在使用 gatsby-image 的页面上工作




   <Img fluid={mainImage.fluid} imgStyle={{
          objectFit: "contain",
        }} />

有人有什么想法吗?

【问题讨论】:

  • 您希望图像显示在哪里? SEO 图像应该是图像的绝对路径。
  • @ksav 希望它在您在 twitter / whatsapp 等上分享内容时显示出来

标签: javascript reactjs gatsby


【解决方案1】:

根据为mainImage 创建图像节点的源插件,您可能会得到一个不包含域名的相对路径。这就是 gatsby-transformer-sharp 所做的,因为插件不知道您的部署。由于 OpenGraph 图像需要完整的 url,因此它本身无法工作。

在这种情况下,修复非常简单:只需将协议和域名添加到 mainImage.fluid.src 字符串之前,如下所示:

<SEO
  title={name}
  mainImage={`https://www.example.org${mainImage.fluid.src}`}
/>

【讨论】:

  • 适用于我在文件系统中的图像 - 但是从我的动态查询中我得到这个 //images.ctfassets.net/ihrhbx3mn09q/6VHayDn2Quzu34YhWRPkjJ/b06810b362bc9d6864e557b4ecadc/WhatsApp_Image_2020-04-22_at_15。 .jpeg?w=500&h=500&q=50 哪个不能添加到 url?
  • 啊,因为您使用的是 Contentful,并且它们返回一个相对于方案的 URL,您只需要在前面加上 https
猜你喜欢
  • 2021-08-22
  • 1970-01-01
  • 2021-12-24
  • 2021-11-23
  • 2020-10-16
  • 2019-08-07
  • 2021-03-11
  • 2022-07-01
  • 2021-12-14
相关资源
最近更新 更多