تگهای معنایی HTML
بهنام نوبخت · ۱۴۰۵/۶/۲۸
وقتی یک صفحه وب را با HTML میسازیم، فقط مهم نیست که محتوا در صفحه نمایش داده شود؛ بلکه باید ساختار صفحه نیز برای مرورگر، موتورهای جستجو، ابزارهای کمکی و حتی خود برنامهنویس قابل درک باشد. تصور کنید یک صفحه شامل منوی سایت، محتوای اصلی، چند بخش مختلف، مقالات، نوار کناری و قسمت پایانی سایت باشد. اگر همه این قسمتها را فقط با تگهای عمومی مانند <div> ایجاد کنیم، مرورگر میتواند صفحه را نمایش دهد، اما از روی کد بهسادگی نمیتوان فهمید هر قسمت چه نقشی دارد. HTML معنایی یا Semantic HTML برای حل همین مسئله به وجود آمده است. در این مقاله یاد میگیریم چگونه با استفاده از تگهای معنایی، ساختار صفحات وب را واضحتر، استانداردتر و قابل فهمتر ایجاد کنیم.
Semantic HTML چیست؟
کلمه Semantic به معنی «معنادار» است.
در Semantic HTML، به جای اینکه برای تمام قسمتهای صفحه فقط از عناصر عمومی استفاده کنیم، از تگهایی استفاده میکنیم که نقش و مفهوم آن بخش را مشخص میکنند.
برای مثال، فرض کنید یک منوی اصلی داریم.
میتوانیم آن را با:
<div>
...
</div>ایجاد کنیم.
اما HTML یک عنصر مخصوص برای منوی پیمایش دارد:
<nav>
...
</nav>وقتی برنامهنویس دیگری کد را میبیند، با دیدن <nav> بلافاصله متوجه میشود این قسمت مربوط به Navigation یا پیمایش سایت است.
چرا Semantic HTML مهم است؟
استفاده از تگهای معنایی چند مزیت مهم دارد.
۱. خوانایی بهتر کد
وقتی کد را چند هفته یا چند ماه بعد باز میکنید، ساختار آن راحتتر قابل درک است.
مثلاً:
<header>
...
</header>
<nav>
...
</nav>
<main>
...
</main>
<footer>
...
</footer>خیلی واضحتر از ساختاری است که تمام بخشها با <div> ساخته شده باشند.
۲. ساختار بهتر صفحه
تگهای معنایی کمک میکنند بخشهای مختلف صفحه نقش مشخصی داشته باشند.
مثلاً:
Header
↓
Navigation
↓
Main Content
↓
Footer۳. دسترسیپذیری بهتر
ابزارهایی مانند Screen Reader میتوانند از ساختار معنایی صفحه برای درک بهتر محتوای آن استفاده کنند.
این موضوع برای کاربرانی که از فناوریهای کمکی استفاده میکنند اهمیت زیادی دارد.
۴. کمک به موتورهای جستجو
تگهای معنایی میتوانند به موتورهای جستجو کمک کنند تا ساختار و نقش قسمتهای مختلف صفحه را بهتر درک کنند.
البته استفاده از Semantic HTML به تنهایی باعث رتبه بهتر سایت نمیشود، اما ساختار HTML مناسب یکی از بخشهای مهم یک صفحه استاندارد است.
<header>
تگ <header> برای مشخص کردن قسمت ابتدایی یا معرفی یک صفحه یا یک بخش استفاده میشود.
مثلاً:
<header>
<h1>بنو سرویس</h1>
</header>Header میتواند شامل مواردی مانند:
لوگو
عنوان سایت
معرفی
منوی اصلی
لینکهای مهم
باشد.
آیا <header> فقط برای ابتدای کل صفحه است؟
خیر.
یکی از نکات مهم این است که <header> میتواند برای یک بخش یا مقاله نیز استفاده شود.
مثلاً:
<article>
<header>
<h2>آموزش HTML</h2>
<p>نویسنده: علی</p>
</header>
<p>
در این مقاله با HTML آشنا میشویم.
</p>
</article>در اینجا <header> مربوط به همان <article> است.
<nav>
تگ <nav> برای بخشهایی استفاده میشود که شامل لینکهای اصلی برای پیمایش سایت هستند.
مثلاً:
<nav>
<a href="index.html">خانه</a>
<a href="services.html">خدمات</a>
<a href="about.html">درباره ما</a>
<a href="contact.html">تماس با ما</a>
</nav>استفاده از <nav> به جای یک <div> ساده، معنای این بخش را مشخص میکند.
آیا هر مجموعه لینک باید داخل <nav> باشد؟
خیر.
هر مجموعهای از لینکها الزاماً Navigation اصلی سایت نیست.
برای مثال، لینکهای داخل یک مقاله ممکن است فقط بخشی از محتوای مقاله باشند.
<nav> بیشتر برای بخشهای مهم و اصلی پیمایش سایت استفاده میشود.
<main>
تگ <main> محتوای اصلی صفحه را مشخص میکند.
مثلاً:
<main>
<h1>آموزش طراحی وب</h1>
<p>
در این صفحه با طراحی وب آشنا میشویم.
</p>
</main>در یک صفحه معمولاً یک بخش اصلی <main> داریم.
محتوایی که مستقیماً به موضوع اصلی صفحه مربوط است، معمولاً داخل <main> قرار میگیرد.
<section>
تگ <section> برای مشخص کردن یک بخش مستقل و مرتبط از محتوا استفاده میشود.
مثلاً در یک صفحه معرفی خدمات:
<section>
<h2>خدمات ما</h2>
<p>
ما خدمات مختلف طراحی وب ارائه میدهیم.
</p>
</section>میتوانیم چند Section در یک صفحه داشته باشیم:
<main>
<section>
<h2>درباره ما</h2>
<p>...</p>
</section>
<section>
<h2>خدمات</h2>
<p>...</p>
</section>
<section>
<h2>تماس با ما</h2>
<p>...</p>
</section>
</main><section> چه زمانی مناسب است؟
به صورت ساده، وقتی بخشی از محتوا یک موضوع مشخص دارد و میتوان برای آن یک عنوان در نظر گرفت، <section> میتواند انتخاب مناسبی باشد.
مثلاً:
<section>
<h2>ویژگیهای محصول</h2>
<ul>
<li>سرعت بالا</li>
<li>امنیت مناسب</li>
<li>رابط کاربری ساده</li>
</ul>
</section>
<article>
تگ <article> برای محتوایی استفاده میشود که بتواند به عنوان یک واحد مستقل در نظر گرفته شود.
مثلاً:
یک مقاله
یک پست وبلاگ
یک خبر
یک مطلب آموزشی
یک محصول
یک پست مستقل
مثلاً:
<article>
<h2>HTML چیست؟</h2>
<p>
HTML زبان نشانهگذاری صفحات وب است.
</p>
</article>مثال استفاده از چند Article
فرض کنید یک صفحه وبلاگ داریم:
<main>
<h1>آخرین مقالات</h1>
<article>
<h2>HTML چیست؟</h2>
<p>آشنایی با HTML...</p>
</article>
<article>
<h2>CSS چیست؟</h2>
<p>آشنایی با CSS...</p>
</article>
<article>
<h2>JavaScript چیست؟</h2>
<p>آشنایی با JavaScript...</p>
</article>
</main>هر Article یک محتوای مستقل است.
تفاوت <section> و <article>
این دو تگ گاهی با هم اشتباه گرفته میشوند.
به صورت ساده:
<section>
یک بخش مرتبط از یک صفحه یا محتوا است.
<article>
محتوایی است که میتواند به عنوان یک واحد مستقل در نظر گرفته شود.
مثلاً:
صفحه وبلاگ
│
├── Section: مقالات جدید
│ ├── Article: مقاله اول
│ ├── Article: مقاله دوم
│ └── Article: مقاله سوم
│
└── Section: مقالات محبوب
├── Article: مقاله چهارم
└── Article: مقاله پنجم<aside>
تگ <aside> برای محتوایی استفاده میشود که در کنار محتوای اصلی قرار دارد و ارتباط جانبی با آن دارد.
مثلاً:
مطالب مرتبط
لینکهای پیشنهادی
تبلیغات
نوار کناری
اطلاعات تکمیلی
مثال:
<aside>
<h2>مطالب مرتبط</h2>
<ul>
<li><a href="#">HTML چیست؟</a></li>
<li><a href="#">CSS چیست؟</a></li>
<li><a href="#">JavaScript چیست؟</a></li>
</ul>
</aside><footer>
تگ <footer> برای قسمت پایانی یک صفحه یا یک بخش استفاده میشود.
مثلاً Footer سایت میتواند شامل:
اطلاعات تماس
لینکهای مهم
کپیرایت
لینک شبکههای اجتماعی
اطلاعات شرکت
باشد.
مثال:
<footer>
<p>
تمامی حقوق محفوظ است.
</p>
</footer>مانند <header>، <footer> نیز میتواند برای یک بخش خاص استفاده شود.
مثلاً:
<article>
<h2>عنوان مقاله</h2>
<p>
محتوای مقاله...
</p>
<footer>
نویسنده: علی
</footer>
</article>در اینجا Footer مربوط به Article است، نه کل سایت.
<div> چیست؟
حالا که با تگهای معنایی آشنا شدیم، باید درباره <div> نیز صحبت کنیم.
<div> یک عنصر عمومی برای گروهبندی عناصر است.
مثلاً:
<div>
<h2>عنوان</h2>
<p>توضیحات</p>
</div>خود <div> معنای خاصی درباره محتوای داخلش ارائه نمیدهد.
آیا <div> بد است؟
خیر.
<div> کاملاً مفید و پرکاربرد است.
مشکل زمانی ایجاد میشود که برای هر قسمت صفحه، بدون توجه به معنای آن، فقط از <div> استفاده کنیم.
مثلاً:
<div>
<div>
<h1>سایت من</h1>
</div>
<div>
<a href="#">خانه</a>
<a href="#">خدمات</a>
</div>
<div>
<p>محتوای اصلی</p>
</div>
<div>
<p>تمامی حقوق محفوظ است.</p>
</div>
</div>این کد ممکن است کار کند، اما ساختار معنایی مشخصی ندارد.
میتوانیم آن را بهتر کنیم:
<header>
<h1>سایت من</h1>
</header>
<nav>
<a href="#">خانه</a>
<a href="#">خدمات</a>
</nav>
<main>
<p>محتوای اصلی</p>
</main>
<footer>
<p>تمامی حقوق محفوظ است.</p>
</footer>حالا نقش هر قسمت کاملاً مشخص است.
<div> چه زمانی استفاده میشود؟
اگر عنصر معنایی مناسبی برای یک بخش وجود نداشته باشد، <div> همچنان انتخاب خوبی است.
مثلاً:
<div class="product-card">
<h2>محصول</h2>
<p>توضیحات محصول</p>
</div>در اینجا ممکن است <div> برای گروهبندی عناصر کارت کاملاً مناسب باشد.
بنابراین هدف Semantic HTML این نیست که:
«دیگر هیچوقت از div استفاده نکنیم.»
هدف این است که:
«هرجا یک عنصر معنایی مناسب وجود دارد، از آن استفاده کنیم.»
یک ساختار استاندارد برای صفحه
حالا میتوانیم یک صفحه ساده و معنایی ایجاد کنیم:
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<title>سایت آموزشی</title>
</head>
<body>
<header>
<h1>سایت آموزشی</h1>
</header>
<nav>
<a href="#">خانه</a>
<a href="#">دورهها</a>
<a href="#">مقالات</a>
<a href="#">تماس با ما</a>
</nav>
<main>
<section>
<h2>دورههای آموزشی</h2>
<article>
<h3>دوره HTML</h3>
<p>
آموزش HTML از پایه.
</p>
</article>
<article>
<h3>دوره CSS</h3>
<p>
آموزش CSS از پایه.
</p>
</article>
</section>
<aside>
<h2>مطالب مرتبط</h2>
<ul>
<li><a href="#">مقدمهای بر طراحی وب</a></li>
<li><a href="#">HTML چیست؟</a></li>
</ul>
</aside>
</main>
<footer>
<p>
تمامی حقوق محفوظ است.
</p>
</footer>
</body>
</html>
این ساختار نسبت به استفاده از تعداد زیادی <div>، مفهوم واضحتری دارد.
یک نکته مهم درباره ترتیب تگها
Semantic HTML به این معنی نیست که همیشه باید تگها را دقیقاً به یک ترتیب ثابت بنویسیم.
ساختار صفحه به نوع سایت بستگی دارد.
مثلاً ممکن است:
<header>
...
</header>
<main>
...
</main>
<footer>
...
</footer>داشته باشیم.
یا داخل main چند section و article قرار دهیم.
مهم این است که هر عنصر متناسب با نقش واقعی خودش استفاده شود.
آیا ظاهر تگهای معنایی متفاوت است؟
بعضی از تگهای معنایی ممکن است در مرورگر ظاهر پیشفرض متفاوتی داشته باشند، اما نباید انتخاب تگ را فقط بر اساس ظاهر آن انجام دهیم.
مثلاً:
<section>
...
</section>نباید صرفاً به این دلیل استفاده شود که میخواهیم یک فاصله یا ظاهر خاص ایجاد کنیم.
HTML برای مشخص کردن ساختار و معنا است.
در ادامه دوره، CSS را یاد میگیریم و ظاهر عناصر را با CSS کنترل خواهیم کرد.
Semantic HTML و Headingها
استفاده صحیح از Headingها همچنان مهم است.
مثلاً:
<main>
<h1>آموزش طراحی وب</h1>
<section>
<h2>آموزش HTML</h2>
<article>
<h3>ساختار HTML</h3>
</article>
</section>
</main>در اینجا ساختار محتوا نیز قابل فهم است:
h1
└── h2
└── h3
البته ساختار Headingها باید بر اساس سلسلهمراتب واقعی محتوا باشد، نه صرفاً اندازه ظاهری متن.
یک مثال از صفحه فروشگاه
فرض کنید یک فروشگاه اینترنتی داریم.
میتوانیم ساختار را اینگونه طراحی کنیم:
<header>
<h1>فروشگاه من</h1>
</header>
<nav>
<a href="#">خانه</a>
<a href="#">محصولات</a>
<a href="#">درباره ما</a>
</nav>
<main>
<section>
<h2>محصولات جدید</h2>
<article>
<h3>لپتاپ</h3>
<p>توضیحات محصول</p>
</article>
<article>
<h3>موبایل</h3>
<p>توضیحات محصول</p>
</article>
</section>
<aside>
<h2>دستهبندیها</h2>
<ul>
<li>لپتاپ</li>
<li>موبایل</li>
<li>لوازم جانبی</li>
</ul>
</aside>
</main>
<footer>
<p>تمامی حقوق محفوظ است.</p>
</footer>
این ساختار بهوضوح نقش قسمتهای مختلف سایت را مشخص میکند.
مهمترین تگهای Semantic HTML
در این مرحله مهمترین تگها را به خاطر بسپارید:
تگ | کاربرد |
|---|---|
| بخش معرفی یا ابتدایی |
| بخش پیمایش و لینکهای اصلی |
| محتوای اصلی صفحه |
| یک بخش مرتبط از محتوا |
| محتوای مستقل |
| محتوای جانبی |
| بخش پایانی |
| گروهبندی عمومی بدون معنای خاص |
تمرین عملی
تمرین ۱ — ساختار صفحه
یک صفحه HTML ایجاد کنید که شامل این بخشها باشد:
Header
Navigation
Main
Footerداخل Header یک عنوان قرار دهید.
داخل Navigation حداقل چهار لینک قرار دهید.
داخل Main یک پاراگراف قرار دهید.
داخل Footer نیز یک متن قرار دهید.
تمرین ۲ — استفاده از Section
داخل <main> سه بخش ایجاد کنید:
معرفی
خدمات
تماس با ما
برای هر بخش از <section> استفاده کنید و یک Heading مناسب قرار دهید.
تمرین ۳ — استفاده از Article
یک صفحه وبلاگ بسازید که داخل آن سه مقاله قرار داشته باشد.
ساختار کلی:
<main>
<h1>مقالات</h1>
<article>
...
</article>
<article>
...
</article>
<article>
...
</article>
</main>برای هر Article یک عنوان و یک پاراگراف قرار دهید.
تمرین ۴ — Aside
در کنار محتوای اصلی یک <aside> ایجاد کنید.
داخل آن:
مطالب مرتبط
دستهبندیها
لینکهای مهم
قرار دهید.
چالش مقاله
یک صفحه کامل برای سایت آموزشی ایجاد کنید.
ساختار صفحه باید تقریباً به این شکل باشد:
Header
│
├── عنوان سایت
│
Navigation
│
├── خانه
├── دورهها
├── مقالات
└── تماس با ما
│
Main
│
├── Section
│ ├── معرفی دوره
│ └── توضیحات
│
├── Section
│ ├── Article
│ ├── Article
│ └── Article
│
└── Aside
└── مطالب مرتبط
│
Footer
سعی کنید برای هر بخش از مناسبترین عنصر معنایی استفاده کنید.
در این تمرین از CSS استفاده نکنید.
هدف فعلاً فقط ایجاد ساختار صحیح HTML است.
اشتباهات رایج
۱. استفاده از <div> برای همه چیز
استفاده از <div> همیشه اشتباه نیست، اما اگر عنصر معنایی مناسبی وجود دارد، بهتر است از آن استفاده کنیم.
۲. استفاده از <section> فقط برای ایجاد فاصله
section برای ایجاد فاصله یا ظاهر خاص نیست.
برای طراحی ظاهری و فاصلهها از CSS استفاده خواهیم کرد.
۳. استفاده از <article> برای هر بخش کوچک
هر بخشی از صفحه الزاماً Article نیست.
Article باید بتواند به عنوان یک محتوای مستقل معنا داشته باشد.
۴. قرار دادن تمام لینکها داخل <nav>
هر لینک یا مجموعه لینک کوچکی Navigation اصلی محسوب نمیشود.
nav را برای بخشهای مهم پیمایش استفاده کنید.
۵. انتخاب تگ بر اساس ظاهر
نباید مثلاً از <h2> فقط به این دلیل استفاده کنیم که مرورگر آن را بزرگ نمایش میدهد.
ساختار HTML باید بر اساس معنا و نقش محتوا باشد.
نکات مهم این مقاله
در این مقاله یاد گرفتیم:
Semantic HTML یعنی استفاده از عناصر HTML بر اساس معنای آنها.
تگهای معنایی باعث خوانایی بهتر ساختار صفحه میشوند.
Semantic HTML به دسترسیپذیری بهتر کمک میکند.
میتواند به درک بهتر ساختار محتوا توسط موتورهای جستجو کمک کند.
<header>برای بخش معرفی یا ابتدایی استفاده میشود.<nav>برای بخشهای مهم پیمایش است.<main>محتوای اصلی صفحه را مشخص میکند.<section>یک بخش مرتبط از محتوا را مشخص میکند.<article>برای محتوای مستقل استفاده میشود.<aside>برای محتوای جانبی کاربرد دارد.<footer>بخش پایانی صفحه یا یک بخش را مشخص میکند.<div>همچنان کاربرد زیادی دارد و برای گروهبندی عمومی مناسب است.نباید تگها را فقط بر اساس ظاهرشان انتخاب کنیم.
ساختار Headingها باید با ساختار محتوای صفحه هماهنگ باشد.
جمعبندی
تا اینجا یاد گرفتیم که HTML فقط برای نمایش متن، تصویر، لینک و فرم نیست؛ بلکه وظیفه مهم دیگری نیز دارد و آن مشخص کردن ساختار و معنای محتوا است. با استفاده از تگهایی مانند <header>، <nav>، <main>، <section>، <article>، <aside> و <footer> میتوانیم صفحات وب را به شکلی بسازیم که ساختار آنها برای برنامهنویس، مرورگر، موتورهای جستجو و فناوریهای کمکی قابل درکتر باشد. همچنین یاد گرفتیم که <div> همچنان یک عنصر کاربردی است و زمانی که عنصر معنایی مناسبی نداریم، میتوانیم از آن برای گروهبندی عناصر استفاده کنیم.
با پایان این مقاله، بخش اصلی مباحث پایه HTML تقریباً کامل شده است. در مقاله بعدی تمام چیزهایی را که تاکنون یاد گرفتهایم کنار هم قرار میدهیم و درباره ساختار استاندارد یک صفحه HTML صحبت میکنیم؛ یعنی از DOCTYPE و <html> گرفته تا <head>، <body>، متادیتا و ساختار صحیح یک فایل HTML.
در مقاله بعدی یک صفحه HTML را از ابتدا تا انتها بررسی میکنیم و دقیقاً مشخص میکنیم هر قسمت چه وظیفهای دارد و یک فایل HTML استاندارد و اصولی چگونه باید ساخته شود.
نظرات
هنوز نظری ثبت نشده است.