Open any website — a news site, an online store, the page you’re reading this on — and the same thing sits underneath all of it: HTML. It’s the layer that holds a web page together. So if you’re just starting out in web development, this is exactly where to begin. It’s a friendly starting point too, because HTML is one of the easier things you’ll learn in this whole field.
By the time you reach the end, you’ll know what HTML really is, how it works under the hood, and you’ll have written a real web page with your own hands. No background needed. Let’s get into it.
What HTML actually is
HTML stands for HyperText Markup Language. Long name, but each word tells you something useful, so let’s take them apart.
HyperText is text that can link to other text. Those clickable links that send you from one page to another — that’s the “hyper” idea. Markup means you take plain text and mark it up: you wrap pieces of it in little labels that explain what each piece is — “this part is a heading,” “this is a paragraph,” “this is an image.” And Language just means it has its own rules for how you write it, like any language does.
Here’s the one sentence worth remembering above everything else: HTML describes what your content is, not what it looks like. It’s the part that says “this is the title, this is a paragraph, here’s a list, there’s a button.” How those things actually look — the colors, the fonts, the spacing — is a separate job handled by something else (CSS, which we’ll come back to).
A house is a useful way to picture it:
- HTML is the frame and the walls — the structure. It decides where the rooms are and where the doors go.
- CSS is the paint, the furniture, the whole look of the place.
- JavaScript is the wiring and the plumbing — the stuff that does something when you flip a switch.
A house with just a frame and no paint still stands. It’s bare, but it works. That’s HTML on its own: plain-looking, but fully functional.
HTML isn't a programming language
A lot of beginners assume HTML is programming. It isn’t, and it helps to know that early. HTML is a markup language — it has no logic, no calculations, no way to make decisions. It can’t loop or do math. All it does is describe content. That’s not a shortcoming; it’s exactly what the job needs. The actual logic of a website comes later, from JavaScript.
Tags and elements: how it all works
HTML does its job by wrapping your content in tags. A tag is just a keyword sitting inside angle brackets, like <p> or <h1>.
Most tags come as a pair: one to open and one to close. The closing tag is the same word with a slash in front of it. Here’s a paragraph:
<p>This is a paragraph of text.</p>
Three things are going on there:
<p>is the opening tag — “a paragraph starts here.”</p>is the closing tag — the slash means “and it ends here.”- The text in the middle is the content.
Put all three together — opening tag, content, closing tag — and you’ve got an element. So when someone says “tag,” they mean the bracket bit; “element” is the whole thing. People mix the two words up in casual talk, but that’s the real difference.
A few elements you’ll end up using over and over:
<h1>This is a big heading</h1>
<h2>This is a smaller heading</h2>
<p>This is a paragraph.</p>
<strong>This text is bold and important.</strong>
<em>This text is emphasized.</em>
Headings run from <h1> down to <h6>, biggest and most important to smallest — think of them like the outline of a document, with <h1> as the main title.
Attributes: giving an element extra details
Sometimes a tag needs more than just its name to do its job. That’s where attributes come in. An attribute goes inside the opening tag and hands the element a bit of extra information, written as name="value".
A link is the classic case. The link element is <a> (short for “anchor”), and a link is useless unless it knows where to send you. You give it that destination with the href attribute:
<a href="https://acy-partner.com">Visit our site</a>
Reading that left to right:
<a>— this is a link.href="https://acy-partner.com"— the attribute saying where it goes.Visit our site— the words the visitor actually sees and clicks.
Images work much the same way. An image has no text of its own to wrap, so instead you point it at a file with the src (“source”) attribute and describe it with alt (“alternative text”):
<img src="cat.jpg" alt="A sleepy orange cat" />
Always fill in alt text
That alt attribute on an image isn’t filler. Screen readers read it aloud to people who can’t see the image, it appears when an image fails to load, and search engines lean on it to figure out what your picture shows. Just describe what’s actually in the image. Doing this well helps accessibility and search ranking at the same time — it’s a small habit with a real payoff.
You might’ve noticed <img> has no closing tag. A handful of elements are self-closing — they can’t hold any content, so there’s nothing to wrap and nothing to close. <img>, <br> (a line break), and <hr> (a horizontal divider line) are the ones you’ll bump into most.
Writing your first page
Time to put the pieces together into a real, working page. Every proper HTML document is built on the same basic skeleton. Don’t stress about memorizing it — just read it and get a feel for the shape.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My First Page</title>
</head>
<body>
<h1>Hello, web!</h1>
<p>This is my very first web page. I made it with HTML.</p>
<a href="https://acy-partner.com">And here's a link.</a>
</body>
</html>
That’s a complete web page, no exaggeration. Save it in a file ending in .html, double-click it, and your browser opens it like any other site. Let’s go through it piece by piece:
<!DOCTYPE html>sits at the very top of every HTML page. It tells the browser “treat this as modern HTML.” It isn’t really a tag — think of it as a label stamped on the file. Always put it there.<html lang="en">is the root element that wraps everything else. Thelangattribute tells browsers and search engines the page is in English. For an Indonesian page, you’d writelang="id"instead.<head>holds information about the page that the visitor doesn’t read directly — settings, metadata, the title.<meta charset="UTF-8">tells the browser which set of characters to use. UTF-8 covers basically every letter, symbol, and emoji, so include it or you may end up with garbled text.<meta name="viewport" ...>makes the page size itself correctly on phones. Leave it out and your site shows up tiny and zoomed-out on mobile.<title>is the text shown on the browser tab, and it’s also the title Google displays in search results. It does not appear inside the page itself.<body>is everything the visitor actually sees — headings, paragraphs, images, links, buttons. This is where you’ll spend most of your time.
head and body get mixed up a lot
Keep these two straight: <head> is for behind-the-scenes information (the title, metadata, links to stylesheets), and <body> is for the visible content. A really common beginner slip is putting something visible — a <p> or an <h1> — inside the <head>, and then wondering why it never shows up. If you wrote something and it’s just not appearing, the first thing to check is whether it’s inside <body>.
Putting elements inside other elements
Elements can hold other elements. This is called nesting, and it’s how you build actual structure instead of a flat wall of text. A list, for example, is a <ul> (unordered list) element with several <li> (list item) elements tucked inside it:
<ul>
<li>Learn HTML</li>
<li>Learn CSS</li>
<li>Learn JavaScript</li>
</ul>
There’s one rule worth getting right from the start: close your tags in the reverse order you opened them. Open A, then B — close B first, then A. Like a set of boxes nested inside each other. This is correct:
<p>This is <strong>very important</strong> text.</p>
And this is wrong, because the tags cross over each other instead of nesting cleanly:
<p>This is <strong>very important</p></strong>
Browsers are forgiving and will often guess what you meant, but messy nesting leads to bugs that are a pain to find later. Nest things properly now and save yourself the headache.
How HTML, CSS, and JavaScript split the work
You’ll hear these three names mentioned together constantly, so let’s nail down who does what. Picture a single button:
<button>Buy now</button>
- HTML creates the button and gives it the words “Buy now.” On its own it’s plain and gray, but it’s a real, clickable button.
- CSS makes it look good — a green background, rounded corners, a nicer font, a little hover effect.
- JavaScript makes it do something — when you click it, add the item to a cart, open a popup, send the order off to a server.
Each layer stays in its own lane. The nice part is you learn them one at a time, in exactly that order — and it all starts with HTML, because there’s nothing to style and nothing to make interactive until the structure exists first.
Take them one at a time
Resist the urge to learn HTML, CSS, and JavaScript all at once. It’s a lot, and the three of them blur together in your head when you try. Get comfortable with HTML first — it’s quick — then move to CSS, then JavaScript. Each one builds on the one before it. You’ll actually get there faster this way than by trying to swallow everything at the same time.
The elements you’ll reach for most
Hundreds of HTML elements exist, but you don’t need to know them all — not even close. In day-to-day work you keep coming back to the same small set. These are the ones worth getting familiar with early:
| Element | What it’s for |
|---|---|
<h1>–<h6> |
Headings, from most to least important |
<p> |
A paragraph of text |
<a> |
A link to another page or site |
<img> |
An image |
<ul> / <ol> / <li> |
Bulleted / numbered lists and their items |
<div> |
A generic box used to group things together |
<span> |
A generic inline wrapper for a bit of text |
<button> |
A clickable button |
<input> |
A form field — a text box, a checkbox, and so on |
Get comfortable with these and you can build a surprising amount. Everything else you look up the moment you need it — and you really will look things up. Even people who’ve done this for years search for the exact element or attribute all the time. Nobody keeps the whole thing in their head.
Mistakes beginners tend to make
Knowing the usual traps ahead of time saves you from staring at the screen wondering what went wrong:
- Forgetting to close a tag. Open a
<div>, forget the</div>, and your whole layout can drift in strange ways. Closing tags matter more than they look like they should. - Putting visible content in the
<head>. Like we said: visible stuff belongs in<body>. If something isn’t showing up, check this first. - Skipping
alttext on images. Bad for accessibility, bad for search. Describe your images. - Using the wrong element for the job. A thing people click should be a
<button>or an<a>, not a<div>you’ve rigged up to be clickable. Pick the right element and you get keyboard support and screen-reader support for free. This is the heart of what people call semantic HTML — a topic big enough to deserve its own article down the line. - Expecting plain HTML to look polished. It won’t, and that’s normal. Making things look good is CSS’s job, not a sign you did something wrong.
Wrapping up
Quick recap of what you’ve picked up:
- HTML (HyperText Markup Language) is the language that sets the structure and meaning of every web page.
- Content gets wrapped in tags like
<p>and<h1>; an opening tag, its content, and its closing tag together make an element. - Attributes such as
hrefandsrchand elements extra information. - Every page follows the same skeleton:
<!DOCTYPE html>, then an<html>holding a<head>(behind-the-scenes info) and a<body>(the visible content). - HTML is one of three layers working together: HTML for structure, CSS for looks, JavaScript for behavior.
That’s a real foundation, and you genuinely understand it now — not just the buzzwords. The best next move is to actually write some HTML. Copy that first-page example into a file called index.html, open it in your browser, and start poking at it. Change the heading, add a paragraph, break something on purpose and fix it. That hands-on tinkering is what makes it stick.
In the next article we’ll slow down and look at the basic structure of an HTML document in more detail — what each part of that skeleton is really doing, and how to set a page up properly from scratch.