# HTML là gì? Ngôn ngữ đánh dấu tạo nên mọi trang web

> HTML là ngôn ngữ đánh dấu định nghĩa cấu trúc mọi trang web — cách phân biệt thẻ với phần tử, và vai trò của Semantic HTML trong lập trình hiện đại.

Nguồn: https://camnangai.com/ky-thuat/html-la-gi  
Xuất bản: 2026-08-02

**HTML** (HyperText Markup Language) là ngôn ngữ đánh dấu tiêu chuẩn để xây dựng cấu trúc cơ bản
  của mọi trang web.

Nó định nghĩa ý nghĩa và cách sắp xếp các thành phần nội dung như văn bản, hình ảnh và siêu liên
kết. Trình duyệt dựa vào mã nguồn HTML để hiểu cách hiển thị dữ liệu cho người dùng cuối.

Đây là thành phần cơ bản nhất của [World Wide Web](https://camnangai.com/ky-thuat/cach-internet-hoat-dong). Dù bạn xây một
blog cá nhân hay một hệ thống thương mại điện tử phức tạp, HTML vẫn là nền tảng không thể thay thế.


  Nó không chạy logic tính toán như một ngôn ngữ lập trình, mà hoạt động như sơ đồ chỉ dẫn để trình
  duyệt dựng nên giao diện.


Nắm vững HTML là bước đầu tiên và bắt buộc với bất kỳ ai làm
[lập trình frontend](https://camnangai.com/ky-thuat/lap-trinh-frontend-la-gi). Hiểu bản chất của nó giúp bạn tối ưu cách
trình duyệt xử lý dữ liệu, và giữ sản phẩm nhất quán trên nhiều nền tảng khác nhau.

![HTML là bộ khung cấu trúc dựng nên một trang web](https://camnangai.com/articles/html-la-gi/01-infographic-vn.webp)

## HTML là gì?

**HyperText Markup Language** được hiểu qua ba thành phần cốt lõi. "Hypertext" (siêu văn bản) là các
liên kết nối các trang web lại với nhau; "Markup" (đánh dấu) là việc dùng những ký hiệu đặc biệt để
chú thích văn bản và hình ảnh cho trình duyệt; "Language" (ngôn ngữ) là hệ thống quy tắc mà máy tính
dùng để thông dịch các chỉ dẫn đó.

![Ba thành phần tạo nên HTML: Hypertext là các liên kết, Markup là việc đánh dấu nội dung, Language là hệ quy tắc trình duyệt đọc được](https://camnangai.com/articles/html-la-gi/02-vn.webp)

**HTML** đóng vai trò khung xương của toàn bộ trang web. Trong quy trình phát triển, nó chỉ đảm nhiệm
phần cấu trúc dữ liệu. Ví một trang web như một ngôi nhà, HTML chính là phần khung
thép và tường gạch thô: nó quy định vị trí cửa sổ, độ cao trần nhà, nhưng không quan tâm màu sơn hay
cách hệ thống điện vận hành.

Mỗi tài liệu HTML là một tệp văn bản thô chứa các chỉ dẫn về ý nghĩa nội dung. Khi bạn bao một đoạn
chữ trong những ký hiệu cụ thể, bạn đang ra lệnh cho trình duyệt: "Đây là một tiêu đề quan trọng", hoặc
"Đây là một danh sách các mục". Sự minh bạch về cấu trúc đó cho phép nhiều loại thiết bị, từ máy tính
để bàn đến điện thoại, hiểu và tái hiện nội dung chính xác.

Viết mã HTML chuẩn xác không chỉ giúp trang hiển thị đúng, mà còn đưa nội dung của bạn vào mạng lưới
thông tin toàn cầu. Khi bạn nối nội dung của mình với các trang khác qua siêu liên kết, bạn đang xây
dựng đúng cái bản chất đã làm nên Internet. Đây là công nghệ có tính tương thích cao nhất, chạy ổn
định trên mọi trình duyệt hiện có.

## Thẻ, phần tử và thuộc tính: ba khái niệm dễ nhầm

Bạn cần phân biệt rạch ròi ba khái niệm kỹ thuật: thẻ (tag), phần tử (element) và thuộc tính
(attribute). **Thẻ** là các từ khóa nằm trong cặp ngoặc nhọn `< >`, đánh dấu điểm bắt đầu và kết thúc của một
vùng nội dung. **Phần tử** là cấu trúc hoàn chỉnh gồm thẻ mở, nội dung bên trong và thẻ đóng. **Thuộc
tính** nằm ngay trong thẻ mở, cung cấp thông tin cấu hình hoặc điều chỉnh hành vi của phần tử đó.

![Cấu tạo một phần tử HTML: thẻ mở kèm thuộc tính, phần nội dung ở giữa và thẻ đóng](https://camnangai.com/articles/html-la-gi/03-vn.webp)

Về quy tắc đặt tên, HTML không phân biệt chữ hoa chữ thường. Bạn viết `<TITLE>` hay `<title>` thì trình
duyệt vẫn xử lý như nhau. Nhưng dùng chữ thường là quy ước bắt buộc để mã nguồn sạch, nhất quán và dễ
bảo trì. Hầu hết các phần tử đều cần thẻ đóng để trình duyệt xác định phạm vi tác động.

Ngoại lệ là nhóm phần tử rỗng (void elements) như `<img>`, `<br>` hay `<input>`. Chúng không chứa nội
dung văn bản đi kèm nên không có thẻ đóng, và hoạt động dựa vào thuộc tính để nhúng dữ liệu bên ngoài
hoặc tạo các điều khiển tương tác. Lồng sai thẻ hoặc quên thẻ đóng ở các phần tử thông thường sẽ buộc
trình duyệt tự dự đoán cấu trúc, gây lãng phí tài nguyên xử lý.

Cấu tạo của một phần tử HTML cơ bản:

```html
<p class="description">Đây là nội dung một phần tử đoạn văn.</p>
```

Ở ví dụ này, `<p>` là thẻ mở, `class="description"` là thuộc tính, văn bản ở giữa là nội dung, và
`</p>` là thẻ đóng. Bốn phần đó ghép lại thành một chỉ dẫn logic cho trình duyệt xử lý luồng dữ liệu.

## Một trang HTML có cấu trúc như thế nào?

Mọi tài liệu HTML chuẩn mực đều bắt đầu bằng khai báo `<!DOCTYPE html>`. Đây không phải một thẻ HTML mà
là chỉ thị để trình duyệt kích hoạt chế độ tiêu chuẩn (standards mode) của HTML5. Toàn bộ cấu trúc
trang sau đó nằm trong thẻ gốc `<html>`, và bên trong thẻ gốc, tài liệu luôn chia thành hai khu vực
tách biệt: `<head>` và `<body>`.

![Cấu trúc lồng nhau của một tài liệu HTML: khai báo DOCTYPE, thẻ gốc html, rồi tách thành head và body](https://camnangai.com/articles/html-la-gi/04-vn.webp)

Thẻ `<head>` chứa các thông tin meta mà người dùng không nhìn thấy trực tiếp trên giao diện: tiêu đề
trang hiển thị trên tab trình duyệt, bộ mã hóa ký tự (UTF-8), và các liên kết tới tệp CSS hoặc
JavaScript bên ngoài. Đây là nơi công cụ tìm kiếm và trình duyệt thu thập dữ liệu về bản chất của trang
trước khi hiển thị nội dung.

Thẻ `<body>` chứa toàn bộ nội dung hiển thị cho người dùng: văn bản, hình ảnh, video. Khi đọc mã nguồn,
trình duyệt xây dựng một cấu trúc gọi là Document Object Model (DOM) dưới dạng cây các nút (tree of
nodes). Mỗi phần tử bạn viết trở thành một nút trong cây này, thiết lập quan hệ cha — con (parent —
child) hoặc anh em (sibling). Đặt thẻ `<strong>` bên trong thẻ `<p>` thì `<p>` là cha và `<strong>` là
con.

Cấu trúc tối giản của một trang web chuẩn:

```html
<!doctype html>
<html lang="vi">
  <head>
    <meta charset="UTF-8" />
    <title>Tiêu đề trang chuyên nghiệp</title>
  </head>
  <body>
    <h1>Cấu trúc cây trong HTML</h1>
    <p>Các phần tử lồng nhau tạo nên <strong>quan hệ cha-con</strong>.</p>
  </body>
</html>
```

Thứ tự và cách lồng thẻ ảnh hưởng trực tiếp tới hiệu suất trình duyệt. Lồng sai quy tắc — đưa một thẻ
khối `<div>` vào trong một thẻ nội dòng `<span>` chẳng hạn — buộc trình duyệt chạy thuật toán sửa lỗi
(error correction). Mỗi lần chỉ tốn vài mili giây, nhưng lặp lại đủ nhiều thì tài nguyên xử lý hao đi
thấy rõ và trang phản hồi chậm hơn.

## HTML khác CSS và JavaScript ở chỗ nào?

Ba công nghệ này tách biệt hoàn toàn về vai trò. **HTML** là khung xương, xác định cấu trúc dữ liệu
thô: đâu là đoạn văn, đâu là danh sách. CSS (Cascading Style Sheets) là lớp da và trang phục, quy định
màu sắc, font chữ và bố cục. JavaScript là hệ thống cơ quan và hành vi, cho phép trang phản hồi hành
động của người dùng như nhấn nút hay gửi dữ liệu.

![Ba lớp của một trang web: HTML là khung xương, CSS là lớp da và trang phục, JavaScript là hành vi](https://camnangai.com/articles/html-la-gi/05-vn.webp)

Sự tách biệt này gọi là "separation of concerns" trong kỹ thuật phần mềm, và nó khiến việc bảo trì mã
nguồn rẻ đi rất nhiều. Muốn đổi font chữ của toàn hệ thống, bạn chỉ sửa một tệp CSS duy nhất thay vì
đụng vào hàng nghìn dòng HTML. HTML lúc này chỉ tập trung vào việc lưu giữ thông tin ở dạng thuần túy
nhất.

Dùng HTML để định dạng giao diện — thẻ `<font>` hay thuộc tính `bgcolor` — là cách làm lỗi thời và đã
bị loại khỏi tiêu chuẩn hiện đại. Tư duy đúng là giữ cho mã HTML sạch và "mù" về mặt thẩm mỹ. Mã dễ đọc
hơn, và trang cũng nhẹ hơn, vì trình duyệt có thể tải song song các tệp CSS và JavaScript.

Sự phối hợp giữa ba lớp diễn ra như sau: HTML tạo ra các "hộp" chứa nội dung, CSS định vị các hộp đó
trên màn hình, JavaScript thêm logic xử lý bên trong hộp. Tách bạch rõ ràng thì bạn thay hẳn lớp giao
diện hoặc lớp hành vi mà cấu trúc dữ liệu cốt lõi vẫn nguyên vẹn.

## Semantic HTML: vì sao chọn đúng thẻ lại quan trọng?

**Semantic HTML** (HTML ngữ nghĩa) là tư duy dùng các thẻ phản ánh đúng bản chất nội dung mà chúng bao
bọc, thay vì dùng những thẻ vô nghĩa như `<div>`. Các thẻ `<header>`, `<nav>`, `<main>`, `<section>`,
`<article>`, `<aside>` và `<footer>` cho máy móc và thiết bị hỗ trợ biết vai trò của từng phần trên
trang.

![Đối chiếu trang chỉ dùng thẻ div với trang dựng bằng thẻ ngữ nghĩa header, nav, main và footer](https://camnangai.com/articles/html-la-gi/06-vn.webp)

Phân biệt `<section>` và `<article>` là ví dụ điển hình của tư duy chọn thẻ. Dùng `<article>` cho nội
dung độc lập, tách rời được và tái sử dụng ở nơi khác — một bài blog, một bình luận. Dùng `<section>`
để nhóm các nội dung cùng chủ đề trong một tài liệu. Chọn đúng thẻ làm cấu trúc tài liệu minh bạch và
có tổ chức.

Lợi ích thực tế lớn nhất nằm ở SEO và accessibility (khả năng tiếp cận). Trình thu thập dữ liệu của
Google ưu tiên các trang có cấu trúc ngữ nghĩa rõ ràng để xếp hạng nội dung chính xác hơn. Với người
khiếm thị dùng trình đọc màn hình, các thẻ ngữ nghĩa cho phép nhảy thẳng giữa các vùng chức năng thay
vì nghe cả trang từ đầu đến cuối.

Hạn chế tối đa tình trạng "div-soup" — lạm dụng `<div>` và `<span>` cho mọi thành phần. Chúng tiện cho
việc dàn trang bằng CSS, nhưng không nói gì với trình duyệt về nội dung bên trong. Một kỹ sư giỏi luôn
tự hỏi "phần nội dung này có vai trò gì?" trước khi quyết định viết thẻ nào.

## Trình duyệt biến HTML thành trang web ra sao?

Quá trình bắt đầu ngay khi trình duyệt nhận luồng dữ liệu thô từ máy chủ. Nó phân giải (parsing) văn
bản thành Document Object Model (DOM) — một biểu diễn lập trình của trang web, nơi mọi thẻ HTML được
chuyển hóa thành các đối tượng mà lập trình viên tác động vào được. Đây là quá trình tốn tài nguyên và
đòi hỏi độ chính xác cao về cú pháp.

![Đường đi từ mã nguồn HTML qua bước phân giải, dựng cây DOM, đến giao diện hiển thị trên màn hình](https://camnangai.com/articles/html-la-gi/07-vn.webp)

Trình duyệt không bao giờ hiển thị các thẻ như `<p>` hay `<h1>`; nó dùng chúng làm chỉ dẫn để áp dụng
cách hiển thị. Ngay cả khi bạn chưa viết dòng CSS nào, trang vẫn có giao diện cơ bản nhờ user-agent
stylesheet — bảng định dạng mặc định của trình duyệt, quy định rằng `<h1>` phải to hơn `<p>`. Mỗi trình
duyệt lại có một stylesheet mặc định hơi khác nhau, nên giao diện sẽ lệch giữa các trình duyệt nếu
không dùng kỹ thuật "CSS reset".

Nếu mã nguồn có lỗi, chẳng hạn thẻ lồng sai quy tắc cha — con, trình duyệt chạy cơ chế tự sửa lỗi để cố
hiển thị trang. Điều này tốn hiệu năng CPU và có thể cho ra kết quả không như ý. Mã HTML chuẩn xác giúp
trình duyệt bỏ qua bước dự đoán lỗi, và tốc độ render tăng lên thấy rõ.

Toàn bộ quá trình từ mã nguồn thô đến DOM diễn ra liên tục, không phải một lần rồi thôi. Khi JavaScript
thay đổi một nút trong cây DOM, trình duyệt phải tính toán lại bố cục (re-flow) và vẽ lại (re-paint)
các thành phần trên màn hình. Hiểu cách trình duyệt xử lý DOM giúp bạn viết mã tránh được các tác vụ
gây giật lag.

## Từ HTML 1.0 đến living standard: chuẩn đã đổi thế nào?

Tim Berners-Lee phát minh World Wide Web năm 1989, rồi đến năm 1991 thì phát minh ra HTML. Qua nhiều
giai đoạn, ngôn ngữ này đi qua các mốc HTML 2.0 (1995), HTML 3.2 (1997), HTML 4.01 (1999) và chuẩn
XHTML 1.0 nghiêm ngặt (2000). Mỗi phiên bản đều cố giải quyết xung đột giữa các trình duyệt và chuẩn hóa cách hiển thị thông
tin.

![Dòng thời gian của HTML: World Wide Web năm 1989, HTML năm 1991, HTML5 năm 2014 và mô hình Living Standard hiện nay](https://camnangai.com/articles/html-la-gi/08-vn.webp)

Sự ra đời của HTML5 năm 2014 đánh dấu bước chuyển lớn. Nó bổ sung thẻ mới, và quan trọng hơn là mang theo
cả một hệ sinh thái API cho ứng dụng web. Hiện nay không còn ai nói đến "HTML6", bởi HTML đã trở thành một
**Living Standard** (tiêu chuẩn sống) do tổ chức WHATWG duy trì. Ngôn ngữ được cập nhật liên tục từng
tính năng một, thay vì đợi những bước nhảy theo số phiên bản.

Khác biệt lớn nhất giữa chuẩn cũ và chuẩn hiện đại nằm ở tính tối giản. Ở phiên bản cũ, bạn phải khai
báo một dòng DOCTYPE rất dài và phức tạp để chỉ định phiên bản cụ thể. Với HTML5, `<!DOCTYPE html>` là
đủ. Hướng tiến hóa của HTML là làm mã nguồn mạnh hơn nhưng đồng thời đơn giản hơn cho người viết.

Là một Living Standard, HTML cho phép các trình duyệt hiện đại triển khai công nghệ mới ngay khi chúng
được thống nhất. Kỹ sư phần mềm nhờ đó làm việc trong môi trường ổn định hơn, nơi tính năng được phát
triển dựa trên đồng thuận của cộng đồng công nghệ toàn cầu thay vì sự độc quyền của một hãng trình
duyệt.

## HTML hiện đại làm được những gì?

HTML5 đưa web vượt xa giới hạn của những trang tài liệu tĩnh. Bạn nhúng trực tiếp âm thanh và hình ảnh
qua các thẻ `<audio>` và `<video>` bản địa, không còn phụ thuộc vào plugin bên thứ ba kém bảo mật như
Flash trước đây. Thẻ `<canvas>` cho phép vẽ đồ họa 2D/3D và xử lý hình ảnh trực tiếp trong trình duyệt
bằng JavaScript.

Các API tích hợp sẵn mở rộng mạnh khả năng tương tác của trình duyệt. Geolocation API xác
định vị trí người dùng, Web Storage lưu trữ dữ liệu ngay tại máy khách, Web Workers chạy các tác vụ
nặng ở luồng nền mà không làm treo giao diện. Các thuộc tính `data-*` cho phép lưu dữ liệu tùy chỉnh
ngay trên phần tử HTML theo đúng chuẩn.

Hệ thống biểu mẫu (forms) trong HTML5 cũng được nâng cấp mạnh với Constraint Validation API. Bạn kiểm
tra tính hợp lệ của dữ liệu — định dạng email, trường bắt buộc, hoặc theo mẫu `pattern` — chỉ bằng các
thuộc tính HTML, không cần viết nhiều mã JavaScript. Trình duyệt tự hiển thị thông báo lỗi và chặn gửi
dữ liệu sai quy định.

Những khả năng này biến trình duyệt thành một nền tảng ứng dụng thực thụ. Bạn dựng được tính năng
kéo-thả (drag and drop), làm game, hay tạo công cụ chỉnh sửa ảnh chạy thẳng trên web. HTML hiện đại
là lớp giao diện lập trình giữa mã nguồn và các tính năng phần cứng của thiết bị, tạo tiền đề cho các
ứng dụng web tiến bộ (PWA).

## Học HTML tới đâu là đủ?

Với một kỹ sư phần mềm, học HTML không dừng ở việc nhớ tên các thẻ. Thứ cần nắm là tư duy xây dựng cấu
trúc và khả năng phân tích ngữ nghĩa nội dung, để viết ra mã sạch, hợp lệ và tương thích cao. Bạn không
cần thuộc lòng mọi thuộc tính, nhưng phải biết tra cứu tài liệu từ nguồn uy tín khi gặp bài toán phức
tạp.

Đây cũng là kỹ năng nền tảng bền nhất trong nghề web: các framework JavaScript có thể đổi sau vài năm,
còn quy tắc về cấu trúc và ngữ nghĩa của HTML thì gần như đứng yên. Một tài liệu HTML được cấu trúc tốt
giúp cả nhóm — designer lẫn lập trình viên backend — làm việc và tích hợp dễ hơn, và đó là thứ giữ chi
phí bảo trì thấp về lâu dài.

## Tài liệu tham khảo

- [Introduction to HTML — W3Schools](https://www.w3schools.com/html/html_intro.asp)
- [What is HTML? Definition and Meaning of Hypertext Markup Language — freeCodeCamp](https://www.freecodecamp.org/news/what-is-html-definition-and-meaning/)
- [Overview of HTML — web.dev](https://web.dev/learn/html/overview)
- [HTML: HyperText Markup Language — MDN](https://developer.mozilla.org/en-US/docs/Web/HTML)
