
## 1. 크롤링 & 색인 보장 (Crawlability)

### ① 링크는 무조건 `href` 속성이 있는 표준 `<a>` 태그 사용

* **나쁜 예 (색인 불가능):** `<button onclick="goToProduct(123)">상품 보기</button>`
* **좋은 예 (색인 가능):** `<a href="/products/123">상품 보기</a>`

### ② SSR (서버 사이드 렌더링) 또는 하이브리드 라우팅 필수

구글봇이 처음 페이지를 요청했을 때 받는 '초기 HTML'에 핵심 텍스트 콘텐츠와 메타 태그(`title`, `description`)가 채워져 있어야 합니다. CSR(클라이언트 사이드 렌더링) 방식으로 텅 빈 빈 껍데기 HTML(`<body><div id="app"></div></body>`)만 내려주면, 구글이 렌더링 큐에서 자바스크립트를 실행할 때까지 몇 일에서 몇 주 동안 색인이 누락되거나 지연될 수 있습니다.

### ③ 올바른 HTTP 상태 코드 반환

존재하지 않는 페이지(404)나 에러 페이지(500)인데 화면에만 "페이지를 찾을 수 없습니다"라고 적어두고 HTTP 응답 상태 코드는 `200 OK`로 반환하는 **'Soft 404'** 오류를 방지해야 합니다. 검색 로봇이 빈 페이지를 가치 있는 페이지로 오해하여 크롤링 예산을 낭비하게 됩니다.

---

## 2. 시맨틱 마크업 & 데이터 구조화 (Structure)

### ① 시맨틱 HTML 태그의 올바른 계층 구조

레이아웃을 단순히 `<div>`로 떡칠하기보다 의미 있는 태그를 써야 로봇이 페이지 내부의 중요도를 파악합니다. 특히 `<h1>` 태그는 페이지당 **단 하나만** 존재해야 하며, 페이지의 핵심 주제를 담아야 합니다.

* 구조 예시: `<header>`, `<nav>`, `<main>`, `<article>`, `<section>`, `<aside>`, `<footer>`
* 제목 태그 계층 철저히 준수 (`<h1>` -> `<h2>` -> `<h3>` 순서로 건너뛰지 않기)

### ② JSON-LD 기반 구조화 데이터 (Schema Markup) 주입

구글과 AI 검색 엔진이 웹페이지의 성격(상품, 블로그 글, FAQ, 이벤트 등)을 완벽하게 이해하고 검색 결과에 풍부한 스니펫(리치 결과)을 띄우게 하려면 코드 내에 JSON-LD 포맷의 스키마 마크업을 심어주어야 합니다.

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "구글 SEO를 위한 웹 개발 가이드",
  "author": {
    "@type": "Person",
    "name": "홍길동"
  }
}
</script>

```

---

## 3. 핵심 웹 바이탈 & 성능 (Core Web Vitals)

구글은 사용자 경험(UX) 성능 지표인 **Core Web Vitals**를 직접적인 랭킹 요소로 반영합니다. 로딩이 느리거나 버벅거리는 사이트는 검색 순위에서 밀려납니다.

| 지표 | 풀이 | 개발 관점의 최적화 핵심 |
| --- | --- | --- |
| **LCP** (Largest Contentful Paint) | 가장 큰 콘텐츠(주로 메인 이미지나 타이틀)가 뜨는 속도 | 핵심 이미지 Early Hint 설정, 이미지 `fetchpriority="high"` 부여, 압축된 WebP/AVIF 포맷 사용 |
| **INP** (Interaction to Next Paint) | 사용자가 클릭하거나 입력했을 때 반응하는 속도 | 메인 스레드를 차단하는 무거운 자바스크립트 실행 분해 (`requestIdleCallback` 등 활용) |
| **CLS** (Cumulative Layout Shift) | 로딩 중 화면 레이아웃이 덜덜 떨리며 밀리는 현상 | 이미지 및 광고 배너 태그에 명시적인 고정 크기(`width`, `height`) 지정 |

---

## 4. 중복 콘텐츠 방지 & 주소 관리 (Canonicalization)

### ① 대표 URL(Canonical) 지정

동일한 페이지가 파라미터(`?category=1&page=2` 등)나 프로토콜(`http` vs `https`), `www` 유무에 따라 여러 주소로 접근 가능할 경우 구글은 이를 '중복 콘텐츠'로 인지해 페널티를 주거나 엉뚱한 주소를 검색에 노출합니다. `<head>` 내에 반드시 표준 페이지를 명시하세요.

```html
<link rel="canonical" href="https://example.com/products/123" />

```

### ② 모바일 환경의 완벽한 대응 (Mobile-First Indexing)

구글은 데스크톱이 아닌 **모바일 뷰포트 기준**으로 크롤링하고 점수를 매깁니다. 반응형 웹 디자인은 필수이며, 데스크톱 화면에서 보이던 핵심 텍스트나 메뉴가 모바일 화면에서 `display: none;`으로 완전히 누락되지 않도록 개발 단계에서 교차 검증해야 합니다.

---

## 🛠️ 개발자 필수 체크리스트 요약

1. 배포 전 Google Search Console(구글 서치 콘솔)의 `URL 검사 -> 실시간 테스트`를 통해 구글봇이 자바스크립트 렌더링 후의 화면을 텍스트 유실 없이 완벽하게 보고 있는지 확인하세요.
2. `robots.txt`에서 검색 로봇의 CSS, JS 자산 접근을 차단하고 있지 않은지 체크하세요.
3. 이미지에는 무조건 `alt="..."` 속성을 넣어 스크린 리더와 로봇이 이미지를 이해할 수 있게 하세요.
