Discourse Rich JSON-LD Microdata
| ์์ฝ | Discourse์ ํ์ค ๋ฉํ ํ๊ทธ๋ฅผ ํฌ๊ด์ ์ด๊ณ ์กฐ์จ๋ Open Graph, Twitter Cards, Schema.org JSON-LD ๋งํฌ์ ์ธํธ๋ก ๊ฐํํ์ฌ ์ฐ์ํ SEO ์ฑ๋ฅ, ๋ ํ๋ถํ ์์ ๋ฏธ๋์ด ๊ณต์ ๊ฒฝํ, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๋ AI/LLM ๊ฒ์ ๊ฐ๋ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค | |
| ์ ์ฅ์ ๋งํฌ | GitHub - kaktaknet/discourse-rich-json-ld-microdata: ๐ Discourse Rich JSON-LD Microdata Plugin. Comprehensive, coordinated Open Graph and Schema.org JSON-LD microdata for 200% SEO and LLM coverage ยท GitHub | |
| ์ค์น ๊ฐ์ด๋ | Discourse์์ ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฐฉ๋ฒ |
์ ๊ณต๋๋ ๊ธฐ๋ฅ
ํฌ๋ผ์ด ๊ฒ์ ๊ฒฐ๊ณผ, ์์ ๋ฏธ๋์ด, AI ๊ธฐ๋ฐ ์ด์์คํดํธ์์ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ณํํ์ธ์. ์ด ํ๋ฌ๊ทธ์ธ์ Google, Yandex, ์์ ํ๋ซํผ, ๊ทธ๋ฆฌ๊ณ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)์ด ์๋ฒฝํ๊ฒ ์ดํดํ ์ ์๋ ์ ๋ฌธ ๋ฑ๊ธ์ ๊ตฌ์กฐํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
์์ธํ ๋ฌธ์๋ README.md๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ ๋ฐ ๊ฐ๋ฐ์ CONTRIBUTING.md๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ ์์ ๋ฐ ๋ฌธ์ ํด๊ฒฐ์ USAGE.md๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋ถํ ๊ฒ์ ๊ฒฐ๊ณผ ์์
์ด์ : Google์ ์ผ๋ฐ ํ
์คํธ ์ค๋ํซ
์ดํ: ํ์ , ๋ต๋ณ ์, ์์ฑ์, ๊ฒ์ ๋ ์ง๊ฐ ํฌํจ๋ ํ๋ถํ ์ค๋ํซ
์ด์ : ์์
๋ฏธ๋์ด์ ์ผ๋ฐ ๋งํฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
์ดํ: ์ด๋ฏธ์ง, ์ค๋ช
, ๋ธ๋๋ฉ์ด ํฌํจ๋ ๋๊ธธ์ ๋๋ ์นด๋
Google Search Central์ ํ๋ถํ ๊ฒฐ๊ณผ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
์ฃผ์ ๊ธฐ๋ฅ
1. ์์ ํ Schema.org ์ปค๋ฒ๋ฆฌ์ง
- ์ ์ฒด Q&A ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ ํ ํฝ์ฉ QAPage ์คํค๋ง
- ๋ต๋ณ ํ์ ๋ฐ ํด๊ฒฐ ์ํ ์ง์
- ํ์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๊ฐ์ถ ์นดํ ๊ณ ๋ฆฌ์ฉ CollectionPage
- ์ ๋ฌธ์ฑ ์งํ๋ฅผ ๊ฐ์ถ ์ฌ์ฉ์ ํ๋กํ์ฉ ProfilePage
- ๋ด๋น๊ฒ์ด์ ๊ฒฝ๋ก๋ฅผ ์ํ BreadcrumbList
- ๊ฒ์ ๋์์ ๊ฐ์ถ WebSite ๊ธ๋ก๋ฒ ์คํค๋ง
2. ์กฐ์จ๋ ์์ ๋ฏธ๋์ด ํ๊ทธ
- Open Graph (Facebook, LinkedIn, Discord)
- Twitter Cards (summary_large_image)
- **๋จ์ผ ์ง์ค ์์ค(Single Source of Truth)**์์ ๋ชจ๋ ์์ฑ - ์ถฉ๋ ์์
- Discourse์ ๊ธฐ๋ณธ ํ๊ทธ ์๋ ์ ๋ฆฌ
3. AI ๋ฐ LLM ์ต์ ํ
- Schema.org
@id์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ์์ ํ ์ํฐํฐ ๊ด๊ณ - ์ ์ฒด ์ปจํ ์คํธ ์ดํด (ํ ํฝ โ ์นดํ ๊ณ ๋ฆฌ โ ๋ต๋ณ โ ๋๊ธ)
- ์์ฑ์ ์ ๋ฌธ์ฑ ๋ฉํ๋ฐ์ดํฐ
- ChatGPT, Claude ๋ฐ ๊ธฐํ AI ์ด์์คํดํธ๊ฐ ์๋ฒฝํ ์ปจํ ์คํธ๋ฅผ ์ป์ต๋๋ค
4. ์์ ํ ๊ตญ์ ํ ![]()
- ์์ด ๋ฐ ๋ฌ์์์ด ๋ฒ์ญ 100% ํฌํจ
- ์๋ ์ธ์ด ๊ฐ์ง (์ฌ์ฉ์ โ ์ฌ์ดํธ โ ๋ธ๋ผ์ฐ์ โ ํด๋ฐฑ)
- ๋ชจ๋ Schema.org ์ค๋ช ํ์งํ
- ์ถ๊ฐ ์ธ์ด ์ถ๊ฐ ์ฉ์ด
5. ์ค๋งํธ ์ฑ๋ฅ
- 1์๊ฐ TTL(๊ตฌ์ฑ ๊ฐ๋ฅ)์ ๊ฐ์ถ Redis ์บ์ฑ
- ์ฝํ ์ธ ๋ณ๊ฒฝ ์ ์๋ ์บ์ ๋ฌดํจํ
- ์บ์๋ ํ์ด์ง๋ 5ms ๋ฏธ๋ง
- ์๋ก ์์ฑํ๋ ๊ฒฝ์ฐ ์ฝ 50ms
6. ์ ๋ก ์ ์ง๋ณด์
- ๋ธ๋ผ์ฐ์ ๋ฐ ํฌ๋กค๋ฌ ๋ทฐ ๋ชจ๋์ ๋ํ ์๋ ์ฃผ์
- ํ ํฝ, ์นดํ ๊ณ ๋ฆฌ, ์ฌ์ฉ์ ํ๋กํ์์ ์๋
- ์ฐ์ํ ์ค๋ฅ ์ฒ๋ฆฌ - ์ฌ์ดํธ๊ฐ ์ ๋ ๊นจ์ง์ง ์์
- ๋๋ฒ๊น ์ ์ํ ํฌ๊ด์ ์ธ ๋ก๊น
ํฌ๋ผ์ ๋ํ ์ด์
๋ ๋์ ๊ฒ์ ์์
- Google์ ํ๋ถํ ์ค๋ํซ์ ํด๋ฆญ๋ฅ (CTR)์ 30-50% ์ฆ๊ฐ์ํต๋๋ค
- ์ ๋ฌธ๊ฐ ์ฌ์ฉ์๋ฅผ ์ํ ์ง์ ๊ทธ๋ํ ํจ๋
- โ์ฌ๋๋ค์ด ๋ํ ๋ฌป๋ ๊ฒโ ์น์ ์ ํน์ง์ ์ผ๋ก ๋ ธ์ถ
- ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ธ๋ ๋ํฌ๋ผ์ ๋ด๋น๊ฒ์ด์ ์ ๊ฐ์ ํฉ๋๋ค
์ ๋ฌธ์ ์ธ ์์
๊ณต์
- Facebook, Twitter, LinkedIn์์ ๊ณต์ ์ ๋๊ธธ์ ๋๋ ์นด๋
- ๋ก๊ณ ์ ์ค๋ช ์ ํตํ ์ ์ ํ ๋ธ๋๋ฉ
- ์ฆ๊ฐ๋ ์ฐธ์ฌ๋ ๋ฐ ํด๋ฆญ๋ฅ
- 40๊ฐ ์ด์์ ์์ ํ๋ซํผ์์ ์๋
AI ์ด์์คํดํธ ์ค๋น ์๋ฃ
- ์ฝํ ์ธ ๊ฐ ChatGPT์ Claude ์๋ต์ ์ ํํ๊ฒ ํ์๋ฉ๋๋ค
- ํฌ๋ผ์ผ๋ก์ ๋งํฌ๋ฅผ ํตํ ์ ์ ํ ์ถ์ฒ ํ์
- ์์ ํ ์ปจํ ์คํธ๋ AI ํ๊ฐ(Hallucination)์ ๋ฐฉ์งํฉ๋๋ค
- ์์ฑํ ์์ง ์ต์ ํ(GEO)๋ฅผ ์ํ ๋ฏธ๋ ๋๋น
๊ตญ์ ์ ๋
์์ธต
- ์๋ ์ธ์ด ๊ฐ์ง
- ๋ ๋์ ๊ด๋ จ์ฑ์ ์ํ ํ์งํ๋ ์ค๋ช
- URL ์ธ์ฝ๋ฉ์ ํค๋ฆด ๋ฌธ์ ๋ฐ ํน์ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค
- ๋ ๋ง์ ์ธ์ด๋ก ํ์ฅํ๊ธฐ ์ฌ์
์ค์น
๋จ๊ณ 1: ์ค์น
์ ์ ์ฅ์ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ Install plugins on a self-hosted site ์ ๋ฐ๋ฅด์ธ์
๋จ๊ณ 2: ๊ด๋ฆฌ์์์ ํ์ฑํ
๊ด๋ฆฌ์ โ ์ค์ โ ํ๋ฌ๊ทธ์ธ โ Rich Microdata ๋ก ์ด๋ํ์ธ์
rich_microdata_enabled๋ฅผ true(๊ธฐ๋ณธ๊ฐ)๋ก ์ค์ ํ์ธ์
๋จ๊ณ 3: ๊ตฌ์ฑ (์ ํ ์ฌํญ)
๋ชจ๋ ์ค์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์๋ํ์ง๋ง, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค:
- ์บ์ ์ง์ ์๊ฐ (๊ธฐ๋ณธ๊ฐ: 1์๊ฐ)
- ํฌํจํ ์ต๋ ๋ต๋ณ ์ (๊ธฐ๋ณธ๊ฐ: 10)
- ์ฌ์ดํธ์ Twitter @ํธ๋ค
- ๊ธฐ๋ณธ Open Graph ์ด๋ฏธ์ง URL
- ํน์ ์คํค๋ง ํ์ฑํ/๋นํ์ฑํ
๋จ๊ณ 4: ๊ฒ์ฆ
๋งํฌ์ ์ ํ ์คํธํ์ธ์:
๊ตฌ์ฑ
| ์ค์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|
rich_microdata_enabled |
true |
ํ๋ฌ๊ทธ์ธ์ ๋ง์คํฐ ์ค์์น |
rich_microdata_cache_ttl |
3600 |
์บ์ ์ง์ ์๊ฐ (์ด) |
rich_microdata_max_answers |
10 |
QAPage ์คํค๋ง์ ์ต๋ ๋ต๋ณ ์ |
rich_microdata_include_user_stats |
true |
์ฌ์ฉ์ ํต๊ณ ํฌํจ |
rich_microdata_enable_breadcrumbs |
true |
BreadcrumbList ์คํค๋ง ์ถ๊ฐ |
rich_microdata_enable_website_schema |
true |
WebSite ์คํค๋ง ํฌํจ |
rich_microdata_twitter_site |
"" |
Twitter @์ฌ์ฉ์ ์ด๋ฆ |
rich_microdata_og_image_default |
"" |
ํด๋ฐฑ OG ์ด๋ฏธ์ง URL |
rich_microdata_debug_mode |
false |
๋๋ฒ๊ทธ ๋ก๊น ํ์ฑํ |
๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ
์ํคํ ์ฒ:
- 3์ธต ํจํด: DataExtractor โ Builders โ Coordinator
- ๋จ์ผ ์ง์ค ์์ค๋ ๋ฐ์ดํฐ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค
<head>ํ๊ทธ์<body>์ฝํ ์ธ ์ ๋ํ ๋ณ๋ ๋ ๋๋งapplication.html.erb๋ฐcrawler.html.erb๋ ์ด์์ ๋ชจ๋์ ์๋
ํ์ค ์ค์:
- Schema.org JSON-LD ์ฌ์
- Open Graph Protocol
- Twitter Cards ๋งํฌ์
- RFC 3986 (๊ตญ์ ๋ฌธ์๋ฅผ ์ํ URL ์ธ์ฝ๋ฉ)
๋ณด์:
- Guardian ๊ถํ ํ์ธ
- ๋น๊ณต๊ฐ ์ฝํ ์ธ ์๋ ์ ์ธ
- SQL ์์ค ๋ณด์ ํํฐ๋ง
- ๋๋ฝ๋ ๋ฐ์ดํฐ์ ๋ํ ์์ ํ ํด๋ฐฑ
ํธํ์ฑ:
- Discourse 2.7.0+
- Ruby 2.7+
- Discourse 3.6.0.beta3์์ ํ ์คํธ๋จ
์ค์ ์ฌ์ฉ ์์
ํ ํฝ ํ์ด์ง ๋งํฌ์ :
{
"@context": "https://schema.org",
"@type": "QAPage",
"name": "How to optimize database queries?",
"mainEntity": {
"@type": "Question",
"name": "How to optimize database queries?",
"text": "I'm experiencing slow queries...",
"answerCount": 5,
"upvoteCount": 12,
"acceptedAnswer": {
"@type": "Answer",
"text": "You should add indexes on...",
"upvoteCount": 8,
"author": {
"@type": "Person",
"name": "John Doe",
"url": "https://forum.example.com/u/john"
}
}
}
}
์นดํ ๊ณ ๋ฆฌ ํ์ด์ง ๋งํฌ์ :
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "Database Optimization",
"description": "Tips and tricks for faster queries",
"numberOfItems": 245,
"hasPart": [...]
}
์์ ํ ์์๋ USAGE.md๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ ์ฌ๋ก
๊ธฐ์ ํฌ๋ผ:
๊ฐ๋ฐ์๋ค์ Google์ ํน์ง ์ค๋ํซ๊ณผ AI ์ฝ๋ฉ ์ด์์คํดํธ๋ฅผ ํตํด ์๋ฃจ์
์ ์ฐพ์ผ๋ฉฐ, ์ ์ ํ ์ฝ๋ ์ปจํ
์คํธ๊ฐ ์ ์ง๋ฉ๋๋ค.
์ง์ ์ปค๋ฎค๋ํฐ:
๊ฒ์ ์์ง์ ํ์ ๊ณผ ํด๊ฒฐ ์ํ๊ฐ ํฌํจ๋ ๋ต๋ณ์ ํ์ํ์ฌ ๊ฐ์ฅ ์ข์ ์ฝํ
์ธ ๋ก ์ ์
๋๋ ํธ๋ํฝ์ ์ ๋ํฉ๋๋ค.
ํ ๋ก ํฌ๋ผ:
์ปค์คํ
์นด๋๋ฅผ ํตํ ์์
๋ฏธ๋์ด ๊ณต์ ๊ฐ ์ ๋ฌธ์ ์ผ๋ก ๋ณด์ด๋ฉฐ, ์ฐธ์ฌ๋๋ฅผ ๋์ด๊ณ ์ดํ๋ฅ ์ ์ค์
๋๋ค.
๊ตญ์ ์ปค๋ฎค๋ํฐ:
์๋ ์ธ์ด ๊ฐ์ง๋ ์ฌ์ฉ์๊ฐ ์ ํธํ๋ ์ธ์ด๋ก ์ฝํ
์ธ ๋ฅผ ๋ณผ ์ ์๋๋ก ํ์ฌ ์ ๊ทผ์ฑ์ ๊ฐ์ ํฉ๋๋ค.
์ ์ง๋ณด์
์ ๋ก ์ ์ง๋ณด์ ์ด์:
- ์ฝํ ์ธ ์ ๋ฐ์ดํธ ์ ์๋ ์บ์ ์๋ก ๊ณ ์นจ
- ์ค๋ฅ ์ ์๊ฐ ์น์ (์ฌ์ดํธ๊ฐ ์ ๋ ๊นจ์ง์ง ์์)
- ๋ชจ๋ํฐ๋ง์ ์ํ ํฌ๊ด์ ์ธ ๋ก๊น
- ๋ฌธ์ ํด๊ฒฐ์ ์ํ ์ ํ์ ๋๋ฒ๊ทธ ๋ชจ๋
์บ์ ๊ด๋ฆฌ (์ ํ ์ฌํญ):
# Rails console
MetaGeneratorService.clear_all_cache
MetaGeneratorService.cache_stats
๋ฌธ์ ํด๊ฒฐ
๋ฉํ ํ๊ทธ๊ฐ ํ์๋์ง ์๋ ๊ฒฝ์ฐ:
- ๊ด๋ฆฌ์ โ ํ๋ฌ๊ทธ์ธ์์ ํ๋ฌ๊ทธ์ธ์ด ํ์ฑํ๋์๋์ง ํ์ธ
- ๋ก๊ทธ ํ์ธ:
./launcher logs app | grep RichMicrodata - ์บ์ ์ ๋ฆฌ:
MetaGeneratorService.clear_all_cache
Google์์ ํ๋ถํ ์ค๋ํซ์ด ํ์๋์ง ์๋ ๊ฒฝ์ฐ:
- Google์ ์ฌํฌ๋กค๋ง ๋ฐ ์ ๋ฐ์ดํธ์ 2-4์ฃผ๊ฐ ๊ฑธ๋ฆฝ๋๋ค
- Rich Results Test๋ก ํ ์คํธ
- Search Console์์ ๊ฒ์ฆ ์ค๋ฅ ํ์ธ
์์ธํ ๋ฌธ์ ํด๊ฒฐ์ USAGE.md๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฑ๋ฅ ์งํ
- ์บ์ ํํธ์จ: ์ผ๋ฐ ํฌ๋ผ์ ๊ฒฝ์ฐ 95% ์ด์
- ์๋ต ์๊ฐ: ์บ์๋ ๊ฒฝ์ฐ 5ms ๋ฏธ๋ง, ์๋ก ์์ฑํ๋ ๊ฒฝ์ฐ ์ฝ 50ms
- ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋: ์ต์ (Redis ์ฌ์ฉ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ: ๋ฌด์ํ ์์ค (1์๊ฐ ์บ์)
๋ก๋๋งต
ํ์ฌ ๋ฒ์ : 2.0.0
์์ ํ Open Graph ๋ฐ Twitter Cards
์์ ํ Schema.org JSON-LD ์ง์
EN/RU ํ์งํ
๊ตญ์ ๋ฌธ์๋ฅผ ์ํ URL ์ธ์ฝ๋ฉ
๊ณํ:
- ์ถ๊ฐ ์ธ์ด ํฉ (ES, DE, FR)
- ๋น๋์ค ์คํค๋ง ์ง์
- ๊ณต์ง ์ฌํญ์ ์ํ ์ด๋ฒคํธ ์คํค๋ง
- ๋ง์ผํ๋ ์ด์ค ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ํ ์ ํ ์คํค๋ง
์ง์
- ์ด์: GitHub Issues
- ๋ฌธ์: README.md
- ๊ธฐ์ฌ: CONTRIBUTING.md
๋ผ์ด์ ์ค
MIT License - ๋ฌด๋ฃ ๋ฐ ์คํ ์์ค ์ํํธ์จ์ด
ํฌ๋ ๋ง
- ํ์ค: Schema.org, Open Graph Protocol, Twitter Cards
- ํ๋ซํผ: Discourse
- ์ปค๋ฎค๋ํฐ: ๋ชจ๋ ๊ธฐ์ฌ์ ๋ฐ ์ฌ์ฉ์
์ ํ ์ฌํญ: Telegram Instant View
์ ์ฅ์์๋ TELEGRAM_IV_RULES.txt์ ์์ ํ
ํ๋ฆฟ ๊ท์น์ด ํฌํจ๋์ด ์์ด ์๋ฆ๋ค์ด Telegram Instant View ํ
ํ๋ฆฟ์ ๋ง๋ค ์ ์์ต๋๋ค. ํฌ๋ผ ์ฝํ
์ธ ๋ฅผ Telegram์์ ๊ณต์ ํ๋ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅด๊ณ ๋ฐฉํด ์๋ ์ฝ๊ธฐ ๊ฒฝํ์ ์ ๊ณตํ๋ ค๋ฉด instantview.telegram.org์์ ์ด ๊ท์น์ ์ฌ์ฉํ์ธ์.
์ค๋ ๋ฐ๋ก ํฌ๋ผ์ ๊ฐ์์ฑ์ ๋ณํํ์ธ์. 5๋ถ ์ด๋ด์ ์ค์นํ๊ณ , 2-4์ฃผ ์ด๋ด์ Google์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ธ์. ![]()



