2 回答
TA贡献1828条经验 获得超3个赞
我决定了这个解决方案。
正面:
---
type: howto // Use either 'article' or 'howto'
---
像查询其他数据一样使用 GraphQL 查询它:
frontmatter {
title
published(formatString: "MMMM DD, YYYY")
modified(formatString: "MMMM DD, YYYY")
description
type
}
将其传递给您的 SEO 组件:
<SEO
title={post.frontmatter.title}
desc={post.frontmatter.description}
published={post.frontmatter.published}
modified={post.frontmatter.modified}
type={post.frontmatter.type}
/>
在您的 SEO 组件中,您可以像这样使用它(对所有类型都这样做)。您可以根据需要为我的类型、常见问题解答、课程等设置您的帖子和 SEO 组件:
const schemaType = type
if (schemaType === "howto") {
schemaHowTo = {
// Your howto schema here
}
}
if (schemaType === "article") {
schemaArticle = {
// Your article schema here
}
}
最后,在 React Helmet 中,我们有:
<Helmet>
{schemaType === "howto" && (
<script type="application/ld+json">
{JSON.stringify(schemaHowTo)}
</script>
)}
{schemaType === "article" && (
<script type="application/ld+json">
{JSON.stringify(schemaArticle)}
</script>
)}
...
<Helmet>
TA贡献1946条经验 获得超4个赞
刚刚找到关于该主题的精彩文章:https: //www.iamtimsmith.com/blog/creating-a-better-seo-component-for-gatsby/ 帮助我为应用程序中的所有页面动态创建丰富的片段。主要思想:传递给children你seo.js:
return (
<Helmet
htmlAttributes={{lang: `en`}}
titleTemplate={`%s | ${data.site.siteMetadata.title}`}
>
<title>{title}</title>
{children}
</Helmet>
);
然后在任何页面/组件上:
return (
<SEO title={title} description={description} image={image} slug={slug}>
<script type='application/ld+json'>
{`{
'@context': 'https://schema.org',
'@type': 'LiveBlogPosting',
'@id': 'https://example.com',
'headline': ${title},
'description': ${description}
}`}
</script>
</SEO>
);
};
添加回答
举报