How it works
Four steps from raw JSON-LD to a plate of spaghetti you can actually read.
Get your JSON-LD
Copy the JSON-LD from your pages. You can paste the whole <script type="application/ld+json"> tags or just the bare JSON, one block after another. Anything that isn't JSON-LD is ignored.
Got lots of pages or RSI from Ctrl+C, Ctrl+V? Crawl your site with Screaming Frog and upload the CSV instead. Here's how.
Label your pages (optional)
Put a line like this above a block to tell the tool which page it came from:
Without labels, each pasted block is treated as its own page. This is particularly useful if you're pasting from a plugin like Yoast, which creates lots of different schema markup, joined by @graph.
Build the graph
Hit the Start Untangling! button. Every entity with an @type becomes a dot. Every {"@id": "..."} reference becomes a strand of spaghetti between two dots, with an arrow showing which way it points (with arrows on both ends if the relationship is reciprocal). Plain text values like image URLs or sameAs links are not connections, so they don't appear as spaghetti strands.
Drag dots about, scroll to zoom, and click a dot to see its JSON-LD markup code.
Read the Tangle report
The report on the right sidebar lists everything that looks "off", in plain English. If it's all fine, you'll get a well-done message :)
Reading the graph colours
Any other type gets its own different colour. A dashed amber ring round a dot marks a lone noodle. A dashed red strand is a dangling reference, ending at a dashed red dot where the missing entity should be.
Use the filter chips above the graph to hide a type, for example to hide all the WebPages and see how your other entities connect.
Interpreting the Tangle report
- Dangling strands: a reference to an
@idthat isn't declared in anything you loaded. - Lone noodles: an entity with an
@idthat's only on a single page. WebPage and Article types are left out because they're meant to be per-page. - One pot: a site should have exactly one WebSite entity.
- Twin strands: ids that match once you ignore http/https, upper/lower case and a trailing slash, but aren't identical, so they never join up.
- Unlabelled twins: the same type and name on several pages with no
@idat all. - Mixed-up strands: the same
@iddeclared with a different type or name on different pages. - Bare plates: pages or blocks with no JSON-LD.
- The main sauce: whether an Organization or LocalBusiness-type entity exists.
These are automated checks to point you at things which are worth a second look. They're not a verdict, and they can't tell you whether your markup is "right". The Schema Spaghetti tool isn't a validator either, so it won't tell you whether your markup is missing commas, brackets or is malformed. What it can tell you is how your schema is mapped out across your whole website, and things which don't quite add up.
What happens to your data
Nothing leaves your browser, as the tool runs entirely on your device, doesn't send anything anywhere, and doesn't keep what you paste. Closing the tab clears it.
For security reasons, uploads are limited to small plain-text CSVs, and everything is checked before it's read. See the Screaming Frog CSV page for the rules.