К основному контенту

Паттерн · TypeScript

Расширение JSON-LD Organization и WebSite в корневом layout

Связанные @id в @graph: организация, персона, сайт — основа для остальных сущностей.

Уровень: среднийОценка времени: ~45 мин

Корневой граф задаёт стабильные @id; страничные типы ссылаются на них через author, publisher, provider.

  • Один Organization на домен
  • Person и Organization связаны worksFor/founder
  • дочерние сущности используют {\"@id\": \"...\"} вместо дублирования полей

Страницы услуг, статей и паттернов не должны заново описывать организацию целиком. Достаточно сослаться на @id из корневого layout.

Код

Паттерн: функция собирает массив для <script type="application/ld+json">:

const site = 'https://example.com'
const orgId = `${site}#organization`
const webSiteId = `${site}/#website`

export function buildRootLayoutSchemaGraph() {
  return [
    {
      '@type': 'Organization',
      '@id': orgId,
      name: 'Example Co',
      url: site,
    },
    {
      '@type': 'WebSite',
      '@id': webSiteId,
      url: site,
      name: 'Example',
      publisher: { '@id': orgId },
    },
  ]
}

На дочерней странице:

const softwareLd = {
  '@type': 'SoftwareSourceCode',
  author: { '@id': `${site}#person` },
  provider: { '@id': orgId },
}

Проверка

  • Валидатор не показывает дублирующихся конфликтующих Organization с разными URL на одном домене.
  • Все ссылки @id разрешаются на объекты в том же или родительском @graph.

Первоисточники

Нужно внедрить под ваш домен и стек?

Короткая форма: имя, телефон и сайт. После отправки — ответ с порядком работ и ориентиром по этапам; задачу уточняют при контакте.