---
id: wiki-2026-0508-seo
title: SEO
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Search Engine Optimization, Organic Search]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [seo, web, core-web-vitals, ai-overviews, technical-seo]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
  language: HTML
  framework: Next.js 15
---

# SEO

## 매 한 줄
> **"매 SEO 는 search engine 의 'helpful content' signal 에 align — 매 2026 은 Google AI Overviews + Perplexity + ChatGPT search 의 multi-engine 시대"**. 매 origin 은 1990s keyword stuffing; 매 modern state 는 E-E-A-T, Core Web Vitals, structured data, 그리고 매 GEO (Generative Engine Optimization) — LLM citation 을 target.

## 매 핵심

### 매 3 layer
- **Technical SEO**: crawlability, indexability, performance (Core Web Vitals: LCP, INP, CLS).
- **Content SEO**: E-E-A-T (Experience, Expertise, Authoritativeness, Trust), search intent match.
- **Off-page**: backlinks, brand mentions, citation in LLM training data.

### 매 2026 의 큰 변화
- **AI Overviews (Google SGE)**: 매 SERP top 의 LLM-generated summary — 매 "position 0".
- **GEO (Generative Engine Optimization)**: 매 ChatGPT/Perplexity/Claude citation 을 target.
- **Core Web Vitals**: INP (Interaction to Next Paint) ≤ 200ms, LCP ≤ 2.5s, CLS ≤ 0.1.
- **Helpful content update**: 매 thin/AI-spam content demote.

### 매 응용
1. Organic traffic acquisition.
2. LLM citation (brand mention in ChatGPT answers).
3. Local SEO (Google Business Profile).
4. E-commerce product discovery.

## 💻 패턴

### 매 Next.js 15 metadata API (App Router)
```tsx
// app/blog/[slug]/page.tsx
import type { Metadata } from "next";

export async function generateMetadata({ params }): Promise<Metadata> {
  const post = await getPost(params.slug);
  return {
    title: `${post.title} | Acme Blog`,
    description: post.excerpt.slice(0, 160),
    alternates: { canonical: `https://acme.com/blog/${params.slug}` },
    openGraph: {
      title: post.title,
      description: post.excerpt,
      images: [post.coverImage],
      type: "article",
      publishedTime: post.publishedAt,
      authors: [post.author.name],
    },
    twitter: { card: "summary_large_image" },
  };
}
```

### 매 JSON-LD structured data (Article)
```tsx
export default function BlogPost({ post }) {
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Article",
    headline: post.title,
    image: [post.coverImage],
    datePublished: post.publishedAt,
    dateModified: post.updatedAt,
    author: { "@type": "Person", name: post.author.name, url: post.author.url },
    publisher: {
      "@type": "Organization",
      name: "Acme",
      logo: { "@type": "ImageObject", url: "https://acme.com/logo.png" },
    },
  };
  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
      <article>{post.content}</article>
    </>
  );
}
```

### 매 sitemap.xml (Next.js 15 dynamic)
```ts
// app/sitemap.ts
import { MetadataRoute } from "next";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const posts = await getAllPosts();
  return [
    { url: "https://acme.com", lastModified: new Date(), priority: 1.0 },
    ...posts.map(p => ({
      url: `https://acme.com/blog/${p.slug}`,
      lastModified: p.updatedAt,
      changeFrequency: "monthly" as const,
      priority: 0.7,
    })),
  ];
}
```

### 매 robots.txt (매 LLM crawler 분기)
```txt
# robots.txt
User-agent: *
Allow: /
Sitemap: https://acme.com/sitemap.xml

# 매 OpenAI 의 training crawler block (매 GPTBot)
User-agent: GPTBot
Disallow: /

# 매 ChatGPT search-time citation crawler (매 OAI-SearchBot) → allow
User-agent: OAI-SearchBot
Allow: /

# 매 Anthropic ClaudeBot (training) — 매 block 선택지
User-agent: ClaudeBot
Disallow: /

# 매 Anthropic 의 search-time citation (claude-web) → 매 allow
User-agent: claude-web
Allow: /
```

### 매 Core Web Vitals 측정 (web-vitals v4)
```ts
import { onLCP, onINP, onCLS } from "web-vitals";

onLCP(metric => sendToAnalytics(metric));   // 매 ≤ 2.5s 매 good
onINP(metric => sendToAnalytics(metric));   // 매 ≤ 200ms 매 good
onCLS(metric => sendToAnalytics(metric));   // 매 ≤ 0.1 매 good

function sendToAnalytics({ name, value, id }) {
  navigator.sendBeacon("/api/vitals", JSON.stringify({ name, value, id }));
}
```

### 매 GEO — LLM citation friendly content
```markdown
<!-- 매 LLM 이 cite 하기 쉬운 형식: -->

## What is X?
X is a Y that does Z.  <!-- 매 첫 sentence definitional -->

## Key facts about X
- Fact 1 with concrete number (e.g., "47% of...").
- Fact 2 with year (e.g., "Released in 2024 by...").
- Fact 3 with named source.

## How X works
1. Step 1
2. Step 2
3. Step 3

<!-- 매 LLM citation 은 declarative, dated, sourced content 선호 -->
```

### 매 hreflang (multi-region)
```html
<link rel="alternate" hreflang="en-us" href="https://acme.com/en/page" />
<link rel="alternate" hreflang="ko-kr" href="https://acme.com/ko/page" />
<link rel="alternate" hreflang="x-default" href="https://acme.com/page" />
```

## 매 결정 기준
| 상황 | Approach |
|---|---|
| 매 informational query | long-form pillar content + JSON-LD Article |
| 매 transactional query | Product schema + clear CTA |
| 매 local | LocalBusiness schema + Google Business Profile |
| 매 LLM citation 노림 | declarative facts + dates + sources |
| 매 INP 느림 | scheduler.yield + break long tasks |

**기본값**: Next.js 15 App Router + metadata API + JSON-LD + INP-first perf.

## 🔗 Graph
- 부모: [[Web Performance]]
- 변형: [[GEO]]
- 응용: [[Core Web Vitals Optimization (INP, LCP 개선)|Core Web Vitals]]
- Adjacent: [[Search-Optimization]]

## 🤖 LLM 활용
**언제**: 매 content brief 생성 (search intent → outline). 매 meta description draft. 매 structured data scaffolding.
**언제 X**: 매 entire article 의 mass generation — 매 Helpful Content Update demote 위험.

## ❌ 안티패턴
- **Keyword stuffing**: 매 2026 에 still 하는 사람 → demote.
- **AI-spam content**: 매 LLM dump w/o expertise → Helpful Content penalty.
- **Doorway pages**: 매 thin variation per geo/keyword.
- **Cloaking**: 매 bot 과 user 에게 다른 content → manual action.
- **Ignoring INP**: 매 long task 가 SERP 영향 (2024 부터).

## 🧪 검증 / 중복
- Verified (Google Search Central docs 2026, web.dev Core Web Vitals, Schema.org).
- 신뢰도 A.

## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — AI Overviews / GEO / INP / Next.js 15 metadata |
