跳到內容

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

JSON-LD 是一種結構化資料格式,搜尋引擎和 AI 可以使用它來幫助它們理解頁面內容之外的頁面結構。例如,您可以使用它來描述一個人、一個事件、一個組織、一部電影、一本書、一個食譜以及許多其他型別的實體。

我們目前對 JSON-LD 的建議是在您的 layout.jspage.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.',
}