Skip to tool
FeuTex · free tools runs in-browser no bloat built by LiMiT

Online Schema Converter

Paste JSON-LD or HTML that contains <script type="application/ld+json">. Convert it to clean JSON, minified JSON, or a ready-to-paste script tag. Everything runs locally in your browser (no network calls).

Category: SEO · URL: /tools/online-schema-converter.html
Tip: If your page has multiple JSON-LD scripts, enable Use @graph to combine them.
Options
Privacy: runs locally in your browser. No uploads, no tracking scripts.

How to use

Convert schema markup in seconds:

  1. Paste JSON-LD or HTML containing JSON-LD scripts into the input box.
  2. Choose an output format (JSON, minified, script tag, or extract-from-HTML).
  3. Optional: enable Normalize @context, Sort keys, and/or Use @graph.
  4. Click Convert, then Copy output.
Keywords this page targets (natural cluster): online schema converter, schema converter json-ld, convert json-ld to script tag, extract json-ld from html, json-ld minify, json-ld prettify, schema org @graph converter, normalize schema @context, convert multiple json-ld scripts to @graph, schema markup converter offline, json-ld formatter, structured data converter, schema json-ld wrapper, convert http schema.org to https, json-ld cleanup tool, schema converter for google rich results, extract structured data script, convert json-ld array to @graph, schema org json formatter
Secondary intents covered: Extract JSON-LD from a full HTML page to debug structured data, Wrap raw JSON-LD in a valid <script type="application/ld+json"> tag for publishing, Minify JSON-LD to reduce page weight, Prettify JSON-LD to review and edit it safely, Normalize @context (http → https) to keep markup consistent, Combine multiple JSON-LD blocks into a single @graph output, Sort JSON keys for stable diffs in version control, Quickly copy the converted output for CMS or templates

FAQ

What schema formats does this converter support?

This tool works with schema.org JSON-LD (raw JSON) and HTML pages that contain JSON-LD in <script type="application/ld+json"> tags.

Can it convert Microdata or RDFa to JSON-LD?

No—this converter only extracts/converts JSON-LD. For Microdata/RDFa, use a dedicated parser.

What does “Use @graph” do?

If multiple JSON-LD blocks are found, it combines them into one object using @graph, which is often easier to manage and publish.

What does “Normalize @context” change?

It rewrites common schema.org variants (like http://schema.org) to https://schema.org for consistency.

Is my data sent to a server?

No. All parsing and conversion runs locally in your browser, and the code does not make network requests.

Why do I get a JSON parse error?

JSON-LD must be valid JSON (no trailing commas, unquoted keys, or comments). Fix the JSON, then convert again.

Can I paste a full HTML document?

Yes—choose “Extract JSON-LD from HTML” or any mode; the tool will detect and parse application/ld+json scripts automatically.

","expected":"\"@context\": \"https://schema.org\""},{"name":"Multiple scripts -> @graph","input":"","expected":"\"@graph\""},{"name":"JSON -> HTML script (min)","input":"{\"@context\":\"https://schema.org\",\"@type\":\"Product\",\"name\":\"Widget\"}","expected":" '; } if(mode === 'html_script_min'){ return ''; } throw new Error('Unknown mode: ' + mode); } function convertFromUI(){ var inputEl = $('toolInput'); var outEl = $('toolOutput'); var modeEl = $('ftMode'); var normEl = $('ftNormalize'); var sortEl = $('ftSortKeys'); var graphEl = $('ftUseGraph'); if(!inputEl || !outEl){ return; } setError(''); try{ var out = convertText(inputEl.value, { mode: modeEl ? modeEl.value : 'json_pretty', normalizeContext: normEl ? normEl.checked : true, sortKeys: sortEl ? sortEl.checked : false, useGraph: graphEl ? graphEl.checked : true }); outEl.value = out; } catch(e){ outEl.value = ''; setError(e && e.message ? e.message : String(e)); } } function copyOutput(){ var outEl = $('toolOutput'); if(!outEl) return; var text = outEl.value || ''; if(!text){ setError('Nothing to copy.'); return; } setError(''); if(typeof navigator !== 'undefined' && navigator.clipboard && navigator.clipboard.writeText){ navigator.clipboard.writeText(text).catch(function(){ outEl.focus(); outEl.select(); try{ document.execCommand('copy'); } catch(_e){} }); } else { outEl.focus(); outEl.select(); try{ document.execCommand('copy'); } catch(_e){} } } function loadSample(){ var inputEl = $('toolInput'); var modeEl = $('ftMode'); var graphEl = $('ftUseGraph'); var normEl = $('ftNormalize'); if(!inputEl) return; inputEl.value = '\n\n\n \n\n \n\n...\n'; if(modeEl) modeEl.value = 'json_pretty'; if(graphEl) graphEl.checked = true; if(normEl) normEl.checked = true; convertFromUI(); } window.feutexReset = function(){ var inputEl = $('toolInput'); var outEl = $('toolOutput'); var modeEl = $('ftMode'); var normEl = $('ftNormalize'); var sortEl = $('ftSortKeys'); var graphEl = $('ftUseGraph'); if(inputEl) inputEl.value = ''; if(outEl) outEl.value = ''; if(modeEl) modeEl.value = 'json_pretty'; if(normEl) normEl.checked = true; if(sortEl) sortEl.checked = false; if(graphEl) graphEl.checked = true; setError(''); }; window.feutexInit = function(){ var btnConvert = $('ftConvert'); var btnCopy = $('ftCopy'); var btnReset = $('ftReset'); var btnSample = $('ftSample'); var inputEl = $('toolInput'); if(btnConvert && !btnConvert.__ftBound){ btnConvert.__ftBound = true; btnConvert.addEventListener('click', convertFromUI); } if(btnCopy && !btnCopy.__ftBound){ btnCopy.__ftBound = true; btnCopy.addEventListener('click', copyOutput); } if(btnReset && !btnReset.__ftBound){ btnReset.__ftBound = true; btnReset.addEventListener('click', window.feutexReset); } if(btnSample && !btnSample.__ftBound){ btnSample.__ftBound = true; btnSample.addEventListener('click', loadSample); } if(inputEl && !inputEl.__ftBound){ inputEl.__ftBound = true; inputEl.addEventListener('keydown', function(e){ if((e.ctrlKey || e.metaKey) && e.key === 'Enter') convertFromUI(); }); } }; window.feutexSelfTest = function(){ var tests = [ { name: 'Extract from HTML + normalize @context', input: '', opts: {mode:'extract_jsonld', normalizeContext:true, sortKeys:false, useGraph:true}, expectedSubstr: '"@context": "https://schema.org"' }, { name: 'Multiple scripts -> @graph', input: '', opts: {mode:'json_pretty', normalizeContext:true, sortKeys:false, useGraph:true}, expectedSubstr: '"@graph"' }, { name: 'JSON -> HTML script (min)', input: '{"@context":"https://schema.org","@type":"Product","name":"Widget"}', opts: {mode:'html_script_min', normalizeContext:true, sortKeys:false, useGraph:true}, expectedSubstr: '