๐ 1๏ธโฃ ์น ์ ๊ทผ์ฑ (Web Accessibility) ์ฌํ ํ์ฅ
๐ข 1-1. ์น ์ ๊ทผ์ฑ ๊ฐ๋
+ ์ค๋ฌด ํ์
๐๏ธ ์ ์ |
๋ชจ๋ ์ฌ์ฉ์(์ฅ์ ํฌํจ)์๊ฒ ๋๋ฑํ ์น ์ฌ์ฉ ๊ฒฝํ ์ ๊ณต |
๐ข ๋น์ |
์น์ฌ์ดํธ = ๊ณต๊ณต๋์๊ด ๐ โ ํ ์ฒด์ด ๊ฒฝ์ฌ๋ก, ์ ์, ์๋ดํ |
๐ ์ค๋ฌด ์ค์์ฑ |
์ฅ์ ์ธ์ฐจ๋ณ๊ธ์ง๋ฒ, WCAG 2.1 ์ค์ ํ์ (๊ณต๊ณต๊ธฐ๊ด, ๋๊ธฐ์
์๋ฌด) |
๐ SEO ์ํฅ |
์๋งจํฑ ๊ตฌ์กฐ โ ๊ฒ์ ์์ง ์ธ์ & ์คํฌ๋ฆฐ๋ฆฌ๋ ์ ๊ทผ โ |
๐ ๏ธ 1-2. ์ ๊ทผ์ฑ ํ์ HTML ์์ ์ฌํ
์์ |
์ญํ |
์ค๋ฌด ์์ |
๋น์ ๐ |
<label> |
ํผ ์์์ ์ฐ๊ด ์ค๋ช
์ ๊ณต |
<label for="email">๐ง Email</label><input id="email"> |
์๋ด ํ์งํ |
alt |
์ด๋ฏธ์ง ๋์ฒด ํ
์คํธ |
<img src="logo.png" alt="ํ์ฌ ๋ก๊ณ "> |
์ ์ ์ค๋ช
|
<fieldset> + <legend> |
ํผ ๊ทธ๋ฃนํ ๋ฐ ์ค๋ช
|
<fieldset><legend>ํ์์ ๋ณด</legend>...</fieldset> |
ํผ ๊ทธ๋ฃน ๋ฌถ๊ธฐ |
<button> |
๋ฒํผ์ ํ
์คํธ or aria-label ํ์ |
<button aria-label="๋ซ๊ธฐ">โ</button> |
์ค๋ช
์๋ ๋ฒํผ X |
tabindex |
ํค๋ณด๋ ํฌ์ปค์ค ์์ ์ ์ด |
<a href="#" tabindex="0">๋งํฌ</a> |
ํค๋ณด๋ ๋ด๋น |
โ
์ฌํ ํผ ์์ + ์ฃผ์
<form>
<!-- ๐ง Email ์
๋ ฅ + label ์ฐ๊ฒฐ -->
<label for="email">๐ง Email</label>
<input type="email" id="email" required>
<!-- ๐ Password ์
๋ ฅ -->
<label for="password">๐ Password</label>
<input type="password" id="password" required>
<!-- ๐
๋ ์ง ์ ํ + ๊ทธ๋ฃนํ -->
<fieldset>
<legend>๐
์์ฝ ์ ๋ณด</legend>
<label for="date">๋ ์ง</label>
<input type="date" id="date">
</fieldset>
<!-- ๋ฒํผ์ ๋ฐ๋์ ํ
์คํธ or aria-label -->
<button type="submit">์ ์ถ</button>
</form>
๐ฏ 1-3. ARIA ์์ฑ ์ฌํ ์ ๋ฆฌ
์์ฑ |
์ญํ |
์์ |
์ค๋ฌด ํ ๐ |
aria-label |
์คํฌ๋ฆฐ๋ฆฌ๋์ฉ ํ
์คํธ |
<button aria-label="๋ซ๊ธฐ">โ</button> |
ํ
์คํธ ์๋ ๋ฒํผ ํ์ |
aria-hidden |
์ฅ์ ์์ ์จ๊น |
<i aria-hidden="true">โญ</i> |
์คํฌ๋ฆฐ๋ฆฌ๋ ํผ๋ ๋ฐฉ์ง |
aria-live |
์ค์๊ฐ ์๋ฆผ |
<div aria-live="polite">์ ๋ฉ์์ง!</div> |
์ฑํ
, ์๋ฆผ ์์ญ |
role |
์ญํ ๋ช
์ |
<div role="dialog">๋ชจ๋ฌ์ฐฝ</div> |
๋นํ์ค ํ๊ทธ์ ์๋ฏธ ๋ถ์ฌ |
aria-expanded |
์ด๋ฆผ/๋ซํ ์ํ |
<button aria-expanded="false">๋ฉ๋ด</button> |
๋๋กญ๋ค์ด, ์์ฝ๋์ธ |
๐ 1-4. ์ค์ ๋ด๋น๊ฒ์ด์
์์ (์ ๊ทผ์ฑ 100์ )
<nav aria-label="์ฃผ ๋ด๋น๊ฒ์ด์
">
<ul>
<li><a href="/home">๐ <span>ํ</span></a></li>
<li><a href="/about">โน๏ธ <span>์๊ฐ</span></a></li>
<li><a href="/contact">๐ <span>์ฐ๋ฝ์ฒ</span></a></li>
</ul>
</nav>
โ
ํฌ์ธํธ:
- aria-label๋ก ๋ด๋น๊ฒ์ด์
๋ช
ํํ
- ์์ด์ฝ๋ง ์์ผ๋ฉด ์คํฌ๋ฆฐ๋ฆฌ๋ ๋ชป ์ฝ์ โ ๋ฐ๋์
<span>
ํ
์คํธ ๋ณํ
๐ง 1-5. WCAG ํต์ฌ ์์น + ์ฌํ
์์น |
์ค๋ช
|
๋น์ ๐ |
Perceivable (์ง๊ฐ ๊ฐ๋ฅ) |
๋ชจ๋ ์ ๋ณด๋ ํ
์คํธ/๋์ฒด์๋จ ์ ๊ณต |
์ ์, ์๋ง |
Operable (์กฐ์ ๊ฐ๋ฅ) |
ํค๋ณด๋, ์์ฑ, ํฐ์น ์
๋ ฅ ๋ชจ๋ ์ง์ |
์๋ฆฌ๋ฒ ์ดํฐ ๋ฒํผ |
Understandable (์ดํด ๊ฐ๋ฅ) |
์ผ๊ด๋ UI, ๋ช
ํํ ๋ค๋น |
๋์๊ด ์๋ด ํ์ง |
Robust (๊ฒฌ๊ณ ์ฑ) |
๋ค์ํ ๊ธฐ๊ธฐ, ๋ณด์กฐ๊ธฐ์ ์์๋ ํธํ |
๋ค๊ตญ์ ATM |
๐ 2๏ธโฃ SEO ์ฌํ ํ์ฅ
๐ 2-1. SEO ๊ธฐ๋ณธ + ์ค๋ฌด ์ค์์ฑ
์ ์ |
๊ฒ์ ์์ง ๊ฒฐ๊ณผ ์์ ๋
ธ์ถ ์ํ ์ต์ ํ |
๐ข ๋น์ |
์น์ฌ์ดํธ = ๊ฐ๊ฒ ๐ช โ SEO = ๊ฐํ + ์ง๋ ๋ฑ๋ก + ์ ๋จ์ง |
์ค๋ฌด |
๊ฒ์ ์ ์
= ๋งค์ถ, ๋ฐฉ๋ฌธ์ ์ ์ง์ ์ํฅ |
๐๏ธ 2-2. SEO ํ์ ์์
์์ |
์ญํ |
์์ |
<title> |
ํ์ด์ง ์ ๋ชฉ |
<title>๐ฅ UX ๋์์ด๋ ํฌํธํด๋ฆฌ์ค</title> |
<meta description> |
๊ฒ์๊ฒฐ๊ณผ ์ค๋ช
|
<meta name="description" content="UX ์ ๋ฌธ๊ฐ ํ๋ก์ ํธ"> |
์๋งจํฑ ๊ตฌ์กฐ |
<header> , <main> , <article> ๋ช
ํํ๊ฒ |
ย |
๋ช
ํํ ๋งํฌ |
<a href="/portfolio">ํฌํธํด๋ฆฌ์ค ๋ณด๊ธฐ</a> |
ย |
ํค์๋ ์ต์ ํ |
์์ฐ์ค๋ฝ๊ฒ ํต์ฌ ํค์๋ ๋ฐฐ์น |
ย |
๐ 2-3. Open Graph + Canonical + Sitemap
<!-- SNS ๊ณต์ ์ต์ ํ -->
<meta property="og:title" content="๐ฅ UX ํฌํธํด๋ฆฌ์ค">
<meta property="og:description" content="UI/UX ์ ๋ฌธ๊ฐ์ ํ๋ก์ ํธ">
<meta property="og:image" content="thumbnail.jpg">
<meta property="og:url" content="https://myportfolio.com/">
<!-- ์ค๋ณต ๋ฐฉ์ง -->
<link rel="canonical" href="https://myportfolio.com/">
โ
robots.txt + sitemap.xml โ ๊ฒ์๋ด ์ต์ ๊ด๋ฆฌ
๐ 2-4. ์ต์ SEO ํธ๋ ๋ ์ฌํ
๊ธฐ์ |
์ค๋ช
|
์ค๋ฌด ํ ๐ |
Core Web Vitals |
UX ์ฑ๋ฅ ์งํ (LCP, FID, CLS) |
๊ตฌ๊ธ ์์ ์ํฅ |
Mobile-First Indexing |
๋ชจ๋ฐ์ผ ๊ธฐ์ค ํฌ๋กค๋ง |
๋ฐ์ํ ํ์ |
Schema.org (๊ตฌ์กฐํ ๋ฐ์ดํฐ) |
๋ณ์ , ๋ฆฌ๋ทฐ ํ์ ๊ฐ๋ฅ |
SEO CTRโ |
HTTPS |
๋ณด์ ์ฐ๊ฒฐ |
์์ ๊ฐ์ฐ์ |
๐๏ธ 3๏ธโฃ ์น ํ์ด์ง ์ต์ ํ ์ฌํ
๐ฆ 3-1. ์ด๋ฏธ์ง ์ต์ ํ
๊ธฐ๋ฒ |
์ค๋ช
|
์์ |
WebP/AVIF ์ฌ์ฉ |
๊ณ ์์ถ ํฌ๋งท |
<img src="img.webp" loading="lazy"> |
Responsive Image |
๋ค์ํ ํด์๋ ๋์ |
<img srcset="small.jpg 400w, large.jpg 800w"> |
Lazy Loading |
์คํฌ๋กค์ ๋ก๋ฉ |
<img loading="lazy"> |
๐ถ 3-2. ๋คํธ์ํฌ ์ต์ ํ
๊ธฐ๋ฒ |
์ค๋ช
|
CSS/JS Minify |
๊ณต๋ฐฑ ์ ๊ฑฐ |
Gzip/Brotli |
์๋ฒ ์์ถ |
CDN |
๊ธ๋ก๋ฒ ๋น ๋ฅธ ์ ์ก |
ํ์ผ ๋ณํฉ |
์์ฒญ ์ โ (๋จ, HTTP/2๋ ๊ถ์ฅ X) |
โ
3-3. ์ค์ ์ต์ ํ ์์ + ์ฃผ์
<img src="product.webp" width="600" height="400" loading="lazy"
srcset="product-400.webp 400w, product-800.webp 800w"
sizes="(max-width: 600px) 400px, 800px" alt="์ํ ์ด๋ฏธ์ง">
ํฌ์ธํธ:
- WebP ํฌ๋งท
- Lazy Load ์ ์ฉ
- ๋ฐ์ํ ๋์ (srcset + sizes)
๐ง 4๏ธโฃ ๊ธฐ์ ๋ฉด์ ์์ ์ง๋ฌธ (์ฌํ ํฌ์ธํธ)
์ง๋ฌธ |
์ฌํ ๋ต๋ณ |
SEO ํต์ฌ ์์? |
<title> , ๋ฉํํ๊ทธ, Open Graph, ์๋งจํฑ ๊ตฌ์กฐ, ์๋ ์ต์ ํ |
์น ์ ๊ทผ์ฑ ์ด๋ป๊ฒ ๊ตฌํ? |
์๋งจํฑ ํ๊ทธ, label, alt, ARIA ์ต์ํ, ํค๋ณด๋ ๋ด๋น |
WCAG ์์น์? |
Perceivable, Operable, Understandable, Robust |
Core Web Vitals๋? |
LCP(์ต๋ ์ฝํ
์ธ ๋ก๋ฉ), FID(์
๋ ฅ ์ง์ฐ), |