Why it matters
JSON.stringify doesn't escape <, so any string containing (a user name, a CMS title) closes the script tag and injects HTML — a stored XSS vector — or breaks the structured data.
How to fix it
Escape < when serialising: JSON.stringify(data).replace(/, via a shared component.
Example
export function JsonLd({ data }: { data: object }) {
return <script type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(data).replace(/</g, '\\u003c') }} />
}References
More lint rules
void lint reports 67 rules in this category. Static source checks with no browser: Tailwind v4 silent failures, Next.js 16 API traps, React render-body bugs, accessibility markup, SEO files and motion hygiene.
scroll-listener-nonpassive`wheel` / `touchstart` / `touchmove` listener without `{ passive: true }`unload-listener`unload` event listeneruseeffect-fetchPage fetches its data in `useEffect`div-buttonClickable `<div>`/`<span>` without button semanticstransition-all`transition: all` / `transition-all`animate-layout-propAnimation of layout properties (width/height/top/left/margin/padding)outline-none-no-replacementFocus outline removed without a visible replacementscale-zero-entryElement enters from `scale(0)`