← 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'),
}}
/>
);
}