👀 Live Preview
Modern inline script (no deprecated language attribute):
This uses <script> without language—the HTML5 default.

The language attribute was historically used on <script> elements to name the scripting language (for example language="javascript"). In HTML5 it is obsolete and deprecated. Modern pages use plain <script> tags or the type attribute instead. Do not confuse this with the lang attribute, which declares the human language of page content on <html> and other elements.
Legacy script tag.
Obsolete in HTML5.
Script vs content.
What to use today.
javascript, VBScript.
Remove from new code.
languageThe original purpose of the language attribute was to tell the browser which scripting engine should run inline code inside a <script> element—JavaScript, VBScript, or other legacy languages. In early HTML, before standardized MIME types, authors wrote <script language="JavaScript"> so browsers knew how to interpret the block.
HTML5 made JavaScript the default script language and marked the language attribute as obsolete. Browsers no longer rely on it; they execute script blocks as JavaScript regardless. You may still see the attribute in old tutorials or legacy pages, which is why it belongs in an attributes reference.
To declare that your page is in English or Spanish, use lang on <html> (e.g. <html lang="en">), not language. The old reference sometimes mixed these up—they are completely different attributes.
Legacy syntax on a <script> element (shown for recognition only—do not use in new projects):
<script language="javascript">
alert("This script uses the deprecated language attribute!");
</script>Modern equivalent:
<script>
alert("Modern scripts omit language entirely.");
</script><script> (and sometimes <style> in very old markup).javascript, JavaScript 1.2).JavaScript and javascript were both common.type="text/javascript" only if you need an explicit MIME type; default is JavaScript.lang, not language.The language attribute accepted a string naming the scripting language. Common legacy values included:
javascript or JavaScript — ECMAScript / JavaScript (most common).JavaScript 1.1, JavaScript 1.2, etc. — Version hints (ignored by modern browsers).livescript — Early Netscape name for JavaScript.vbscript or VBScript — Microsoft VBScript (IE-era; unsupported in modern browsers).jscript — Microsoft’s JavaScript variant name.Dynamically setting the attribute (legacy pattern—avoid in new code):
var script = document.createElement("script");
script.setAttribute("language", "javascript"); // deprecated
script.textContent = "alert('legacy pattern');";| Use Case | Legacy (avoid) | Modern replacement |
|---|---|---|
| Inline JavaScript | <script language="javascript"> | <script> |
| Explicit MIME type | language="javascript" | type="text/javascript" |
| External script | language + src | <script src="..."> |
| Page in English | language="en" ❌ | <html lang="en"> |
| Module script | N/A | <script type="module"> |
| JSON data block | N/A | <script type="application/json"> |
| Element / Context | Supported? | Notes |
|---|---|---|
<script> | Obsolete | Original and primary use; ignored by HTML5 |
<html> | No | Use lang for document language |
<style> | Never standard | Some very old pages used it; invalid today |
| Any other element | No | Not a global attribute |
language vs lang vs type| Feature | language | lang | type on script |
|---|---|---|---|
| Status | Deprecated | Standard | Standard |
| Used on | <script> (legacy) | Any element | <script> |
| Declares | Scripting language name | Human content language | MIME type of script |
| Example | language="javascript" | lang="en" | type="module" |
| Use today? | No | Yes | When needed |
Legacy language on script, the modern replacement, and how the attribute was set dynamically in old code.
Modern inline script (no deprecated language attribute):
This uses <script> without language—the HTML5 default.
Historical markup you may encounter when reading older sites:
<script language="javascript">
alert("This script uses the deprecated language attribute!");
</script>In the past, authors added language="javascript" so browsers knew which engine to use. HTML5 standardized JavaScript as the default and deprecated this attribute entirely.
Write new scripts without language:
<script>
alert("Modern scripts omit language.");
</script>
<!-- Optional explicit MIME type -->
<script type="text/javascript" src="app.js"></script>
<!-- ES modules -->
<script type="module" src="main.js"></script>The type attribute selects the script kind via MIME type. Omitting both type and language defaults to classic JavaScript execution.
Legacy code sometimes created scripts and set language at runtime:
<button id="runScript">Run legacy script</button>
<script>
document.getElementById("runScript").addEventListener("click", function () {
var script = document.createElement("script");
script.setAttribute("language", "javascript"); // deprecated
script.textContent = "alert('Dynamic legacy pattern');";
document.body.appendChild(script);
});
</script>Dynamically injected scripts execute as JavaScript by default. The old reference incorrectly described this as changing lang on <html>—that is a different attribute for human language, not script type.
lang for accessibility — Screen readers need <html lang="en">, not language on scripts.language="en" on <html> — That is invalid and does not declare document language.lang — On paragraphs and spans, not on script tags.language attribute never helped assistive tech with page locale.e.g. language="javascript".
Picked script engine.
JavaScript is default.
Omit language in new code.
The language attribute is obsolete. Browsers ignore it and run script blocks as JavaScript. It remains parseable in legacy markup but must not appear in new HTML5 documents.
Scripts execute without it; attribute is a no-op in modern browsers.
Bottom line: Recognize it in legacy code; replace with plain <script> or type in new projects.
<script> for JavaScript in new code<html lang="...">type="module" for ES module scriptslanguage when refactoring legacy pageslanguage to new script tagslanguage with langlanguage="en" on <html> for English contentlanguage="VBScript" (unsupported in modern browsers)The language attribute is a legacy tool for naming the scripting language on <script> elements. It is obsolete in HTML5 and should not be used in new documents.
For JavaScript, use a plain <script> tag or the type attribute. For human page language and accessibility, use lang on <html>. Understanding the difference keeps your markup valid and your internationalization strategy correct.
languageBookmark these before editing legacy script tags.
Obsolete in HTML5
StatusLegacy use only
ElementDifferent attribute
CompareOr plain script
Modernhtml lang=...
A11y<script> that named the scripting language (e.g. language="javascript"). HTML5 made it obsolete.lang declares human language of content (<html lang="en">). language on script named the programming language and is deprecated.<script>, type="text/javascript", or type="module". For page language: lang on <html>.lang on content, not the obsolete script language attribute. The old reference incorrectly suggested using language for document SEO.Compare legacy language markup with today’s <script> and type patterns in the Try It editor.
5 people found this page helpful