[{"data":1,"prerenderedAt":75},["ShallowReactive",2],{"help-article-structured-data-json-ld":3},{"data":4},{"title":5,"excerpt":6,"content":7,"help_category":8,"seo":11},"Structured Data & JSON-LD","What JSON-LD is and why answer engines rely on it, how m18t generates it from a content type's schema.org type, and how to paste custom JSON-LD safely.","\u003Cp>\u003Cstrong>What you&#39;ll learn\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>What JSON-LD is and why answer engines rely on it.\u003C\u002Fli>\n\u003Cli>How m18t generates JSON-LD from a content type&#39;s schema.org \u003Ccode>@type\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>How to write or paste custom JSON-LD, and why m18t won&#39;t validate it for you.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Chr>\n\u003Ch2>The concept: tell the machine what the page is\u003C\u002Fh2>\n\u003Cp>A person reading a page infers that the name near the top is the author and the block at the bottom is an FAQ. Search-engine crawlers and answer engines (LLM-backed tools like ChatGPT, Claude, and Perplexity) don&#39;t infer reliably — they read explicit labels. \u003Cstrong>JSON-LD\u003C\u002Fstrong> is a \u003Ccode>&lt;script type=&quot;application\u002Fld+json&quot;&gt;\u003C\u002Fcode> block that states, in \u003Ca href=\"https:\u002F\u002Fschema.org\">schema.org\u003C\u002Fa> vocabulary, what the page&#39;s entities are: this is an \u003Ccode>Article\u003C\u002Fcode>, here&#39;s its author, here&#39;s its FAQ.\u003C\u002Fp>\n\u003Cp>For answer engines this is the load-bearing signal. A meta description barely helps them; a well-formed \u003Ccode>Article\u003C\u002Fcode> or \u003Ccode>FAQPage\u003C\u002Fcode> block helps them understand and cite the page. That&#39;s why m18t treats the schema.org \u003Ccode>@type\u003C\u002Fcode> as a first-class field on every content type rather than an afterthought — see \u003Ca href=\"\u002Fhelp\u002Fthe-seo-philosophy\">The SEO Philosophy\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2>How m18t generates JSON-LD\u003C\u002Fh2>\n\u003Cp>Each content type carries a \u003Cstrong>Schema.org @type\u003C\u002Fstrong> in its \u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">SEO defaults\u003C\u002Fa> — \u003Ccode>Article\u003C\u002Fcode>, \u003Ccode>BlogPosting\u003C\u002Fcode>, \u003Ccode>FAQPage\u003C\u002Fcode>, \u003Ccode>WebPage\u003C\u002Fcode>, and so on. When you generate JSON-LD for a piece, m18t uses that type as the schema&#39;s \u003Ccode>@type\u003C\u002Fcode> and fills it from the piece&#39;s data (title, the resolved \u003Ca href=\"\u002Fhelp\u002Fcanonical-urls\">canonical URL\u003C\u002Fa>, and so on).\u003C\u002Fp>\n\u003Cp>You generate it from the content editor:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Open the piece&#39;s \u003Cstrong>SEO\u003C\u002Fstrong> tab.\u003C\u002Fli>\n\u003Cli>Find the JSON-LD field near the bottom.\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>Generate JSON-LD with AI\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The generator runs on your own AI key (\u003Ca href=\"\u002Fhelp\u002Fbyok-why-we-do-this\">BYOK\u003C\u002Fa>); the button is disabled with a tooltip when no AI key is set. Because m18t injects the resolved canonical into the prompt and instructs the model to use only that URL — or omit the URL field if none exists — the generated schema points at the real address rather than an invented one. See \u003Ca href=\"\u002Fhelp\u002Fthe-seo-ai-prompt\">The SEO AI Prompt\u003C\u002Fa> for the mechanics.\u003C\u002Fp>\n\u003Ch2>Writing custom JSON-LD\u003C\u002Fh2>\n\u003Cp>If you need a schema m18t doesn&#39;t generate for you — say a \u003Ccode>Restaurant\u003C\u002Fcode> block for a local-business \u003Ca href=\"\u002Ffor\u002Fagencies\">agency\u003C\u002Fa> client — you can supply it directly:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Open the piece&#39;s \u003Cstrong>SEO\u003C\u002Fstrong> tab.\u003C\u002Fli>\n\u003Cli>Go to the JSON-LD field.\u003C\u002Fli>\n\u003Cli>Paste your valid JSON-LD.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>When you \u003Ca href=\"\u002Fhelp\u002Fpushing-to-your-cms\">push to your CMS\u003C\u002Fa>, m18t carries your JSON-LD in the payload as-is.\u003C\u002Fp>\n\u003Ch2>An honest limit: m18t does not validate your JSON\u003C\u002Fh2>\n\u003Cp>m18t stores and pushes the JSON-LD string you give it; it does not check that the JSON is syntactically valid or that the schema is well-formed. A stray comma can break how the page is parsed. Before you publish custom JSON-LD, paste it into the \u003Ca href=\"https:\u002F\u002Fsearch.google.com\u002Ftest\u002Frich-results\">Google Rich Results Test\u003C\u002Fa> (or schema.org&#39;s validator) and confirm it passes. And as always, m18t emits the block into the CMS payload — your front-end still has to render it into the page. If it&#39;s correct in m18t but missing on the live page, see \u003Ca href=\"\u002Fhelp\u002Fseo-troubleshooting\">SEO troubleshooting\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2>What&#39;s next\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fthe-seo-ai-prompt\">The SEO AI Prompt\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fcanonical-urls\">Canonical URLs\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">Configuring SEO Defaults (in Content Types)\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>FAQ\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Why do AI answer engines care about JSON-LD?\u003C\u002Fstrong>\nIt&#39;s the explicit, machine-readable description of what&#39;s on the page. Answer engines parse it to understand the entity before citing it — far more reliably than they&#39;d infer from prose.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Where does the schema.org \u003Ccode>@type\u003C\u002Fcode> come from?\u003C\u002Fstrong>\nFrom the content type&#39;s SEO defaults at \u003Ccode>\u002Fstudio\u002Fconfig\u002Fcontent-types\u003C\u002Fcode>. Set \u003Ccode>Article\u003C\u002Fcode>, \u003Ccode>FAQPage\u003C\u002Fcode>, \u003Ccode>WebPage\u003C\u002Fcode>, etc. per type. See \u003Ca href=\"\u002Fhelp\u002Fconfiguring-seo-defaults\">Configuring SEO Defaults\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Can I add a schema m18t doesn&#39;t support?\u003C\u002Fstrong>\nYes. Paste valid JSON-LD into the JSON-LD field on the piece&#39;s SEO tab and it&#39;s pushed as-is.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Does m18t check my custom JSON-LD for errors?\u003C\u002Fstrong>\nNo. It stores and forwards the string without validating it. Test custom JSON-LD in the \u003Ca href=\"https:\u002F\u002Fsearch.google.com\u002Ftest\u002Frich-results\">Google Rich Results Test\u003C\u002Fa> before publishing — a syntax error can break the page&#39;s parsing.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Why is the &quot;Generate JSON-LD with AI&quot; button disabled?\u003C\u002Fstrong>\nNo AI key is configured. It&#39;s BYOK — add a key in the \u003Ca href=\"\u002Fhelp\u002Fthe-secret-vault\">vault\u003C\u002Fa> to enable it.\u003C\u002Fp>\n",{"slug":9,"title":10},"seo","SEO",{"meta_title":12,"meta_description":6,"keywords":13,"canonical_url":14,"og_title":5,"og_description":15,"og_image":16,"robots":17,"json_ld":18},"Structured Data & JSON-LD | m18t Help","JSON-LD, structured data, schema.org, answer engine optimization, rich results, FAQPage, Article schema, custom JSON-LD","https:\u002F\u002Fm18t.com\u002Fhelp\u002Fstructured-data-json-ld","JSON-LD tells machines what a page is. m18t generates it from each type's schema.org type and lets you paste custom blocks.","https:\u002F\u002Fm18t.com\u002Fog-default.png","index, follow",{"@context":19,"@graph":20},"https:\u002F\u002Fschema.org",[21,34,59],{"@type":22,"headline":5,"description":6,"articleSection":10,"inLanguage":23,"datePublished":24,"dateModified":24,"image":16,"author":25,"publisher":29,"mainEntityOfPage":32},"Article","en","2026-06-25",{"@type":26,"name":27,"url":28},"Organization","m18t","https:\u002F\u002Fm18t.com",{"@type":26,"name":27,"url":28,"logo":30},{"@type":31,"url":16},"ImageObject",{"@type":33,"@id":14},"WebPage",{"@type":35,"mainEntity":36},"FAQPage",[37,43,47,51,55],{"@type":38,"name":39,"acceptedAnswer":40},"Question","Why do AI answer engines care about JSON-LD?",{"@type":41,"text":42},"Answer","It's the explicit, machine-readable description of what's on the page. Answer engines parse it to understand the entity before citing it — far more reliably than they'd infer from prose.",{"@type":38,"name":44,"acceptedAnswer":45},"Where does the schema.org @type come from?",{"@type":41,"text":46},"From the content type's SEO defaults at \u002Fstudio\u002Fconfig\u002Fcontent-types. Set Article, FAQPage, WebPage, etc. per type.",{"@type":38,"name":48,"acceptedAnswer":49},"Can I add a schema m18t doesn't support?",{"@type":41,"text":50},"Yes. Paste valid JSON-LD into the JSON-LD field on the piece's SEO tab and it's pushed as-is.",{"@type":38,"name":52,"acceptedAnswer":53},"Does m18t check my custom JSON-LD for errors?",{"@type":41,"text":54},"No. It stores and forwards the string without validating it. Test custom JSON-LD in the Google Rich Results Test before publishing — a syntax error can break the page's parsing.",{"@type":38,"name":56,"acceptedAnswer":57},"Why is the \"Generate JSON-LD with AI\" button disabled?",{"@type":41,"text":58},"No AI key is configured. It's BYOK — add a key in the vault to enable it.",{"@type":60,"itemListElement":61},"BreadcrumbList",[62,66,70,73],{"@type":63,"position":64,"name":65,"item":28},"ListItem",1,"Home",{"@type":63,"position":67,"name":68,"item":69},2,"Help","https:\u002F\u002Fm18t.com\u002Fhelp",{"@type":63,"position":71,"name":10,"item":72},3,"https:\u002F\u002Fm18t.com\u002Fhelp\u002Fcategories\u002Fseo",{"@type":63,"position":74,"name":5,"item":14},4,1786312170370]