Stage 2: Frontend Fundamentals

HTML · Lesson 06

Semantic HTML

header, nav, main, section, article, aside and footer for accessible, meaningful page structure.

HTML5 min readFree lesson

Learn how to write accessible, SEO-friendly HTML using meaningful tags.


1. What Does "Semantic" Mean?

Semantic means "relating to meaning."
Semantic HTML is HTML where the tag name itself describes the meaning and role of the content.

div vs. Semantic Tags

<!-- Non-semantic approach (bad example) -->
<div id="header">...</div>
<div id="nav">...</div>
<div id="main">...</div>
<div id="sidebar">...</div>
<div id="footer">...</div>

<!-- Semantic approach (good example) -->
<header>...</header>
<nav>...</nav>
<main>...</main>
<aside>...</aside>
<footer>...</footer>

Both versions may look identical in the browser,
but the semantic version makes the meaning of the code far clearer.


2. Why Should We Use Semantic HTML?

1) SEO (Search Engine Optimization)

  • Search engines (Google, Bing, and others) can understand the page content better.
  • Tags such as <h1>–<h6>, <article>, and <section> influence search rankings.

2) Accessibility

  • Screen readers used by visually impaired users guide through the page structure correctly.
  • For example, they automatically announce things like "jump to header," "navigation menu," and "start of main content."

3) Code Readability

  • Developers can immediately understand the role of each part when reading the code.
  • Maintenance and collaboration become much easier.

3. Key Semantic Tags

header - page or section header

The introductory/header area of a page or section.

<!-- Header for the entire page -->
<header>
  <h1>Site Name</h1>
  <p>Site description or slogan</p>
  <nav>...</nav>
</header>

<!-- Headers for specific sections work too -->
<article>
  <header>
    <h2>Post Title</h2>
    <p>Published: May 10, 2026</p>
  </header>
  <p>Post content...</p>
</article>

nav - navigation

Represents a collection of the site's main links (menus).

<nav>
  <ul>
    <li><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
    <li><a href="/blog">Blog</a></li>
    <li><a href="/contact">Contact</a></li>
  </ul>
</nav>

Use <nav> only for the site's main navigation.
Do not use it for ordinary links in the middle of the body text.

main - main content

The area that holds the core content of the page. Use it only once per page.

<main>
  <!-- The page's main content goes here -->
  <h1>Today's News</h1>
  <article>...</article>
  <article>...</article>
</main>

section - section

Represents an independent section (division) of a document.
Including a heading (<h2>–<h6>) is recommended.

<main>
  <section>
    <h2>Latest News</h2>
    <article>...</article>
    <article>...</article>
  </section>

  <section>
    <h2>Popular Articles</h2>
    <article>...</article>
  </section>
</main>

article - independent content

Content that stands on its own and can be distributed or reused independently.
It suits blog posts, news articles, comments, product cards, and so on.

<article>
  <header>
    <h2>What Is HTML?</h2>
    <p>Author: John Doe | May 10, 2026</p>
  </header>
  <p>HTML is the language that defines the structure of a web page...</p>
  <footer>
    <p>Tags: HTML, Web Basics</p>
  </footer>
</article>

section vs. article

Tag Independence Use Cases
<section> A division that is related to other sections Chapters, tab panels, groups of news categories
<article> Content that makes sense entirely on its own A blog post, a news article, a single comment

aside - supplementary content

Represents supplementary information indirectly related to the main content.
Used for sidebars, advertisements, lists of related posts, and so on.

<div>
  <main>
    <article>
      <h1>Article Title</h1>
      <p>Article content...</p>
    </article>
  </main>

  <aside>
    <h2>Related Articles</h2>
    <ul>
      <li><a href="#">Related article 1</a></li>
      <li><a href="#">Related article 2</a></li>
    </ul>

    <h2>Advertisement</h2>
    <p>Ad content...</p>
  </aside>
</div>

footer - footer

The footer area of a page or section.
It contains copyright information, contact details, a sitemap, and so on.

<footer>
  <p>© 2026 John Doe. All rights reserved.</p>
  <nav>
    <a href="/terms">Terms of Service</a>
    <a href="/privacy">Privacy Policy</a>
    <a href="/contact">Contact Us</a>
  </nav>
  <address>
    123 Teheran-ro, Gangnam-gu, Seoul | Email: [email protected]
  </address>
</footer>

figure and figcaption (review)

<figure>
  <img src="chart.png" alt="Graph showing revenue growth in 2026">
  <figcaption>Figure 1: Q1 2026 revenue overview (unit: hundred million KRW)</figcaption>
</figure>

time - date/time

Represents a date/time in a machine-readable format.

<!-- Write the datetime attribute in machine-readable ISO format -->
<time datetime="2026-05-10">May 10, 2026</time>
<time datetime="2026-05-10T14:30">2:30 PM</time>
<time datetime="PT2H30M">2 hours 30 minutes</time>

<!-- Usage example -->
<article>
  <h2>Latest News</h2>
  <p>Published: <time datetime="2026-05-10">May 10, 2026</time></p>
</article>

address - contact information

<address>
  <!-- Contact information for the author or organization -->
  Author: <a href="mailto:[email protected]">John Doe</a><br>
  123 Teheran-ro, Gangnam-gu, Seoul
</address>

4. Full Page Layout Example

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Blog</title>
</head>
<body>

  <!-- Page header: logo, site name, main menu -->
  <header>
    <h1>My Web Development Blog</h1>
    <nav>
      <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/html">HTML</a></li>
        <li><a href="/css">CSS</a></li>
        <li><a href="/js">JavaScript</a></li>
      </ul>
    </nav>
  </header>

  <!-- Page main content -->
  <main>

    <!-- Latest posts section -->
    <section>
      <h2>Latest Posts</h2>

      <!-- Individual blog post -->
      <article>
        <header>
          <h3>A Complete Guide to HTML Basics</h3>
          <time datetime="2026-05-10">May 10, 2026</time>
        </header>
        <p>Let's look at the basic structure of HTML and its main tags...</p>
        <footer>
          <p>Tags: HTML, Basics</p>
        </footer>
      </article>

      <article>
        <header>
          <h3>The Complete Guide to CSS Selectors</h3>
          <time datetime="2026-05-08">May 8, 2026</time>
        </header>
        <p>Everything you need to know about CSS selectors, all in one place...</p>
        <footer>
          <p>Tags: CSS, Selectors</p>
        </footer>
      </article>

    </section>

  </main>

  <!-- Sidebar: supplementary information -->
  <aside>
    <section>
      <h2>Categories</h2>
      <ul>
        <li><a href="/html">HTML (6 posts)</a></li>
        <li><a href="/css">CSS (4 posts)</a></li>
        <li><a href="/js">JavaScript (2 posts)</a></li>
      </ul>
    </section>

    <section>
      <h2>Recent Comments</h2>
      <p>Great read, thanks! - Chris Kim</p>
    </section>
  </aside>

  <!-- Page footer -->
  <footer>
    <p>© 2026 John Doe's Web Development Blog</p>
    <address>
      Contact: <a href="mailto:[email protected]">[email protected]</a>
    </address>
  </footer>

</body>
</html>

5. When Do We Use div and span?

Use <div> and <span> when no semantic tag can replace them.

<!-- Grouping for styling (no semantic role) -->
<div class="card-grid">
  <article>...</article>
  <article>...</article>
  <article>...</article>
</div>

<!-- Applying a style to part of a text -->
<p>Price: <span class="price">35,000 KRW</span> (VAT included)</p>

Summary

Tag Role Quantity Limit
<header> Page/section header Multiple allowed
<nav> Main navigation Multiple allowed
<main> Page main content One per page
<section> Group of related content Multiple allowed
<article> Independent content unit Multiple allowed
<aside> Supplementary related content Multiple allowed
<footer> Page/section footer Multiple allowed
<figure> Image/media plus caption group Multiple allowed
<figcaption> Description of a figure One per figure
<time> Date/time Multiple allowed
<address> Contact information Multiple allowed

Next Steps

  • See the Example file - a blog layout built with semantic tags
  • Check the Assignment - structuring a portfolio page semantically
  • HTML course complete! Next up, learn CSS and add beautiful styles!

Example files

Complete, runnable files used in this lesson. Copy them into your project and experiment.

blog.htmlHTML
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="description" content="A web development learning blog - a place to learn HTML, CSS, and JavaScript">
  <meta name="keywords" content="HTML, CSS, JavaScript, web development, lessons">
  <title>Coding School - Web Development Learning Blog</title>
</head>
<body>

  <!-- ============================== -->
  <!-- Page header                    -->
  <!-- ============================== -->
  <!-- header: The header area of a page or section. Contains the logo, site name, and navigation -->
  <header>
    <h1>Coding School</h1>
    <!-- h1: The top-level heading that represents the entire site -->
    <p>A learning blog for people just starting out in web development</p>

    <!-- nav: A collection of the site's main navigation links -->
    <nav>
      <!-- Building navigation as a ul/li list is the semantically correct approach -->
      <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/html">HTML</a></li>
        <li><a href="/css">CSS</a></li>
        <li><a href="/javascript">JavaScript</a></li>
        <li><a href="/projects">Projects</a></li>
        <li><a href="/about">About</a></li>
      </ul>
    </nav>
  </header>

  <!-- ============================== -->
  <!-- Page main content area         -->
  <!-- ============================== -->
  <!-- main: The core content area of the page. Use only one per page -->
  <main>

    <!-- ============================== -->
    <!-- Hero section (intro at the top)-->
    <!-- ============================== -->
    <!-- section: A division that groups related content. Including a heading is recommended -->
    <section>
      <h2>Take Your First Step into Web Development</h2>
      <p>
        Web development can feel intimidating, so learn it here in an easy and fun way.
        We guide you step by step, starting with HTML and moving on to CSS and JavaScript.
      </p>
      <p>
        The <strong>HTML Basics course</strong> is currently in progress.
        <a href="/html">Go to the lessons →</a>
      </p>
    </section>

    <hr>

    <!-- ============================== -->
    <!-- Latest posts section           -->
    <!-- ============================== -->
    <section>
      <h2>Latest Lesson Posts</h2>

      <!-- article: A content unit that is meaningful and complete on its own -->
      <!-- One blog post corresponds to one article -->
      <article>
        <!-- header inside an article: meta information such as this post's title, date, and author -->
        <header>
          <h3><a href="/html/semantic">What Is Semantic HTML?</a></h3>
          <!-- time: A semantic tag that represents a date/time -->
          <!-- datetime attribute: Specify the date in a machine-readable ISO 8601 format -->
          <p>
            Published: <time datetime="2026-05-10">May 10, 2026</time>
            | Author: John Doe
            | Category: HTML
          </p>
        </header>

        <!-- Summary of the post -->
        <p>
          Semantic HTML is a way of expressing a document's structure by putting meaning into the tag names themselves.
          Unlike a page built only from divs and spans,
          semantic tags let search engines and screen readers understand the document far better.
        </p>

        <!-- figure: A tag that meaningfully groups an image with its caption -->
        <figure>
          <img
            src="https://picsum.photos/seed/semantic/600/300"
            alt="Diagram showing the structure of semantic HTML"
            width="600"
          >
          <!-- figcaption: The descriptive text for a figure element -->
          <figcaption>Figure 1: The layout structure of a web page built with semantic tags</figcaption>
        </figure>

        <!-- footer inside an article: supplementary information such as tags and share buttons -->
        <footer>
          <p>Tags: <a href="/tags/html">HTML</a>, <a href="/tags/semantic">Semantic</a>, <a href="/tags/seo">SEO</a></p>
          <p><a href="/html/semantic">Read the full post →</a></p>
        </footer>
      </article>

      <hr>

      <!-- Second post -->
      <article>
        <header>
          <h3><a href="/html/form">The Complete Guide to HTML Forms</a></h3>
          <p>
            Published: <time datetime="2026-05-08">May 8, 2026</time>
            | Author: John Doe
            | Category: HTML
          </p>
        </header>

        <p>
          HTML forms are the core element for receiving data from users.
          Nearly every web service uses forms, from sign-ups and logins to search and surveys.
          In this post we cover everything in detail, from how to use each input type to fieldsets.
        </p>

        <figure>
          <img
            src="https://picsum.photos/seed/form/600/300"
            alt="A sign-up form screen showing various HTML input elements"
            width="600"
          >
          <figcaption>Figure 2: An example sign-up form using various input types</figcaption>
        </figure>

        <footer>
          <p>Tags: <a href="/tags/html">HTML</a>, <a href="/tags/form">Form</a>, <a href="/tags/input">input</a></p>
          <p><a href="/html/form">Read the full post →</a></p>
        </footer>
      </article>

      <hr>

      <!-- Third post -->
      <article>
        <header>
          <h3><a href="/html/table">Presenting Data with HTML Tables</a></h3>
          <p>
            Published: <time datetime="2026-05-05">May 5, 2026</time>
            | Author: Jamie Kim
            | Category: HTML
          </p>
        </header>

        <p>
          Tables are a powerful tool for organizing complex data into rows and columns.
          Using colspan and rowspan, you can create total rows or merged cells.
          Try representing all kinds of data as tables, such as timetables, budgets, and report cards.
        </p>

        <footer>
          <p>Tags: <a href="/tags/html">HTML</a>, <a href="/tags/table">Table</a></p>
          <p><a href="/html/table">Read the full post →</a></p>
        </footer>
      </article>

    </section>

    <hr>

    <!-- ============================== -->
    <!-- Lesson curriculum section      -->
    <!-- ============================== -->
    <section>
      <h2>HTML Lesson Curriculum</h2>
      <p>This is the HTML basics course, made up of 6 lessons in total.</p>

      <ol>
        <li>
          <!-- article: Each lesson in the curriculum can also be seen as an independent content unit -->
          <article>
            <h3>Lesson 01 - HTML Basics</h3>
            <p>You learn about DOCTYPE, the html/head/body structure, and basic tags.</p>
            <p>
              <time datetime="PT1H">Class time: 1 hour</time>
              | Difficulty: ⭐
            </p>
          </article>
        </li>
        <li>
          <article>
            <h3>Lesson 02 - Text Elements</h3>
            <p>You express text richly using strong, em, blockquote, code, and more.</p>
            <p>
              <time datetime="PT1H">Class time: 1 hour</time>
              | Difficulty: ⭐
            </p>
          </article>
        </li>
        <li>
          <article>
            <h3>Lesson 03 - Links and Images</h3>
            <p>You learn about hyperlinks, inserting images, and the concept of paths.</p>
            <p>
              <time datetime="PT1H30M">Class time: 1 hour 30 minutes</time>
              | Difficulty: ⭐⭐
            </p>
          </article>
        </li>
        <li>
          <article>
            <h3>Lesson 04 - Tables</h3>
            <p>You learn how to build tables and merge cells with colspan/rowspan.</p>
            <p>
              <time datetime="PT1H30M">Class time: 1 hour 30 minutes</time>
              | Difficulty: ⭐⭐
            </p>
          </article>
        </li>
        <li>
          <article>
            <h3>Lesson 05 - Forms</h3>
            <p>You build input forms using various input types and form elements.</p>
            <p>
              <time datetime="PT2H">Class time: 2 hours</time>
              | Difficulty: ⭐⭐⭐
            </p>
          </article>
        </li>
        <li>
          <article>
            <h3>Lesson 06 - Semantic HTML ← Current lesson</h3>
            <p>You write documents that are good for SEO and accessibility using meaningful tags.</p>
            <p>
              <time datetime="PT2H">Class time: 2 hours</time>
              | Difficulty: ⭐⭐⭐
            </p>
          </article>
        </li>
      </ol>
    </section>

  </main>

  <!-- ============================== -->
  <!-- Sidebar (supplementary content)-->
  <!-- ============================== -->
  <!-- aside: Supplementary information indirectly related to the main content -->
  <!-- Used for sidebars, advertisements, lists of related posts, and so on -->
  <aside>

    <!-- Author profile -->
    <section>
      <h2>About the Author</h2>
      <figure>
        <img
          src="https://picsum.photos/seed/profile/100/100"
          alt="Profile photo of the author, John Doe"
          width="100"
          height="100"
        >
        <figcaption>John Doe - Web Developer</figcaption>
      </figure>
      <p>
        I'm John Doe, and I create web development lessons.
        My goal is to teach HTML, CSS, and JavaScript in an easy way.
      </p>
      <!-- address: A semantic tag that represents contact details or author information -->
      <address>
        Email: <a href="mailto:[email protected]">[email protected]</a>
      </address>
    </section>

    <!-- Category list -->
    <section>
      <h2>Categories</h2>
      <nav>
        <!-- nav: Can also be used inside an aside for a group of navigation links -->
        <ul>
          <li><a href="/html">HTML (6 posts)</a></li>
          <li><a href="/css">CSS (0 posts - coming soon)</a></li>
          <li><a href="/javascript">JavaScript (0 posts - coming soon)</a></li>
        </ul>
      </nav>
    </section>

    <!-- Recent comments -->
    <section>
      <h2>Recent Comments</h2>
      <!-- A single comment can also be expressed as an article -->
      <article>
        <p>The lessons are explained so well! Thank you.</p>
        <footer>
          <p>
            — Chris Kim,
            <time datetime="2026-05-09">May 9, 2026</time>
          </p>
        </footer>
      </article>
      <article>
        <p>The examples were practical, so they helped a lot.</p>
        <footer>
          <p>
            — Emily Lee,
            <time datetime="2026-05-08">May 8, 2026</time>
          </p>
        </footer>
      </article>
    </section>

  </aside>

  <!-- ============================== -->
  <!-- Page footer                    -->
  <!-- ============================== -->
  <!-- footer: The footer of a page or section. Contains copyright, contact details, a sitemap, and so on -->
  <footer>

    <!-- Sitemap navigation -->
    <nav>
      <ul>
        <li><a href="/about">About the Blog</a></li>
        <li><a href="/terms">Terms of Service</a></li>
        <li><a href="/privacy">Privacy Policy</a></li>
        <li><a href="/sitemap">Sitemap</a></li>
        <li><a href="/rss">RSS Feed</a></li>
      </ul>
    </nav>

    <!-- Contact information -->
    <!-- address: Contact information for the author/owner of this page or document -->
    <address>
      Admin: John Doe |
      Email: <a href="mailto:[email protected]">[email protected]</a> |
      123 Teheran-ro, Gangnam-gu, Seoul
    </address>

    <!-- Copyright information -->
    <p>
      <small>
        © <time datetime="2026">2026</time> Coding School. All rights reserved.
        Posts on this blog are shared under the
        <a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener noreferrer">
          CC BY 4.0
        </a>
        license.
      </small>
    </p>

  </footer>

</body>
</html>

Assignment

Lesson 06 Assignment — Structuring a Portfolio Page Semantically

Assignment Goal

Without CSS, build the structure of your own portfolio page using only semantic HTML tags.
Do not use CSS. Focus solely on HTML structure and content.


Requirements Checklist

Page Structure (Required Semantic Tags)

  • <header> - Contains the site title and main navigation
  • <nav> - Links that move between sections on the page (using anchor links with #id)
  • <main> - The entire core portfolio content (only one per page)
  • <footer> - Contact details and copyright information

Section Structure Inside main

  • <section id="about"> - About me section
  • <section id="skills"> - Skills section
  • <section id="projects"> - Projects section (3 or more, each using <article>)
  • <section id="education"> - Education/experience section
  • <aside> - Supplementary information beside the portfolio (profile card, social links, etc.)

Using article (Projects Section)

  • Wrap each of 3 or more projects in its own <article>
  • Include a <header> inside each article (project name, project period)
  • Include a <footer> inside each article (technologies used, links)

Other Semantic Tags

  • Express dates with <time> tags (including the datetime attribute, at least 2 places)
  • Express project images with <figure> + <figcaption> (at least 2)
  • Express contact information with <address> tags
  • Write link lists inside <nav> using the <ul><li><a> structure

Accessibility

  • Write meaningful alt attributes for every <img>
  • Include links to the main pages inside <nav>

Content to Include on the Portfolio Page

1. header Area

  • Your name or nickname (h1)
  • A one-line introduction
  • Navigation to sections on the page (About, Skills, Projects, Education, Contact)

2. About Section

  • A self-introduction paragraph (2–3 sentences)
  • A photo or representative image (figure + figcaption)

3. Skills Section

  • A list of skills (organized with ul/li)
  • Technologies you know, such as HTML, CSS, JavaScript

4. Projects Section

3 or more projects, each article containing:

  • Project name (h3)
  • Project period (using time tags)
  • Project description (p)
  • Screenshot (figure + figcaption)
  • Technologies used and links (footer)

5. Education/Experience Section

  • School name, major, enrollment period (using time tags)
  • Awards or certifications (if any)

6. aside Area

  • A simple profile card
  • Social/GitHub links

7. footer Area

  • Email and contact details (address tag)
  • Copyright information (express the year with a time tag)

Hints

Hint 1: Building a table of contents with nav and anchor links
<header>
  <h1>John Doe Portfolio</h1>
  <nav>
    <ul>
      <li><a href="#about">About</a></li>
      <li><a href="#skills">Skills</a></li>
      <li><a href="#projects">Projects</a></li>
      <li><a href="#education">Education</a></li>
      <li><a href="#contact">Contact</a></li>
    </ul>
  </nav>
</header>

<main>
  <section id="about">...</section>
  <section id="skills">...</section>
  <section id="projects">...</section>
  <section id="education">...</section>
</main>
Hint 2: Expressing a project as an article
<section id="projects">
  <h2>Projects</h2>

  <article>
    <header>
      <h3>My First Web Page</h3>
      <p>
        Project period:
        <time datetime="2026-03">March 2026</time> ~
        <time datetime="2026-04">April 2026</time>
      </p>
    </header>

    <figure>
      <img src="https://picsum.photos/seed/project1/500/300" alt="Screenshot of the first project">
      <figcaption>Screenshot of my first personal introduction page</figcaption>
    </figure>

    <p>This is a personal introduction page I built while first learning HTML and CSS. I practiced basic structure and styling.</p>

    <footer>
      <p>Technologies used: HTML, CSS</p>
      <p>
        <a href="https://github.com" target="_blank" rel="noopener noreferrer">View on GitHub</a> |
        <a href="#" target="_blank" rel="noopener noreferrer">Live demo</a>
      </p>
    </footer>
  </article>

</section>
Hint 3: Building a profile card with aside
<aside>
  <section>
    <h2>Profile</h2>
    <figure>
      <img src="https://picsum.photos/seed/me/150/150" alt="Profile photo of John Doe" width="150">
      <figcaption>John Doe</figcaption>
    </figure>
    <p>A student developer studying web development</p>
    <address>
      <a href="mailto:[email protected]">[email protected]</a>
    </address>
  </section>

  <section>
    <h2>Social Links</h2>
    <nav>
      <ul>
        <li><a href="https://github.com" target="_blank" rel="noopener noreferrer">GitHub</a></li>
        <li><a href="https://linkedin.com" target="_blank" rel="noopener noreferrer">LinkedIn</a></li>
      </ul>
    </nav>
  </section>
</aside>
Hint 4: Using the time tag correctly
<!-- Year only -->
<time datetime="2026">2026</time>

<!-- Year and month -->
<time datetime="2026-03">March 2026</time>

<!-- Year, month, and day -->
<time datetime="2026-05-10">May 10, 2026</time>

<!-- Expressing a period -->
<p>Enrollment period: <time datetime="2022-03">March 2022</time> ~ <time datetime="2026-02">February 2026</time></p>

File Name

Save it as blog.html.


Grading Criteria

Item Points
Correct use of header, nav, main, footer 20 points
5 or more sections (including ids) 20 points
3 or more project articles (including header and footer) 20 points
time tags (datetime attribute, 2 or more places) 10 points
figure + figcaption (2 or more) 10 points
Use of address tag 5 points
Inclusion of an aside area 5 points
Substance and completeness of content 10 points
Total 100 points
Show the reference solution

Try the assignment yourself first — comparing your attempt with a working solution is where most of the learning happens.

blog.htmlHTML
<!DOCTYPE html>
<!-- HTML5 document declaration: must be placed on the first line -->
<html lang="en">
<!-- lang="en": declares that the entire document is written in English -->
<!-- Search engines, translators, and screen readers use this information -->

<head>
  <meta charset="UTF-8">
  <!-- UTF-8: an encoding that can represent every language in the world, including Korean -->

  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <!-- Responsive setting so the page fits the screen size on mobile devices -->

  <meta name="description" content="John Doe's web development portfolio - a collection of HTML, CSS, and JavaScript projects">
  <!-- description: the explanatory text shown below the title in search results (important for SEO) -->

  <meta name="keywords" content="portfolio, web development, HTML, CSS, JavaScript, John Doe">
  <!-- keywords: terms search engines reference to understand the page's topic -->

  <meta name="author" content="John Doe">
  <!-- author: information about the page's author -->

  <title>John Doe - Web Development Portfolio</title>
  <!-- title: the page title shown in the browser tab and search results (very important for SEO) -->
</head>

<body>

  <!-- ======================================= -->
  <!-- HEADER: the header area at the top      -->
  <!-- ======================================= -->
  <!-- header: the introductory area of the whole page or of a section -->
  <!-- Usually contains the site name, logo, and main navigation -->
  <header>

    <h1>John Doe</h1>
    <!-- h1: the most important heading on the page (one per page is recommended) -->
    <!-- In a portfolio, your own name becomes the main heading -->

    <p>An aspiring front-end developer studying web development</p>
    <!-- A one-line introduction -->

    <!-- nav: a semantic tag that wraps the site's main navigation link list -->
    <!-- Screen readers announce it as the "navigation area" -->
    <nav>
      <ul>
        <!-- ul: building navigation links as an unordered list is the semantically correct approach -->
        <li><a href="#about">About</a></li>
        <!-- href="#about": scrolls to the element with id="about" on this page -->
        <li><a href="#skills">Skills</a></li>
        <li><a href="#projects">Projects</a></li>
        <li><a href="#education">Education</a></li>
        <li><a href="#contact">Contact</a></li>
      </ul>
    </nav>

  </header>

  <!-- ======================================= -->
  <!-- MAIN: the page's core content area      -->
  <!-- ======================================= -->
  <!-- main: the tag that holds the page's main content -->
  <!-- It must be used only once in the entire page -->
  <!-- Repeating elements such as header, footer, nav, and aside go outside main -->
  <main>

    <!-- ======================================= -->
    <!-- SECTION 1: About                        -->
    <!-- ======================================= -->
    <!-- section: an independent division of the document. Used to group content by topic -->
    <!-- id="about": the destination of the nav's anchor link <a href="#about"> -->
    <section id="about">
      <h2>About</h2>
      <!-- h2: the topic heading of the section. Including a heading in a section is strongly recommended -->

      <!-- figure: a semantic tag that meaningfully groups an image with its caption -->
      <!-- Using figure instead of a plain img makes the image's role clearer -->
      <figure>
        <img
          src="https://picsum.photos/seed/portfolio-profile/200/200"
          alt="Profile photo of John Doe - smiling"
          width="200"
          height="200"
          <!-- alt: text read in place of the image when it cannot be seen (the heart of accessibility) -->
        >
        <!-- figcaption: the descriptive text for a figure. Holds the image's title or source -->
        <figcaption>Hello, I'm John Doe!</figcaption>
      </figure>

      <p>
        Hello! I'm John Doe, and I'm studying web development with a deep interest in it.
        I'm learning HTML first, then CSS and JavaScript in turn,
        and my dream is to one day build web services that genuinely help people.
      </p>
      <p>
        Right now I'm working hard on HTML, the foundation of the web.
        Building small things as I learn to code is so much fun.
        Going forward, I'll master CSS and JavaScript too and build more polished web pages!
      </p>

    </section>

    <hr>

    <!-- ======================================= -->
    <!-- SECTION 2: Skills                       -->
    <!-- ======================================= -->
    <section id="skills">
      <h2>Skills</h2>

      <!-- Expressing skills divided by category -->
      <section>
        <!-- sections can be nested inside a section for finer subdivision -->
        <h3>Currently Learning</h3>
        <ul>
          <li><strong>HTML5</strong> - document structure and semantic markup</li>
          <li><strong>CSS3</strong> - styling and layout (beginner level)</li>
        </ul>
      </section>

      <section>
        <h3>Planning to Learn</h3>
        <ul>
          <li>JavaScript - implementing dynamic features</li>
          <li>React - component-based UI</li>
          <li>Git/GitHub - version control and collaboration</li>
        </ul>
      </section>

      <section>
        <h3>Other Tools</h3>
        <ul>
          <li>VS Code - code editor</li>
          <li>Chrome DevTools - debugging tools</li>
          <li>Figma - design reference (beginner)</li>
        </ul>
      </section>

    </section>

    <hr>

    <!-- ======================================= -->
    <!-- SECTION 3: Projects                     -->
    <!-- ======================================= -->
    <section id="projects">
      <h2>Projects</h2>
      <p>These are the projects I built myself while learning HTML.</p>

      <!-- ============================== -->
      <!-- Project 1                      -->
      <!-- ============================== -->
      <!-- article: a content unit that is complete on its own -->
      <!-- Used for blog posts, news articles, product cards, project cards, and so on -->
      <article>
        <!-- header inside an article: the title and meta information of this content unit -->
        <header>
          <h3>Personal Introduction Web Page</h3>
          <p>
            <!-- time: a semantic tag that represents a date or time -->
            <!-- datetime attribute: an ISO format that machines (search engines, screen readers) can read -->
            <!-- The human-readable text can be written freely inside the tag -->
            Project period:
            <time datetime="2026-03">March 2026</time>
            ~
            <time datetime="2026-04">April 2026</time>
          </p>
        </header>

        <!-- figure: grouping a project screenshot with an image and caption -->
        <figure>
          <img
            src="https://picsum.photos/seed/project-intro/600/350"
            alt="Screenshot of the personal introduction web page - a screen with a name, introduction, and hobby list"
            width="600"
          >
          <!-- alt: text describing the image. For screenshots, describe what is on the screen -->
          <figcaption>Project 1: A personal introduction page built with HTML alone</figcaption>
        </figure>

        <p>
          This is the personal introduction page I built when I first learned HTML.
          I used the DOCTYPE declaration, the head and body structure, h1-h6, p, ul, and ol tags.
          It was practice in composing content with pure HTML, without CSS.
        </p>

        <!-- footer inside an article: closing information such as technologies used and links -->
        <footer>
          <p>Technologies used: HTML5</p>
          <p>
            <a href="https://github.com" target="_blank" rel="noopener noreferrer">
              View code on GitHub
            </a>
          </p>
        </footer>
      </article>

      <hr>

      <!-- ============================== -->
      <!-- Project 2                      -->
      <!-- ============================== -->
      <article>
        <header>
          <h3>Bookmark Link Collection Page</h3>
          <p>
            Project period:
            <time datetime="2026-04">April 2026</time>
            ~
            <time datetime="2026-04">April 2026</time>
          </p>
        </header>

        <figure>
          <img
            src="https://picsum.photos/seed/project-links/600/350"
            alt="Screenshot of the bookmark link collection page - links and images organized by category"
            width="600"
          >
          <figcaption>Project 2: A bookmark collection page using links and images</figcaption>
        </figure>

        <p>
          This is a link collection page built using the a tag, img tag, and figure/figcaption.
          I implemented external link security handling (rel="noopener noreferrer"), image links,
          and in-page navigation using anchor links.
        </p>

        <footer>
          <p>Technologies used: HTML5 (a, img, figure, figcaption)</p>
          <p>
            <a href="https://github.com" target="_blank" rel="noopener noreferrer">
              View code on GitHub
            </a>
            |
            <a href="#" target="_blank" rel="noopener noreferrer">
              View live demo
            </a>
          </p>
        </footer>
      </article>

      <hr>

      <!-- ============================== -->
      <!-- Project 3                      -->
      <!-- ============================== -->
      <article>
        <header>
          <h3>Weekly Class Timetable</h3>
          <p>
            Project period:
            <time datetime="2026-05">May 2026</time>
            ~
            <time datetime="2026-05">May 2026</time>
          </p>
        </header>

        <figure>
          <img
            src="https://picsum.photos/seed/project-table/600/350"
            alt="Screenshot of the weekly class timetable - an HTML table with lunch time merged using colspan"
            width="600"
          >
          <figcaption>Project 3: A weekly timetable using colspan and rowspan</figcaption>
        </figure>

        <p>
          This is a weekly class timetable built with HTML tables.
          I structured the table with thead, tbody, and tfoot,
          merged the lunch break horizontally using colspan,
          and practiced merging subjects vertically with rowspan.
        </p>

        <footer>
          <p>Technologies used: HTML5 (table, thead, tbody, tfoot, colspan, rowspan)</p>
          <p>
            <a href="https://github.com" target="_blank" rel="noopener noreferrer">
              View code on GitHub
            </a>
          </p>
        </footer>
      </article>

      <hr>

      <!-- ============================== -->
      <!-- Project 4                      -->
      <!-- ============================== -->
      <article>
        <header>
          <h3>Sign-Up &amp; Survey Form</h3>
          <p>
            Project period:
            <time datetime="2026-05">May 2026</time>
          </p>
        </header>

        <figure>
          <img
            src="https://picsum.photos/seed/project-form/600/350"
            alt="Screenshot of the sign-up form - a form built with various input types and fieldsets"
            width="600"
          >
          <figcaption>Project 4: A sign-up form using various input types</figcaption>
        </figure>

        <p>
          This is a sign-up form built using all kinds of input types, including
          text, email, password, number, date, radio, checkbox, file, and range.
          I grouped related input elements with fieldset and legend,
          and also applied validation attributes such as required and placeholder.
        </p>

        <footer>
          <p>Technologies used: HTML5 (form, input, select, textarea, fieldset, label)</p>
          <p>
            <a href="https://github.com" target="_blank" rel="noopener noreferrer">
              View code on GitHub
            </a>
            |
            <a href="#" target="_blank" rel="noopener noreferrer">
              View live demo
            </a>
          </p>
        </footer>
      </article>

    </section>

    <hr>

    <!-- ======================================= -->
    <!-- SECTION 4: Education                    -->
    <!-- ======================================= -->
    <section id="education">
      <h2>Education and Activities</h2>

      <!-- Education items can also be expressed as articles (independent content units) -->
      <article>
        <header>
          <h3>Hankuk University, Department of Computer Science</h3>
          <p>
            <!-- Expressing the enrollment period with time -->
            <time datetime="2022-03">March 2022</time>
            ~
            <time datetime="2026-02">February 2026</time>
            (Graduated)
          </p>
        </header>
        <ul>
          <li>Major GPA: 3.8 / 4.5</li>
          <li>Web development club activities (2022-2024)</li>
          <li>Undergraduate research assistant (2024)</li>
        </ul>
      </article>

      <!-- Certifications and awards -->
      <article>
        <h3>Certifications and Awards</h3>
        <ul>
          <li>
            Engineer Information Processing
            (obtained <time datetime="2025-11">November 2025</time>)
          </li>
          <li>
            Excellence Award, Campus Web Design Contest
            (<time datetime="2024-10">October 2024</time>)
          </li>
          <li>
            SQLD (SQL Developer)
            (obtained <time datetime="2025-06">June 2025</time>)
          </li>
        </ul>
      </article>

    </section>

  </main>

  <!-- ======================================= -->
  <!-- ASIDE: supplementary information (sidebar) -->
  <!-- ======================================= -->
  <!-- aside: supplementary information indirectly related to the main content -->
  <!-- Used for sidebars, author information, social links, advertisements, and so on -->
  <aside>

    <!-- Profile card -->
    <section>
      <h2>Quick Profile</h2>
      <figure>
        <img
          src="https://picsum.photos/seed/aside-profile/120/120"
          alt="Profile photo of John Doe"
          width="120"
          height="120"
        >
        <figcaption>John Doe</figcaption>
      </figure>
      <ul>
        <li>Location: Seoul</li>
        <li>Interests: front-end development</li>
        <li>Current status: preparing for a job</li>
      </ul>
    </section>

    <!-- Social/external links -->
    <section>
      <h2>Links</h2>
      <!-- nav: a navigation link list (can also be used inside an aside) -->
      <nav>
        <ul>
          <li>
            <a href="https://github.com" target="_blank" rel="noopener noreferrer">
              GitHub
            </a>
          </li>
          <li>
            <a href="https://www.linkedin.com" target="_blank" rel="noopener noreferrer">
              LinkedIn
            </a>
          </li>
          <li>
            <a href="https://velog.io" target="_blank" rel="noopener noreferrer">
              Tech Blog (Velog)
            </a>
          </li>
        </ul>
      </nav>
    </section>

    <!-- Current study status -->
    <section>
      <h2>Currently Studying</h2>
      <ol>
        <li>HTML5 semantic tags ← Here!</li>
        <li>CSS3 basics</li>
        <li>Introduction to JavaScript (upcoming)</li>
      </ol>
    </section>

  </aside>

  <!-- ======================================= -->
  <!-- FOOTER: page footer                     -->
  <!-- ======================================= -->
  <!-- footer: closing information for a page or section -->
  <!-- Includes copyright, contact details, sitemap links, and so on -->
  <footer>

    <!-- Additional navigation links -->
    <nav>
      <ul>
        <li><a href="#about">About</a></li>
        <li><a href="#projects">Projects</a></li>
        <li><a href="#contact">Contact</a></li>
      </ul>
    </nav>

    <!-- Contact section -->
    <section id="contact">
      <h2>Contact</h2>
      <!-- address: a semantic tag that holds contact information for the author/owner of this document or section -->
      <!-- Used for contact-related information such as phone numbers, emails, and addresses -->
      <address>
        Email:
        <a href="mailto:[email protected]">[email protected]</a>
        <br>
        Phone:
        <a href="tel:010-1234-5678">010-1234-5678</a>
        <br>
        Location: Gangnam-gu, Seoul
      </address>
    </section>

    <!-- Copyright information -->
    <p>
      <!-- small: used for supplementary small text such as copyright and disclaimers -->
      <small>
        © <time datetime="2026">2026</time> John Doe. All rights reserved.
        <!-- time: expresses a year together with a machine-readable datetime attribute -->
      </small>
    </p>

  </footer>

</body>
</html>

Learn this lesson with a mentor

Work through the Build Your Homepage series on your own, or join a guided cohort at our Pitampura campus and online.

Call NowEnroll Now