12. SEO κΈ°μ΄ (Search Engine Optimization)
12. SEO κΈ°μ΄ (Search Engine Optimization)¶
νμ΅ λͺ©ν¶
- SEOμ κΈ°λ³Έ μ리μ μ€μμ± μ΄ν΄
- κΈ°μ μ SEO μμ ꡬν
- λ©ν νκ·Έμ ꡬ쑰ν λ°μ΄ν° νμ©
- μ½ν μΈ μ΅μ ν μ λ΅ νμ΅
- SEO λꡬ νμ©λ² μ΅λ
λͺ©μ°¨¶
- SEO κ°μ
- λ©ν νκ·Έ
- ꡬ쑰ν λ°μ΄ν°
- κΈ°μ μ SEO
- μ½ν μΈ SEO
- μΈ‘μ κ³Ό λꡬ
- μ°μ΅ λ¬Έμ
1. SEO κ°μ¶
1.1 SEOλ?¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SEO μ μ λ° λͺ©μ β
β β
β SEO (Search Engine Optimization): β
β κ²μ μμ§ κ²°κ³Ό νμ΄μ§(SERP)μμ μΉμ¬μ΄νΈμ κ°μμ±μ β
β ν₯μμν€λ κ³Όμ β
β β
β λͺ©μ : β
β - μ κΈ°μ (Organic) νΈλν½ μ¦κ° β
β - λΈλλ μΈμ§λ ν₯μ β
β - μ λ’°λ κ΅¬μΆ β
β - μ νμ¨ κ°μ β
β β
β κ²μ μμ§ μλ μ리: β
β 1. ν¬λ‘€λ§ (Crawling): μΉ νμ΄μ§ λ°κ²¬ β
β 2. μΈλ±μ± (Indexing): μ½ν
μΈ λΆμ λ° μ μ₯ β
β 3. λνΉ (Ranking): κ²μμ΄μ λ°λ₯Έ μμ κ²°μ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
1.2 SEO μ ν¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SEO μ ν λΆλ₯ β
β β
β μ¨νμ΄μ§ SEO (On-page): β
β - λ©ν νκ·Έ (title, description) β
β - μ½ν
μΈ νμ§ β
β - ν€μλ μ΅μ ν β
β - μ΄λ―Έμ§ μ΅μ ν β
β - λ΄λΆ λ§ν¬ β
β β
β μ€ννμ΄μ§ SEO (Off-page): β
β - λ°±λ§ν¬ (λ€λ₯Έ μ¬μ΄νΈμμμ λ§ν¬) β
β - μμ
μκ·Έλ β
β - λΈλλ λ©μ
β
β - κ²μ€νΈ ν¬μ€ν
β
β β
β κΈ°μ μ SEO (Technical): β
β - μ¬μ΄νΈ μλ β
β - λͺ¨λ°μΌ μΉνμ± β
β - HTTPS β
β - ꡬ쑰ν λ°μ΄ν° β
β - ν¬λ‘€λ§/μΈλ±μ± μ μ΄ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2. λ©ν νκ·Έ¶
2.1 νμ λ©ν νκ·Έ¶
<!DOCTYPE html>
<html lang="ko">
<head>
<!-- λ¬Έμ μΈμ½λ© -->
<meta charset="UTF-8">
<!-- λ°μν λ·°ν¬νΈ -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- νμ΄μ§ μ λͺ© (50-60μ κΆμ₯) -->
<title>μΉ κ°λ° κΈ°μ΄ κ°μ΄λ - μ΄λ³΄μλ₯Ό μν μλ²½ν νν λ¦¬μΌ | μ¬μ΄νΈλͺ
</title>
<!-- λ©ν μ€λͺ
(150-160μ κΆμ₯) -->
<meta name="description" content="HTML, CSS, JavaScriptμ κΈ°μ΄λΆν° μ€μ κΉμ§.
μΉ κ°λ° μ
λ¬Έμλ₯Ό μν λ¨κ³λ³ κ°μ΄λ. λ¬΄λ£ μμ μ½λμ ν¨κ» λ°°μ°μΈμ.">
<!-- κ²μ μμ§ μ§μμ¬ν -->
<meta name="robots" content="index, follow">
<!-- μ μ URL (μ€λ³΅ μ½ν
μΈ λ°©μ§) -->
<link rel="canonical" href="https://example.com/web-development-guide">
</head>
</html>
2.2 Open Graph (μμ λ―Έλμ΄)¶
<!-- Facebook / LinkedIn -->
<meta property="og:type" content="article">
<meta property="og:title" content="μΉ κ°λ° κΈ°μ΄ κ°μ΄λ">
<meta property="og:description" content="μ΄λ³΄μλ₯Ό μν μλ²½ν μΉ κ°λ° νν 리μΌ">
<meta property="og:image" content="https://example.com/images/og-image.jpg">
<meta property="og:url" content="https://example.com/web-development-guide">
<meta property="og:site_name" content="μ¬μ΄νΈλͺ
">
<meta property="og:locale" content="ko_KR">
<!-- μ΄λ―Έμ§ κΆμ₯ μ¬μ΄μ¦: 1200x630px -->
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="μΉ κ°λ° κ°μ΄λ μΈλ€μΌ">
2.3 Twitter Card¶
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@username">
<meta name="twitter:creator" content="@author">
<meta name="twitter:title" content="μΉ κ°λ° κΈ°μ΄ κ°μ΄λ">
<meta name="twitter:description" content="μ΄λ³΄μλ₯Ό μν μλ²½ν μΉ κ°λ° νν 리μΌ">
<meta name="twitter:image" content="https://example.com/images/twitter-image.jpg">
<!-- μΉ΄λ νμ
: summary, summary_large_image, app, player -->
2.4 κΈ°ν μ€μ λ©ν νκ·Έ¶
<!-- μΈμ΄/μ§μ μ€μ -->
<link rel="alternate" hreflang="ko" href="https://example.com/ko/">
<link rel="alternate" hreflang="en" href="https://example.com/en/">
<link rel="alternate" hreflang="x-default" href="https://example.com/">
<!-- νλΉμ½ -->
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
<!-- ν
λ§ μμ (λͺ¨λ°μΌ λΈλΌμ°μ ) -->
<meta name="theme-color" content="#4285f4">
<!-- μμ±μ μ 보 -->
<meta name="author" content="μμ±μ μ΄λ¦">
<!-- λ°νμΌ/μμ μΌ -->
<meta property="article:published_time" content="2024-01-15T09:00:00+09:00">
<meta property="article:modified_time" content="2024-03-20T14:30:00+09:00">
3. ꡬ쑰ν λ°μ΄ν°¶
3.1 JSON-LD κΈ°λ³Έ¶
<!-- JSON-LD ꡬ쑰ν λ°μ΄ν° (κΆμ₯ νμ) -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebPage",
"name": "μΉ κ°λ° κΈ°μ΄ κ°μ΄λ",
"description": "μ΄λ³΄μλ₯Ό μν μλ²½ν μΉ κ°λ° νν 리μΌ",
"url": "https://example.com/web-development-guide"
}
</script>
3.2 μ‘°μ§ μ 보¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "νμ¬λͺ
",
"url": "https://example.com",
"logo": "https://example.com/logo.png",
"sameAs": [
"https://www.facebook.com/company",
"https://www.twitter.com/company",
"https://www.linkedin.com/company/company"
],
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+82-2-1234-5678",
"contactType": "customer service",
"availableLanguage": ["Korean", "English"]
}
}
</script>
3.3 κΈ°μ¬/λΈλ‘κ·Έ ν¬μ€νΈ¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "μΉ κ°λ° κΈ°μ΄ κ°μ΄λ",
"description": "μ΄λ³΄μλ₯Ό μν μλ²½ν μΉ κ°λ° νν 리μΌ",
"image": [
"https://example.com/images/1x1.jpg",
"https://example.com/images/4x3.jpg",
"https://example.com/images/16x9.jpg"
],
"author": {
"@type": "Person",
"name": "μμ±μ μ΄λ¦",
"url": "https://example.com/author"
},
"publisher": {
"@type": "Organization",
"name": "μ¬μ΄νΈλͺ
",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"datePublished": "2024-01-15",
"dateModified": "2024-03-20",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://example.com/web-development-guide"
}
}
</script>
3.4 FAQ νμ΄μ§¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "HTMLμ΄λ 무μμΈκ°μ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "HTML(HyperText Markup Language)μ μΉ νμ΄μ§μ ꡬ쑰λ₯Ό μ μνλ λ§ν¬μ
μΈμ΄μ
λλ€."
}
},
{
"@type": "Question",
"name": "CSSλ μ΄λμ μ¬μ©λλμ?",
"acceptedAnswer": {
"@type": "Answer",
"text": "CSS(Cascading Style Sheets)λ μΉ νμ΄μ§μ μκ°μ μ€νμΌμ μ μνλ λ° μ¬μ©λ©λλ€."
}
}
]
}
</script>
3.5 μ ν μ 보¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "μ νλͺ
",
"image": "https://example.com/product.jpg",
"description": "μ ν μ€λͺ
",
"sku": "SKU12345",
"brand": {
"@type": "Brand",
"name": "λΈλλλͺ
"
},
"offers": {
"@type": "Offer",
"url": "https://example.com/product",
"priceCurrency": "KRW",
"price": "99000",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "Organization",
"name": "νλ§€μλͺ
"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"reviewCount": "128"
}
}
</script>
3.6 λΈλ λν¬λΌ¶
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "ν",
"item": "https://example.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "νν 리μΌ",
"item": "https://example.com/tutorials"
},
{
"@type": "ListItem",
"position": 3,
"name": "μΉ κ°λ°",
"item": "https://example.com/tutorials/web-development"
}
]
}
</script>
4. κΈ°μ μ SEO¶
4.1 μ¬μ΄νΈλ§΅ (sitemap.xml)¶
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2024-03-20</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/about</loc>
<lastmod>2024-02-15</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://example.com/blog/post-1</loc>
<lastmod>2024-03-18</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
</urlset>
4.2 robots.txt¶
# robots.txt
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /private/
Disallow: /api/
Disallow: /*?* # URL νλΌλ―Έν° μ μΈ
# μ¬μ΄νΈλ§΅ μμΉ
Sitemap: https://example.com/sitemap.xml
# νΉμ λ΄ μ€μ
User-agent: Googlebot
Allow: /
Crawl-delay: 1
User-agent: Bingbot
Crawl-delay: 5
4.3 νμ΄μ§ μλ μ΅μ ν¶
<!-- 리μμ€ ννΈ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://cdn.example.com">
<link rel="preload" href="/fonts/main.woff2" as="font" type="font/woff2" crossorigin>
<!-- μ΄λ―Έμ§ μ΅μ ν -->
<img
src="image.webp"
alt="μ€λͺ
"
width="800"
height="600"
loading="lazy"
decoding="async"
>
<!-- λ°μν μ΄λ―Έμ§ -->
<picture>
<source media="(min-width: 800px)" srcset="large.webp">
<source media="(min-width: 400px)" srcset="medium.webp">
<img src="small.webp" alt="μ€λͺ
">
</picture>
<!-- CSS μ΅μ ν -->
<link rel="stylesheet" href="critical.css">
<link rel="stylesheet" href="non-critical.css" media="print" onload="this.media='all'">
<!-- JavaScript μ΅μ ν -->
<script src="app.js" defer></script>
<script src="analytics.js" async></script>
4.4 Core Web Vitals¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Core Web Vitals μ§ν β
β β
β LCP (Largest Contentful Paint): β
β - κ°μ₯ ν° μ½ν
μΈ μμ λ‘λ© μκ° β
β - λͺ©ν: 2.5μ΄ μ΄λ΄ β
β - κ°μ : μ΄λ―Έμ§ μ΅μ ν, μλ² μλ΅ μκ° β
β β
β FID (First Input Delay) β INP (Interaction to Next Paint): β
β - 첫 μνΈμμ© μ§μ° μκ° β μ 체 μνΈμμ© λ°μμ± β
β - λͺ©ν: 100ms μ΄λ΄ β 200ms μ΄λ΄ β
β - κ°μ : JavaScript μ΅μ ν, λ©μΈ μ€λ λ μ°¨λ¨ μ΅μν β
β β
β CLS (Cumulative Layout Shift): β
β - λ μ΄μμ λ³κ²½ λμ μ μ β
β - λͺ©ν: 0.1 μ΄ν β
β - κ°μ : μ΄λ―Έμ§/κ΄κ³ ν¬κΈ° λͺ
μ, ν°νΈ λ‘λ© μ΅μ ν β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4.5 λͺ¨λ°μΌ μ΅μ ν¶
<!-- λͺ¨λ°μΌ μΉνμ μ€μ -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- ν°μΉ νκ² ν¬κΈ° (μ΅μ 48x48px) -->
<style>
button, a {
min-height: 48px;
min-width: 48px;
padding: 12px 16px;
}
</style>
<!-- κ°λ
μ± (μ΅μ 16px ν°νΈ) -->
<style>
body {
font-size: 16px;
line-height: 1.5;
}
</style>
5. μ½ν μΈ SEO¶
5.1 ν€μλ μ΅μ ν¶
<!-- νμ΄νμ μ£Όμ ν€μλ ν¬ν¨ -->
<title>μΉ κ°λ° κΈ°μ΄ | HTML, CSS, JavaScript νν 리μΌ</title>
<!-- H1μ νμ΄μ§λΉ νλ, ν€μλ ν¬ν¨ -->
<h1>μΉ κ°λ° κΈ°μ΄ κ°μ΄λ: HTML, CSS, JavaScript μμνκΈ°</h1>
<!-- μμ°μ€λ¬μ΄ ν€μλ λ°°μΉ -->
<p>
<strong>μΉ κ°λ°</strong>μ μμνλ €λ©΄ HTML, CSS, JavaScriptμ
κΈ°μ΄λ₯Ό μ΄ν΄ν΄μΌ ν©λλ€. μ΄ <em>μΉ κ°λ° νν 리μΌ</em>μμλ...
</p>
5.2 μλ§¨ν± λ§ν¬μ ¶
<article>
<header>
<h1>μΉ κ°λ° κΈ°μ΄ κ°μ΄λ</h1>
<p>
<time datetime="2024-03-20">2024λ
3μ 20μΌ</time> |
<a href="/author/john">μμ±μ μ΄λ¦</a>
</p>
</header>
<section>
<h2>HTML κΈ°μ΄</h2>
<p>HTMLμ μΉ νμ΄μ§μ ꡬ쑰λ₯Ό μ μν©λλ€...</p>
</section>
<section>
<h2>CSS μ€νμΌλ§</h2>
<p>CSSλ μκ°μ ννμ λ΄λΉν©λλ€...</p>
</section>
<aside>
<h3>κ΄λ ¨ κΈ</h3>
<ul>
<li><a href="/css-layout">CSS λ μ΄μμ λ§μ€ν°</a></li>
<li><a href="/javascript-basics">JavaScript μ
λ¬Έ</a></li>
</ul>
</aside>
<footer>
<p>νκ·Έ: <a href="/tag/html">HTML</a>, <a href="/tag/css">CSS</a></p>
</footer>
</article>
5.3 λ§ν¬ μ΅μ ν¶
<!-- λ΄λΆ λ§ν¬ (λͺ
νν μ΅μ»€ ν
μ€νΈ) -->
<a href="/css-tutorial">CSS νν λ¦¬μΌ λ³΄κΈ°</a>
<!-- νΌν΄μΌ ν κ²: <a href="/css-tutorial">μ¬κΈ°λ₯Ό ν΄λ¦</a> -->
<!-- μΈλΆ λ§ν¬ -->
<a href="https://developer.mozilla.org"
target="_blank"
rel="noopener noreferrer">
MDN Web Docs
</a>
<!-- nofollow (μ λ’°νμ§ μλ λ§ν¬) -->
<a href="https://external-site.com" rel="nofollow">μΈλΆ μ¬μ΄νΈ</a>
<!-- λΈλ λν¬λΌ -->
<nav aria-label="λΈλ λν¬λΌ">
<ol>
<li><a href="/">ν</a></li>
<li><a href="/tutorials">νν 리μΌ</a></li>
<li aria-current="page">μΉ κ°λ° κΈ°μ΄</li>
</ol>
</nav>
5.4 URL ꡬ쑰¶
μ’μ URL ꡬ쑰:
β https://example.com/tutorials/web-development-basics
β https://example.com/products/electronics/smartphones
νΌν΄μΌ ν URL:
β https://example.com/page?id=123&cat=5
β https://example.com/p/a/b/c/d/e/article
β https://example.com/μΉκ°λ° (νκΈ URLμ μΈμ½λ©λ¨)
κ·μΉ:
- μλ¬Έμ μ¬μ©
- νμ΄ν(-) μΌλ‘ λ¨μ΄ ꡬλΆ
- κ°κ²°νκ³ μ€λͺ
μ
- κ³μΈ΅ ꡬ쑰 λ°μ
- λΆνμν νλΌλ―Έν° μ κ±°
6. μΈ‘μ κ³Ό λꡬ¶
6.1 Google Search Console¶
μ£Όμ κΈ°λ₯:
- κ²μ μ±λ₯ λΆμ (ν΄λ¦, λ
ΈμΆ, CTR, μμ)
- μμΈ μν νμΈ
- μ¬μ΄νΈλ§΅ μ μΆ
- ν¬λ‘€λ§ μ€λ₯ νμΈ
- Core Web Vitals 리ν¬νΈ
- λͺ¨λ°μΌ μ¬μ©μ± 리ν¬νΈ
μ€μ :
1. Google Search Console μ μ
2. μ¬μ΄νΈ μμ κΆ νμΈ (HTML νκ·Έ, DNS, νμΌ μ
λ‘λ)
3. μ¬μ΄νΈλ§΅ μ μΆ
6.2 Google Analytics 4¶
<!-- GA4 μ€μΉ -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXXXXX');
</script>
<!-- μ΄λ²€νΈ μΆμ -->
<script>
// λ²νΌ ν΄λ¦ μΆμ
document.querySelector('.cta-button').addEventListener('click', () => {
gtag('event', 'cta_click', {
'event_category': 'engagement',
'event_label': 'signup_button'
});
});
</script>
6.3 SEO λꡬ뀶
λ¬΄λ£ λꡬ:
- Google Search Console: κ²μ μ±λ₯, μμΈ μν
- Google PageSpeed Insights: νμ΄μ§ μλ
- Lighthouse: μ’
ν© μΉμ¬μ΄νΈ νμ§ μΈ‘μ
- Screaming Frog (λ¬΄λ£ λ²μ ): ν¬λ‘€λ§, μ¬μ΄νΈ λΆμ
- Google Rich Results Test: ꡬ쑰ν λ°μ΄ν° ν
μ€νΈ
μ λ£ λꡬ:
- Ahrefs: λ°±λ§ν¬ λΆμ, ν€μλ 리μμΉ
- SEMrush: κ²½μμ¬ λΆμ, ν€μλ μΆμ
- Moz Pro: λλ©μΈ κΆμλ, SEO λΆμ
6.4 체ν¬λ¦¬μ€νΈ¶
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SEO μ κ² μ²΄ν¬λ¦¬μ€νΈ β
β β
β κΈ°λ³Έ μ€μ : β
β β‘ κ³ μ νκ³ μ€λͺ
μ μΈ title νκ·Έ β
β β‘ λ§€λ ₯μ μΈ meta description β
β β‘ μ μ ν canonical URL β
β β‘ robots.txt μ€μ β
β β‘ sitemap.xml μμ± λ° μ μΆ β
β β‘ HTTPS μ μ© β
β β
β μ½ν
μΈ : β
β β‘ H1 νκ·Έ (νμ΄μ§λΉ νλ) β
β β‘ λ
Όλ¦¬μ μΈ ν€λ© ꡬ쑰 (H1βH2βH3) β
β β‘ μ΄λ―Έμ§ alt ν
μ€νΈ β
β β‘ λ΄λΆ λ§ν¬ ꡬ쑰 β
β β‘ λͺ¨λ°μΌ μΉνμ μ½ν
μΈ β
β β
β κΈ°μ μ : β
β β‘ Core Web Vitals ν΅κ³Ό β
β β‘ λͺ¨λ°μΌ λ°μν β
β ①ꡬ쑰ν λ°μ΄ν° β
β β‘ 404 νμ΄μ§ μ²λ¦¬ β
β ①리λ€μ΄λ νΈ μ΅μ ν β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
7. μ°μ΅ λ¬Έμ ¶
μ°μ΅ 1: λ©ν νκ·Έ μμ±¶
λΈλ‘κ·Έ ν¬μ€νΈμ νμν λ©ν νκ·Έλ₯Ό μμ±νμΈμ.
<!-- μμ λ΅μ -->
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>React Hooks μλ²½ κ°μ΄λ - useStateλΆν° 컀μ€ν
ν
κΉμ§ | λΈλ‘κ·Έλͺ
</title>
<meta name="description" content="React Hooksμ λͺ¨λ κ²μ μμλ΄
λλ€.
useState, useEffect, useContextλΆν° 컀μ€ν
ν
μμ±λ²κΉμ§ μμ μ ν¨κ» μ€λͺ
ν©λλ€.">
<link rel="canonical" href="https://blog.example.com/react-hooks-guide">
<!-- Open Graph -->
<meta property="og:type" content="article">
<meta property="og:title" content="React Hooks μλ²½ κ°μ΄λ">
<meta property="og:description" content="React Hooksμ λͺ¨λ κ²μ μμ μ ν¨κ»">
<meta property="og:image" content="https://blog.example.com/images/react-hooks-og.jpg">
<meta property="og:url" content="https://blog.example.com/react-hooks-guide">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="React Hooks μλ²½ κ°μ΄λ">
<meta name="twitter:description" content="React Hooksμ λͺ¨λ κ²μ μμ μ ν¨κ»">
<meta name="twitter:image" content="https://blog.example.com/images/react-hooks-twitter.jpg">
</head>
μ°μ΅ 2: ꡬ쑰ν λ°μ΄ν° μμ±¶
λ μνΌ νμ΄μ§μ ꡬ쑰ν λ°μ΄ν°λ₯Ό μμ±νμΈμ.
<!-- μμ λ΅μ -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "κΉμΉμ°κ°",
"image": "https://example.com/kimchi-jjigae.jpg",
"author": {
"@type": "Person",
"name": "μλ¦¬μ¬ μ΄λ¦"
},
"datePublished": "2024-03-15",
"description": "μ§ν λ§μ μ ν΅ κΉμΉμ°κ° λ μνΌ",
"prepTime": "PT10M",
"cookTime": "PT20M",
"totalTime": "PT30M",
"recipeYield": "2μΈλΆ",
"recipeIngredient": [
"κΉμΉ 200g",
"λΌμ§κ³ κΈ° 150g",
"λλΆ 1/2λͺ¨",
"μν 1/2κ°"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"text": "κΉμΉλ₯Ό νμ
ν¬κΈ°λ‘ μ¬λ€"
},
{
"@type": "HowToStep",
"text": "λΌμ§κ³ κΈ°μ ν¨κ» λ³Άλλ€"
}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": "156"
}
}
</script>
μ°μ΅ 3: robots.txt μμ±¶
λ€μ μꡬμ¬νμ λ§λ robots.txtλ₯Ό μμ±νμΈμ. - κ΄λ¦¬μ νμ΄μ§ (/admin/) μ°¨λ¨ - API μλν¬μΈνΈ (/api/) μ°¨λ¨ - κ²μ κ²°κ³Ό νμ΄μ§ (/search?*) μ°¨λ¨ - λλ¨Έμ§λ νμ©
# μμ λ΅μ
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /search
Sitemap: https://example.com/sitemap.xml