Han*_*Han 15 html javascript meta-tags reactjs next.js
我正在使用Next.js开发我的网站为了升级我网站的 SEO 性能,我试图避免重复的元标记。
我的问题
在下一个官方文档中,他们说我可以通过在元标记中插入关键属性来避免重叠的元标记。但这是行不通的。
<meta name="description" content="~~" key="titleDescription"/>
<meta name="keywords" content="~~" key="titleKeywords"/>
Run Code Online (Sandbox Code Playgroud)
这些是默认的 rootDocument 元标记,并且,
<meta name="description" content={item.product_description} key="titleDescription"></meta>
<meta name="keywords" content={item.brand_name} key="titleKeywords"></meta>
Run Code Online (Sandbox Code Playgroud)
这些是项目页面中动态生成的元标记。
在已部署的浏览器中,网站中仍然有两个描述和关键字元标记。我想避免重复的元标记。感谢您的帮助!
Sea*_*n W 33
使用 Next.js 组件时需要注意一些事项Head
。
_document
Head
组件是next/document
_document
也不会被替换(可以重复)key
_app
Head
组件是next/head
_app
可以位于子组件中_app
可以用key
标识符覆盖key
标识符的标签。您需要立即访问的脚本、样式和其他标签 - Next 此时可能尚未完全安装。您不能document/head
用key
属性替换组件中的标签。
import Document, {Head, Html, Main, NextScript } from 'next/document';
class MyDocument extends Document {
render = () => (
<Html lang="en-US" dir="ltr">
<Head>
<script src="/some-script.js" defer={false} />
<style>.inline-styles{}</style>
{/* META & TITLE TAGS PLACED HERE CANNOT BE OVERRODE */}
</Head>
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
Run Code Online (Sandbox Code Playgroud)
OR 自闭合Head
标签
class MyDocument extends Document {
render = () => (
<Html>
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
);
}
Run Code Online (Sandbox Code Playgroud)
注意:导入是从下一个/文档
import Head from 'next/head';
const App = ({ Component, pageProps }) => (
<>
<Head>
<title key="title">App Tittle</title>
</Head>
<Component {...pageProps} />
</>
);
Run Code Online (Sandbox Code Playgroud)
或者从自定义组件加载
import Head from 'next/head';
const MyHeadTags = () => (
<Head>
<title key="title">App Tittle</title>
<meta key="description" name="description">Description</meta>
</Head>
);
const App = ({ Component, pageProps }) => (
<>
<MyHeadTags />
<Component {...pageProps} />
</>
);
Run Code Online (Sandbox Code Playgroud)
注意:导入是从next/ head
const SomePage = () => (
<>
<Head>
<title key="title">Some Page Tittle</title>
<meta key="description" name="description">Some Page Description</meta>
</Head>
<div>My Page</div>
</>
);
Run Code Online (Sandbox Code Playgroud)
head 组件必须位于页面上,并且不能是子组件。如果它是子组件,它有时不会覆盖具有相同键属性的其他标签。
const MyHeadTags = () => (
<Head>
<title key="title">Some Page</title>
<meta key="description" name="description">Some Page Description</meta>
</Head>
);
const ChildComponent = () => (
<>
<MyHeadTags />
Info.
</>
);
const SomePage= () => (
<>
<ChildComponent />
<div>Will not work</div>
</>
);
Run Code Online (Sandbox Code Playgroud)
更新:最后一个示例似乎在某些情况下适用于 Next 11+,但我遇到了一些重复标签的情况。我避免使用最后一种方法。
更新
<Head />
以下是 Next.js 文档关于文件中元素的说明_document.js
:
这里使用的组件与 next/head 中的组件不同。此处使用的组件只能用于所有页面通用的任何代码。对于所有其他情况,例如
<title>
标签,我们建议在页面或组件中使用 next/head。
来源: https: //nextjs.org/docs/advanced-features/custom-document
<meta />
因此,Next.js 建议仅在单个页面级别定义所有动态标签。
原始答案(一开始似乎有效,但事实证明,只是随机的)。
当您在 JSX 中混合使用两种关闭空 HTML 标签的方法时,似乎会出现此问题。请注意,文件meta
中的标签_document.js
是自动关闭的:<meta />
而动态标签不是:<meta></meta>
。
确保您与它保持一致(即根据最佳实践,您应该将所有空标签转换为自关闭变体),并且应该没问题。
归档时间: |
|
查看次数: |
10243 次 |
最近记录: |