{
  "id": 8905961,
  "title": "Your JSON-LD is probably inside a @graph, and most parsers don't look there",
  "url": "https://urgent.news/2026/09/21/your-json-ld-is-probably-inside-a-graph-and-most-parsers-dont-look",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-21T11:00:00.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/juanauriti/your-json-ld-is-probably-inside-a-graph-and-most-parsers-dont-look-there-3njj"
  },
  "original_language": "en",
  "account": "Structured data, such as JSON-LD, can be presented in two different shapes. The first shape, which is commonly shown in tutorials, follows a specific format with top-level elements like @context, @type, and headline. However, a significant portion of actual web pages emit a second shape, which is less commonly understood. This second shape, often referred to as @graph, does not contain a top-level @type element.\n\nMany popular SEO plugins, such as Yoast SEO and RankMath, default to emitting data in the @graph format, and there is no option for a flat output. This means that a large fraction of WordPress sites with SEO plugins will have their structured data presented in the @graph shape. Additionally, the @graph format allows for more efficient referencing between entities by using @id, creating a single entity graph instead of multiple disconnected ones.\n\nThe issue lies in parsers that are unable to properly handle the @graph format. When a parser only checks for the presence of @type at the top level, it will incorrectly report that a page with valid @graph data has no structured data at all. This explains why nine out of twelve structured-data detectors tested were unable to detect structured data when it was presented in the @graph format.\n\nTo resolve this issue, it is recommended to flatten the JSON-LD data before inspecting it. This can be done by writing a function that iterates through the JSON-LD data at any nesting depth, yielding every schema.org node. The function should handle both flat JSON-LD data and data wrapped in a @graph, running the @graph check before the @type check. By flattening the data at the parse boundary, downstream checks will no longer need to differentiate between the two shapes, ensuring that structured data is correctly identified and interpreted.",
  "summary": "There are two shapes a page can hand you its structured data in, and if you only handle the first one you will report that a correctly marked-up page has no structured data at all. Shape one, the one every tutorial shows: { \"@context\" : \"https://schema.org\" , \"@type\" : \"Article\" , \"headline\" : \"...\" } Shape two, the one a large share of the real web actually emits: { \"@context\" :…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}