← back to Stayclaim

src/components/JsonLd.tsx

21 lines

/**
 * JsonLd — emits a single application/ld+json script.
 *
 * Rule: only emit fields the visible page actually shows. Misleading
 * structured data is a quality risk per Google's guidelines.
 */
export function JsonLd({ data }: { data: Record<string, unknown> }) {
  return (
    <script
      type="application/ld+json"
      // Pre-stringified for SSR safety; do not rely on JSON.stringify in the runtime.
      dangerouslySetInnerHTML={{
        __html: (JSON.stringify(data) ?? '{}')
          .replace(/</g, '\\u003c')
          .replace(/\u2028/g, '\\u2028')
          .replace(/\u2029/g, '\\u2029'),
      }}
    />
  );
}