【发布时间】:2020-06-28 15:45:07
【问题描述】:
我有一个 Gatsby 应用设置。
src/
---images/foo.jpg //
---images/ //
---assets/ //
---components/seo.js // 嵌入在每个页面顶部的组件
---pages/index.js // 使用<SEO />的页面
内部index.js:
function Home() {
return (
<React.Fragment>
<SEO />
内部搜索引擎优化:
const SEO = ({ title, description, image, article }) => {
const { pathname } = useLocation()
const { site } = useStaticQuery(query)
const {
defaultTitle,
titleTemplate,
defaultDescription,
siteUrl,
defaultImage, // <-- defaultImage is destructured from GQL result
twitterUsername,
} = site.siteMetadata
const seo = {
title: title || defaultTitle,
description: description || defaultDescription,
image: `${siteUrl}${image || defaultImage}`, // <--placed into object with path to it
url: `${siteUrl}${pathname}`,
}
return (
<Helmet title={seo.title} titleTemplate={titleTemplate}>
...
...
...
{seo.image && <meta property="og:image" content={seo.image} />}
{seo.image && <meta property="og:image:type" content="image/jpeg" />}
{seo.image && <meta property="og:image:alt" content="amazing cat" />}
...
</Helmet>
)
}
const query = graphql`
query SEO {
site {
siteMetadata {
defaultTitle: title
titleTemplate
defaultDescription: description
siteUrl: url
defaultImage: image // <-- default image
twitterUsername
}
}
}
`
在我的配置中:
module.exports = {
siteMetadata: {
title: `Title Fine`,
description: `This is fine and coming through okay`,
url: `https://my-url.com`,
image: `/images/foo.jpeg`,
titleTemplate: `This is also fine`
},
Facebook 调试器一直说"https://my-url.com/images/foo.jpeg" could not be processed as an image because it has an invalid content type。但它是JPEG。我在元标记中将其引用为 JPEG。
我已经添加了
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: `${__dirname}/src/images/`,
},
},
想也许它只是找不到文件,但没有任何改变。
如果我点击https://my-url.com/images/foo.jpeg - 它不会在浏览器中加载任何内容。
如果我查看开发工具“源”选项卡,我会看到 /static/ 文件夹,但它不在其中。但是 /images/ 中的其他文件是。
我很困惑!
有谁知道我做错了什么?或者是否有 Gatsby 设置的教程/博客,清楚说明如何让 og:image 和 Twitter 卡正常工作?
【问题讨论】:
-
你的图片在你项目的
./static文件夹中吗? -
If i do hit https://my-url.com/images/foo.jpeg - it doesnt load anything in the browser.这告诉您图像根本不在您所服务站点的文件旁边。 -
您的路径看起来是相对的,而 og:image 需要完整的 URL。此外,如果它是安全的 (https),请使用标签 og:image:secure
标签: javascript reactjs gatsby