d8a80f6272
이름만 다른(표기 변형) [[위키링크]]를 대상 문서의 canonical 제목으로 치환해 끊겼던 1,200개 링크를 연결. 제목/파일명 정규화 일치만 적용하고 별칭 매칭은 과병합 위험으로 제외(애매성 가드). 원본은 _link_reconcile_backup/ 에 백업. 도구: Datacollect/scripts/link_reconcile_apply.mjs Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.6 KiB
6.6 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-seo | SEO | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
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.
매 응용
- Organic traffic acquisition.
- LLM citation (brand mention in ChatGPT answers).
- Local SEO (Google Business Profile).
- E-commerce product discovery.
💻 패턴
매 Next.js 15 metadata API (App Router)
// 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)
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)
// 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 분기)
# 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)
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
<!-- 매 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)
<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, CLS)
- 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 |