HTML language Attribute

Beginner
⏱️ 5 min read
📚 Updated: Jun 2026
🎯 3 Examples
Deprecated & Scripts

Introduction

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.

What You’ll Learn

01

<script> Only

Legacy script tag.

02

Deprecated

Obsolete in HTML5.

03

language vs lang

Script vs content.

04

Modern type

What to use today.

05

Legacy Values

javascript, VBScript.

06

Migration

Remove from new code.

Purpose of language

The 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.

⚠️
Not for document language

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.

📝 Syntax

Legacy syntax on a <script> element (shown for recognition only—do not use in new projects):

language-legacy.html
<script language="javascript">
  alert("This script uses the deprecated language attribute!");
</script>

Modern equivalent:

script-modern.html
<script>
  alert("Modern scripts omit language entirely.");
</script>

Syntax Rules

  • Historically valid on <script> (and sometimes <style> in very old markup).
  • Value was a free-form string naming the script language (e.g. javascript, JavaScript 1.2).
  • Case-insensitive in practice; JavaScript and javascript were both common.
  • Obsolete in HTML5—validators flag it; omit it in new code.
  • Use type="text/javascript" only if you need an explicit MIME type; default is JavaScript.
  • For page human language, use lang, not language.

💎 Values

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):

language-js.html
var script = document.createElement("script");
script.setAttribute("language", "javascript"); // deprecated
script.textContent = "alert('legacy pattern');";

⚡ Quick Reference

Use CaseLegacy (avoid)Modern replacement
Inline JavaScript<script language="javascript"><script>
Explicit MIME typelanguage="javascript"type="text/javascript"
External scriptlanguage + src<script src="...">
Page in Englishlanguage="en"<html lang="en">
Module scriptN/A<script type="module">
JSON data blockN/A<script type="application/json">

Applicable Elements

Element / ContextSupported?Notes
<script>ObsoleteOriginal and primary use; ignored by HTML5
<html>NoUse lang for document language
<style>Never standardSome very old pages used it; invalid today
Any other elementNoNot a global attribute

language vs lang vs type

Featurelanguagelangtype on script
StatusDeprecatedStandardStandard
Used on<script> (legacy)Any element<script>
DeclaresScripting language nameHuman content languageMIME type of script
Examplelanguage="javascript"lang="en"type="module"
Use today?NoYesWhen needed

Examples Gallery

Legacy language on script, the modern replacement, and how the attribute was set dynamically in old code.

👀 Live Preview

Modern inline script (no deprecated language attribute):

This uses <script> without language—the HTML5 default.

Example — Legacy Script with language

Historical markup you may encounter when reading older sites:

index.html
<script language="javascript">
  alert("This script uses the deprecated language attribute!");
</script>
Try It Yourself

How It Works

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.

Example — Modern Replacement

Write new scripts without language:

script-modern.html
<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>
Try It Yourself

How It Works

The type attribute selects the script kind via MIME type. Omitting both type and language defaults to classic JavaScript execution.

Dynamic Values with JavaScript

Legacy code sometimes created scripts and set language at runtime:

dynamic-language.html
<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>
Try It Yourself

How It Works

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.

♿ Accessibility

  • Use lang for accessibility — Screen readers need <html lang="en">, not language on scripts.
  • Do not put language="en" on <html> — That is invalid and does not declare document language.
  • Mark mixed-language content with lang — On paragraphs and spans, not on script tags.
  • Script content is not spoken as page language — The language attribute never helped assistive tech with page locale.
  • Remove deprecated attributes during audits — Cleaner markup is easier for tools and developers to understand.

🧠 How language Worked (Legacy)

1

Author adds language on script

e.g. language="javascript".

Legacy
2

Old browsers read hint

Picked script engine.

History
3

HTML5 makes it obsolete

JavaScript is default.

Standard
=

Use <script> or type today

Omit language in new code.

Browser Support

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.

⚠️ Obsolete · Ignored

Deprecated since HTML5

Scripts execute without it; attribute is a no-op in modern browsers.

0% Recommended use
Google Chrome Ignored (script still runs)
Obsolete
Mozilla Firefox Ignored
Obsolete
Apple Safari Ignored
Obsolete
Microsoft Edge Ignored
Obsolete
language on <script> Do not use

Bottom line: Recognize it in legacy code; replace with plain <script> or type in new projects.

💡 Best Practices

✅ Do

  • Use plain <script> for JavaScript in new code
  • Set document language with <html lang="...">
  • Use type="module" for ES module scripts
  • Remove language when refactoring legacy pages
  • Link to the lang attribute tutorial for page language

❌ Don’t

  • Add language to new script tags
  • Confuse language with lang
  • Put language="en" on <html> for English content
  • Rely on language="VBScript" (unsupported in modern browsers)
  • Follow outdated tutorials that call this a document SEO attribute

Conclusion

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.

Key Takeaways

Knowledge Unlocked

Five truths every developer should know about language

Bookmark these before editing legacy script tags.

5
Core concepts
📝 02

<script>

Legacy use only

Element
🌐 03

Not lang

Different attribute

Compare
📄 04

Use type

Or plain script

Modern
05

Page locale

html lang=...

A11y

❓ Frequently Asked Questions

A deprecated attribute on <script> that named the scripting language (e.g. language="javascript"). HTML5 made it obsolete.
No. lang declares human language of content (<html lang="en">). language on script named the programming language and is deprecated.
For scripts: plain <script>, type="text/javascript", or type="module". For page language: lang on <html>.
No. Modern browsers ignore the attribute. Removing it from JavaScript blocks is safe and recommended.
It was required practice in HTML 4 and early tutorials. Those pages were never updated after HTML5 standardized JavaScript as the default script language.
No. Search engines use lang on content, not the obsolete script language attribute. The old reference incorrectly suggested using language for document SEO.

Write modern script tags

Compare legacy language markup with today’s <script> and type patterns in the Try It editor.

Try modern script example →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful