gpt4 book ai didi

javascript - 使用 Gatsby.js,如何添加特定于路由的 og :image meta tag?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:10:16 24 4
gpt4 key购买 nike

我已经使用以下代码在 React Helmet 中为我的根路由设置了一个社交分享图像:

<meta property="og:url" content="https://foo.com" />
<meta property="og:image" content="https://myhostedimg.png" />

我在 Gatsby 中有一个单独的路由或“页面”,我想为其设置另一个 og:image 值。由于没有任何内容将 og:image 链接到 og:url,我该如何指定自定义 og:url og:image 我页面上的链接?

最佳答案

选项 1:您可以在主 layout 文件中进行路由嗅探,然后将两个属性(一个用于图像,一个用于路由)传递到控制元数据的任何组件中。

在这个例子中,我的元数据组件被命名为 metadata 但无论您的组件结构是什么,它都应该有意义:

// Setup react stuff
import React from 'react'
import PropTypes from 'prop-types'

// Get your custom gatsby components - assuming a pretty basic layout here
import Metadata from '../components/Metadata'
import Header from '../components/Header'
import Footer from '../components/Footer'

// Get images you want, also assuming you have these in a static folder and you don't need to use `gatsby-image` to get them
import ogImgOne from './og-img-one.png'
import ogImgTwo from './og-img-two.png'

// Setup template wrapper
export default class TemplateWrapper extends React.Component {

// We want to render different base templates depending on the path the user hits
render() {

// Page 1
if (this.props.location.pathname === "/") {
return (
<div className="page1">
<Header />
<Metadata ogImgSrc={ ogImgOne }
ogUrl={ this.props.location.pathname } />
<div>
{ this.props.children() }
</div>
<Footer />
</div>
)
}

// Page 2
if (this.props.location.pathname === "/page-2/") {
return (
<div className="page2">
<Metadata ogImgSrc={ ogImgTwo }
ogUrl={ this.props.location.pathname } />
<Header />
<div>
{ this.props.children() }
</div>
<Footer />
</div>
)
}
}
}

选项 2 仅使用 React Helmet ,它包含在开箱即用的 Gatsby 中(至少从 v2.x 开始)。在此设置中,您可以设置一个使用 Helmet 的元数据组件,然后在您的 Gatsby 页面中轻松覆盖这些预设。 Helmet 只会覆盖您指定的元数据项,如果不需要调整则保留其他项。只需在您的页面/组件中导入/调用 Helmet 即可轻松覆盖:

元数据.js:

import React from 'react'
import Helmet from 'react-helmet'

import icon from '../../images/logo.png'
import socialBanner from '../../images/PFB_2018_social.jpg'

const Metadata = () => (
<div>
<Helmet>
<title>Whatever</title>

<meta property='og:image' content={ socialBanner } />
<meta property='og:locale' content='en_US' />
<meta property='og:type' content='website' />
<meta property='og:title' content='Whatever' />
<meta property='og:description' content="Description" />
<meta property='og:url' content='https://example.org' />
<meta property='og:updated_time' content='2019-01-31' />
</Helmet>
</div>
)

export default Metadata

页面示例.js:

import React from 'react'
import Helmet from 'react-helmet'

export default class Example extends React.Component {
render() {
return (
<div>

{/* Custom metadata - assuming something coming from Node.js in pageContext prop */}
<Helmet>
<title>Override here</title>

{ /* Example from pageContext prop, gatsby-node.js */}
<meta property='og:title' content={ `${this.props.pageContext.title} | Your brand` } />

{ /* Image from gatsby-node.js example, using gatsby-image for override */}
<meta property='og:image' content={ this.props.pageContext.images[0].localFile.childImageSharp.fluid.src } />

{ /* Get path from location string */}
<meta property='og:url' content={ this.props.location.href } />

</Helmet>
</div>
)
}
}

关于javascript - 使用 Gatsby.js,如何添加特定于路由的 og :image meta tag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50161794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com