gpt4 book ai didi

reactjs - 在导出的静态网站的 NextJS Head 页面中传递动态标题

转载 作者:行者123 更新时间:2023-12-04 17:13:21 24 4
gpt4 key购买 nike

我正在从 API 获取动态标题和日志并将其传递给 og:title 和 og:image 的 nextJS Head。但它不工作。知道如何让它发挥作用。

这是我的代码。

function PageHead(props: any) {
let location = "/";
if (process.browser) {
location = window.location.href;
}
console.log(props);

return (
<Head>
<meta property="og:title" content={props.title} />
<meta property="og:url" content={location} />
<meta property="og:image" content={props.logo} />
</Head>
);
}

const Home: NextPage = () => {
const [title, setTitle] = useState('');
const [logo, setLogo] = useState('');
useEffect(() => {
(async () => {
const reviewData = await (await fetch("https://api.")).json();
setTitle(reviewData.name);
setLogo(reviewData.logo);
})();
}, []);

return (
<React.Fragment>
<Box
sx={{
display: 'flex',
flexDirection: 'column',
minHeight: '100vh',
}}
>
<PageHead logo={logo} title={title}/>

</Box>
</React.Fragment>
)
}

export default Home

在我导出静态网站或以开发人员身份运行之后。当我刷新页面时,在 console.log 中,我依次获得以下 3 个日志。这告诉我它确实从 api 中一一获取 Logo 和标题并刷新控制台,但由于某种原因没有将其填充到标题和图像标签的 HEAD 中。

知道我该如何解决它。

enter image description here

最佳答案

出于 SEO 目的,您需要在构建时初始化页眉

如果您在应用程序在客户端呈现后获取数据。这对 SEO 不再有意义,因为那时搜索引擎机器人无法读取您的标题。

因此您需要在构建时在服务器上呈现您的Header 组件。

Next.js 为您提供了一些方法来支持您在所有情况下(服务器端渲染、静态站点生成、增量站点重新生成...)在构建时获取数据

这是他们的官方文档:https://nextjs.org/docs/basic-features/data-fetching

下面是一个静态生成我的博客详情页面的例子:

export const getStaticProps = async ({ params }) => {
const response = await fetchAPI(params.slug); // Fetch your data

// Response 404 page if data is failed to fetch
if (!response.success) {
return { notFound: true };
}

const { title, description, images } = response;

return {
props: {
pageHeader: {
title: name,
metas: [
{
name: 'description',
content: description,
},
{ property: 'og:title', content: name },
{
property: 'og:image',
content: images[0] || null,
},
{
property: 'og:description',
content: description,
},
],
},
productData: response,
},
revalidate: 5 * 60, // re-generate each 5 minutes
};
};

上面获取的所有数据都将传递给您的页面组件。您可以使用这些数据 Prop 在构建时呈现您的页眉。此 header 将包含在您的第一个 HTML 文档中。然后搜索引擎机器人可以读取和处理它。

import Head from 'next/head';

const BlogDetailPage = (pageProps) => (
<>
<Head>
<title>{pageProps.pageHeader.title}</title>
{pageProps.pageHeader.metas.map((attributes, index) => (
<meta {...attributes} key={index} />
))}
</Head>
<YourPageComponent />
</>
);

关于reactjs - 在导出的静态网站的 NextJS Head 页面中传递动态标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69082726/

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