HTML Guides for data block
Learn how to identify and fix common HTML validation errors flagged by the W3C Validator — so your pages are standards-compliant and render correctly across every browser. Also check our Accessibility Guides.
The defer attribute is invalid on a <script> element whose type marks it as a data block, because browsers never execute data blocks.
When the type attribute is anything other than a JavaScript MIME type, module, importmap, or speculationrules, the browser treats the element as a data block: inline content that other scripts on the page can read, but that is never fetched or run. The most common example is application/ld+json structured data. Since nothing executes, there is nothing to defer, and the attribute is invalid.
This usually happens when a template or a performance plugin adds defer to every <script> tag on the page, including the data blocks.
Examples
Invalid: defer on a data block
<scripttype="application/ld+json"defer>
{
"@context":"https://schema.org",
"@type":"Organization",
"name":"Example"
}
</script>
Valid: data block without defer
<scripttype="application/ld+json">
{
"@context":"https://schema.org",
"@type":"Organization",
"name":"Example"
}
</script>
Remove the defer attribute. If the script was actually meant to run, fix the type value instead: use a JavaScript MIME type, module, or omit the attribute entirely.
The async attribute is invalid on a <script> element whose type marks it as a data block, because browsers never fetch or execute data blocks.
When the type attribute is anything other than a JavaScript MIME type, module, importmap, or speculationrules, the browser treats the element as a data block: inline content that other scripts on the page can read, but that is never downloaded or run. The most common example is application/ld+json structured data. async controls when a script downloads and executes, so it has no meaning on an element that does neither.
This usually happens when a template or a performance plugin adds async to every <script> tag on the page, including the data blocks.
Examples
Invalid: async on a data block
<scripttype="application/ld+json"async>
{
"@context":"https://schema.org",
"@type":"Organization",
"name":"Example"
}
</script>
Valid: data block without async
<scripttype="application/ld+json">
{
"@context":"https://schema.org",
"@type":"Organization",
"name":"Example"
}
</script>
Remove the async attribute. If the script was actually meant to run, fix the type value instead: use a JavaScript MIME type, module, or omit the attribute entirely.
Validate at scale.
Ship accessible websites, faster.
Automated HTML & accessibility validation for large sites. Check thousands of pages against WCAG guidelines and W3C standards in minutes, not days.
Pro Trial
Full Pro access. Cancel anytime.
Start Pro Trial →Join teams across 40+ countries