2025-03-11T00:21:14
This commit is contained in:
206
doc/seo/09_Schema.org.md
Normal file
206
doc/seo/09_Schema.org.md
Normal file
@@ -0,0 +1,206 @@
|
||||
**Schema.org**는 구조화된 데이터를 웹에 추가하기 위한 개방형 표준으로, 검색 엔진(Google, Bing, Yahoo 등)이 웹 페이지의 콘텐츠를 더 잘 이해하고 활용할 수 있도록 설계되었습니다. 2011년에 Google, Microsoft, Yahoo, Yandex가 공동으로 시작했으며, 현재는 커뮤니티 주도로 유지됩니다. Schema.org는 주로 **마크업 형식**(Microdata, RDFa, JSON-LD)을 통해 HTML에 의미론적 데이터를 삽입하며, 이를 통해 검색 결과의 풍부한 표시(Rich Snippets), 음성 검색 최적화, 기계 학습 등 다양한 용도로 활용됩니다.
|
||||
|
||||
---
|
||||
|
||||
### 1. Schema.org의 정의와 목적
|
||||
- **정의**: 웹 콘텐츠에 의미를 부여하는 어휘(Vocabulary)와 이를 적용하는 가이드라인 집합.
|
||||
- **목적**:
|
||||
- **검색 엔진 최적화(SEO)**: 콘텐츠의 의미를 명확히 해 검색 결과 개선.
|
||||
- **풍부한 검색 결과**: 리뷰 별점, 이벤트 날짜, 제품 가격 등이 검색 결과에 표시.
|
||||
- **기계 이해도 향상**: AI, 크롤러가 데이터를 구조적으로 파싱 가능.
|
||||
- **상호운용성**: 다양한 플랫폼 간 데이터 공유 용이.
|
||||
|
||||
---
|
||||
|
||||
### 2. Schema.org의 주요 특징
|
||||
- **어휘 기반**: 계층적 타입(Type)과 속성(Property)으로 구성.
|
||||
- 예: `Person` 타입은 `name`, `email`, `birthDate` 속성을 가짐.
|
||||
- **확장성**: 커뮤니티 제안으로 새로운 타입과 속성 추가 가능.
|
||||
- **형식 지원**:
|
||||
- **Microdata**: HTML 속성 사용.
|
||||
- **RDFa**: HTML 속성으로 시맨틱 웹 연결.
|
||||
- **JSON-LD**: 별도 스크립트로 삽입 (가장 널리 사용).
|
||||
- **오픈 소스**: 누구나 무료로 사용 가능, schema.org에서 문서 제공.
|
||||
|
||||
---
|
||||
|
||||
### 3. Schema.org의 주요 타입과 속성
|
||||
Schema.org는 수백 개의 타입과 속성을 제공하며, 몇 가지 대표적인 예는 다음과 같습니다:
|
||||
|
||||
#### (1) `Person` (사람)
|
||||
- 속성: `name`, `email`, `telephone`, `address`, `jobTitle`.
|
||||
- 예: 개인 프로필.
|
||||
|
||||
#### (2) `Event` (이벤트)
|
||||
- 속성: `name`, `startDate`, `endDate`, `location`.
|
||||
- 예: 컨퍼런스, 공연.
|
||||
|
||||
#### (3) `Product` (제품)
|
||||
- 속성: `name`, `description`, `price`, `brand`, `review`.
|
||||
- 예: 전자상거래 상품.
|
||||
|
||||
#### (4) `Article` (기사)
|
||||
- 속성: `headline`, `author`, `datePublished`, `image`.
|
||||
- 예: 블로그 포스트, 뉴스.
|
||||
|
||||
#### (5) `Organization` (조직)
|
||||
- 속성: `name`, `logo`, `contactPoint`, `url`.
|
||||
- 예: 회사 정보.
|
||||
|
||||
---
|
||||
|
||||
### 4. Schema.org 마크업 형식
|
||||
Schema.org는 세 가지 주요 형식으로 구현됩니다.
|
||||
|
||||
#### (1) Microdata
|
||||
- HTML 태그에 `itemscope`, `itemtype`, `itemprop` 속성 추가.
|
||||
- **예제**:
|
||||
```html
|
||||
<div itemscope itemtype="http://schema.org/Person">
|
||||
<span itemprop="name">홍길동</span>
|
||||
<a href="mailto:hong@example.com" itemprop="email">hong@example.com</a>
|
||||
</div>
|
||||
```
|
||||
|
||||
#### (2) RDFa
|
||||
- HTML 속성(`typeof`, `property`)으로 데이터 연결.
|
||||
- **예제**:
|
||||
```html
|
||||
<div typeof="Person">
|
||||
<span property="name">홍길동</span>
|
||||
<a href="mailto:hong@example.com" property="email">hong@example.com</a>
|
||||
</div>
|
||||
```
|
||||
|
||||
#### (3) JSON-LD (권장)
|
||||
- `<script>` 태그에 JSON 형식으로 삽입.
|
||||
- **예제**:
|
||||
```html
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "Person",
|
||||
"name": "홍길동",
|
||||
"email": "hong@example.com"
|
||||
}
|
||||
</script>
|
||||
```
|
||||
- **왜 권장?**: HTML 구조와 분리, 유지보수 용이, 검색 엔진 선호.
|
||||
|
||||
---
|
||||
|
||||
### 5. Schema.org의 작동 방식
|
||||
1. **마크업 추가**: 웹 페이지에 적절한 타입과 속성 삽입.
|
||||
2. **크롤링**: 검색 엔진이 마크업을 파싱.
|
||||
3. **활용**:
|
||||
- **Rich Snippets**: 별점, 가격 등이 검색 결과에 표시.
|
||||
- **Knowledge Graph**: Google의 지식 패널에 정보 제공.
|
||||
- **음성 검색**: "가까운 이벤트는?" 같은 질문에 답변.
|
||||
|
||||
---
|
||||
|
||||
### 6. 자바로 Schema.org JSON-LD 생성 예제
|
||||
Jackson 라이브러리를 사용해 Schema.org 데이터를 JSON-LD로 생성할 수 있습니다.
|
||||
|
||||
#### (1) 의존성 (Maven)
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.15.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.30</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
#### (2) 모델링 및 생성
|
||||
```java
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PersonSchema {
|
||||
@JsonProperty("@context")
|
||||
private String context = "http://schema.org";
|
||||
|
||||
@JsonProperty("@type")
|
||||
private String type = "Person";
|
||||
|
||||
private String name;
|
||||
private String email;
|
||||
}
|
||||
|
||||
public class SchemaOrgExample {
|
||||
public static void main(String[] args) throws Exception {
|
||||
PersonSchema person = new PersonSchema();
|
||||
person.setName("홍길동");
|
||||
person.setEmail("hong@example.com");
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
String jsonLd = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
|
||||
|
||||
System.out.println("<script type=\"application/ld+json\">");
|
||||
System.out.println(jsonLd);
|
||||
System.out.println("</script>");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 출력 결과:
|
||||
```html
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context" : "http://schema.org",
|
||||
"@type" : "Person",
|
||||
"name" : "홍길동",
|
||||
"email" : "hong@example.com"
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 7. Schema.org의 장점과 단점
|
||||
- **장점**:
|
||||
- 검색 엔진의 강력한 지원 (Rich Snippets, SEO 향상).
|
||||
- 다양한 타입과 속성으로 유연성 제공.
|
||||
- JSON-LD로 쉬운 구현.
|
||||
- **단점**:
|
||||
- 초기 학습 곡선 존재.
|
||||
- 잘못된 마크업 시 검색 엔진 패널티 가능.
|
||||
- 모든 데이터가 풍부한 결과로 반영되지 않을 수 있음.
|
||||
|
||||
---
|
||||
|
||||
### 8. Schema.org와 Microformats 비교
|
||||
| **특성** | **Schema.org** | **Microformats** |
|
||||
|---------------------|------------------------|------------------------|
|
||||
| **형식** | JSON-LD, Microdata 등 | HTML 클래스 |
|
||||
| **복잡도** | 중간 | 낮음 |
|
||||
| **SEO 지원** | 강력 | 제한적 |
|
||||
| **어휘 범위** | 광범위 | 제한적 |
|
||||
| **현재 사용** | 주류 | 소규모/레거시 |
|
||||
|
||||
- **Schema.org**: 현대 웹에서 SEO와 데이터 활용에 최적화.
|
||||
- **Microformats**: 간단한 구조화 데이터에 유용.
|
||||
|
||||
---
|
||||
|
||||
### 9. 현대적 맥락
|
||||
- **사용 사례**: 전자상거래, 블로그, 이벤트 사이트, 지역 비즈니스 등.
|
||||
- **도구**:
|
||||
- Google Structured Data Testing Tool: 마크업 검증.
|
||||
- Rich Results Test: 풍부한 결과 확인.
|
||||
- **확장**: `pending.schema.org`로 새로운 타입 제안 가능.
|
||||
|
||||
---
|
||||
|
||||
### 10. 결론
|
||||
Schema.org는 웹 콘텐츠에 구조화된 데이터를 추가하는 강력한 도구로, SEO와 사용자 경험을 동시에 개선합니다. JSON-LD 형식이 가장 널리 사용되며, 자바로 쉽게 생성 가능합니다. 검색 엔진의 풍부한 결과를 노리거나 데이터를 기계 친화적으로 만들고 싶다면 필수적인 선택입니다.
|
||||
|
||||
추가로 특정 타입(예: `Event`, `Product`)에 대한 예제나 질문이 있다면 말씀해주세요!
|
||||
Reference in New Issue
Block a user