如何在 Next.js 應用程式中實現 JSON-LD
JSON-LD 是一種結構化資料格式,搜尋引擎和 AI 可以使用它來幫助它們理解頁面內容之外的頁面結構。例如,您可以使用它來描述一個人、一個事件、一個組織、一部電影、一本書、一個食譜以及許多其他型別的實體。
我們目前對 JSON-LD 的建議是在您的 layout.js 或 page.js 元件中將結構化資料渲染為 <script> 標籤。
以下程式碼片段使用 JSON.stringify,它不會清除用於 XSS 注入的惡意字串。為了防止此類漏洞,您可以從 JSON-LD 有效負載中清除 HTML 標籤,例如,將字元 < 替換為其 Unicode 等效項 \u003c。
請檢視您組織推薦的清除潛在危險字串的方法,或使用社群維護的 JSON.stringify 替代方案,例如 serialize-javascript。
app/products/[id]/page.tsx
export default async function Page({ params }) {
const { id } = await params
const product = await getProduct(id)
const jsonLd = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
image: product.image,
description: product.description,
}
return (
<section>
{/* Add JSON-LD to your page */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(jsonLd).replace(/</g, '\\u003c'),
}}
/>
{/* ... */}
</section>
)
}您可以使用 Google 的 富媒體搜尋結果測試工具 或通用的 Schema Markup Validator 驗證和測試您的結構化資料。
您可以使用社群包(如 schema-dts)使用 TypeScript 為 JSON-LD 鍵入。
import { Product, WithContext } from 'schema-dts'
const jsonLd: WithContext<Product> = {
'@context': 'https://schema.org',
'@type': 'Product',
name: 'Next.js Sticker',
image: 'https://nextjs.react.com.tw/imgs/sticker.png',
description: 'Dynamic at the speed of static.',
}這有幫助嗎?