Как реализовать JSON-LD в вашем Next.js приложении

JSON-LD — это формат структурированных данных, который могут использовать поисковые системы и ИИ для лучшего понимания структуры страницы помимо её содержимого. Например, с его помощью можно описать человека, событие, организацию, фильм, книгу, рецепт и многие другие типы сущностей.

Наша текущая рекомендация для JSON-LD — рендерить структурированные данные как тег <script> в ваших компонентах layout.js или page.js.

Следующий фрагмент использует JSON.stringify, который не санирует вредоносные строки, используемые в XSS-инъекциях. Чтобы предотвратить эту уязвимость, вы можете очистить HTML-теги из JSON-LD данных, например, заменив символ < на его юникодный эквивалент \u003c.

Ознакомьтесь с рекомендуемым подходом вашей организации для санации потенциально опасных строк или используйте альтернативы JSON.stringify, поддерживаемые сообществом, такие как serialize-javascript.

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>
  )
}
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>
  )
}

Вы можете проверить и протестировать свои структурированные данные с помощью Rich Results Test от Google или универсального Schema Markup Validator.

Вы можете типизировать JSON-LD с помощью TypeScript, используя пакеты сообщества, такие как schema-dts:

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.',
}