如何在 Next.js 應用程式中實作 JSON-LD

JSON-LD 是一種結構化資料格式,可讓搜尋引擎和 AI 理解網頁內容的結構。例如,您可以用它來描述人物、事件、組織、電影、書籍、食譜等多種實體類型。

目前我們建議在 layout.jspage.js 元件中以 <script> 標籤的形式呈現結構化資料。

以下程式碼片段使用了 JSON.stringify,該方法不會過濾用於 XSS 注入的惡意字串。為防止此類漏洞,您可以從 JSON-LD 負載中清除 HTML 標籤,例如將字元 < 替換為其 Unicode 等效項 \u003c

請參考您組織推薦的方法來過濾潛在危險字串,或使用社群維護的替代方案如 serialize-javascript 來取代 JSON.stringify

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 的 Rich Results Test 或通用的 Schema Markup Validator 來驗證和測試您的結構化資料。

您可以使用社群套件如 schema-dts 來為 JSON-LD 添加 TypeScript 類型:

import { Product, WithContext } from 'schema-dts'

const jsonLd: WithContext<Product> = {
  '@context': 'https://schema.org',
  '@type': 'Product',
  name: 'Next.js Sticker',
  image: 'https://nextjs.org/imgs/sticker.png',
  description: 'Dynamic at the speed of static.',
}