wp-structured-datalisted
Install: claude install-skill mralaminahamed/wp-dev-skills
# WordPress Structured Data (JSON-LD)
> **Model note:** Building a single schema type is mechanical (`haiku`). Reach for `sonnet`/`opus` only when reconciling a complex graph against an existing SEO-plugin graph.
Emit schema.org JSON-LD from theme/plugin code for content an SEO plugin can't generate on its own — without duplicating what the SEO plugin already ships.
## When to use
- Content lives in **post meta / custom fields** (e.g. an FAQ repeater) and is *stripped from the rendered content*, so Rank Math/Yoast can't detect it.
- You render a **custom section** (table of contents, related items, steps) that warrants `ItemList` / `HowTo`.
- You need a schema type the SEO plugin doesn't offer on that template.
## Rule 0 — never duplicate the SEO plugin's graph
Most sites already run Rank Math, Yoast, or SEOPress. They emit a `@graph` with `WebSite`, `WebPage`, `Organization`, `Person`, `BreadcrumbList`, and an article type (`Article`/`BlogPosting`/`Product`). **Never** re-emit those — duplicate/competing nodes confuse parsers and can suppress rich results.
**Always** check first what is already on the page:
```bash
# View source, then list the @type values in every ld+json block
curl -s "<url>" | grep -A99 'application/ld+json'
```
Or in the browser console:
```js
[...document.querySelectorAll('script[type="application/ld+json"]')]
.flatMap(s => { const j = JSON.parse(s.textContent); return (j['@graph']||[j]).map(n => n['@type']); });
```
Only add types the exis