feat: Major website-creator skill update

- Reverted to Dockerfile deployment (from nixpacks)
- Created Thai legal document templates (PDPA compliant)
  - Privacy Policy template (Thai law)
  - Terms of Service template (Thai Consumer Protection Act)
- Updated cookie consent to actually block/enable cookies
- Added template folder structure
- All templates research-based from major Thai company websites

Compliance:
- Thai PDPA (Personal Data Protection Act B.E. 2562)
- Thai Consumer Protection Act
- Thai Computer Crime Act
This commit is contained in:
Kunthawat Greethong
2026-03-10 19:28:28 +07:00
parent 719edd6681
commit 107ebad97c
9 changed files with 1951 additions and 13 deletions

View File

@@ -0,0 +1,434 @@
# Multi-Channel Content Requirements Document
**Version:** 1.0
**Date:** March 2026
**Purpose:** Best practices for multi-channel marketing content generation, with emphasis on Thai language markets
---
## Table of Contents
1. [Platform Specifications](#1-platform-specifications)
2. [Thai Language Considerations](#2-thai-language-considerations)
3. [Content Templates](#3-content-templates)
4. [Repurposing Workflow](#4-repurposing-workflow)
5. [Image Requirements](#5-image-requirements)
---
## 1. Platform Specifications
### 1.1 Facebook (Organic Posts)
| Element | Limit | Best Practice |
|---------|-------|---------------|
| Post body | 63,206 chars | Keep 125-250 chars for max engagement |
| Headline (link posts) | 100 chars max | Front-load key message |
| Hashtags | 3-5 recommended | Use Thai-relevant hashtags |
| Video length | 1-240 mins | 30-90 seconds optimal |
| Image size | 1200x630 px (1.91:1) | Also support 1080x1080 |
**Thai Market Specifics:**
- Best posting times (Thailand): 12:00-13:00, 19:00-21:00
- Thai users prefer casual, relatable content
- Use Thai-language hashtags: #ไทย, #กรุงเทพ, etc.
- Engagement higher with questions in Thai
**2026 Algorithm Notes:**
- Video content (Reels) prioritized - 60% of content
- Link posts penalized (98% of viewed posts have no external links)
- Groups content receives algorithmic boost
- Meaningful engagement > vanity metrics
### 1.2 Facebook/Meta Ads
| Element | Limit | Recommended |
|---------|-------|-------------|
| Primary text | 5,000 max | 125 chars (appears before fold) |
| Headline | 40 chars | 25-40 chars optimal |
| Description | 30 chars (mobile), 90 chars (desktop) | 80-90 chars |
| CTA buttons | 18 options | Context-dependent |
**CTA Options (Thai Market):**
- เรียนรู้เพิ่มเติม (Learn More)
- สมัครเลย (Sign Up Now)
- ซื้อเลย (Shop Now)
- ดูรายละเอียด (View Details)
- ติดต่อเรา (Contact Us)
**Character Truncation:**
- Mobile: Primary text cuts off ~125 chars
- Desktop: Headline ~25 chars visible
- Always test mobile-first
### 1.3 Google Ads (Responsive Search Ads)
| Element | Limit | Best Practice |
|---------|-------|---------------|
| Headlines | 15 variations | 30 chars each |
| Descriptions | 4 variations | 90 chars each |
| Headline length | 30 chars max | Front-load keywords |
| Description length | 90 chars max | Include CTA |
**Thai Language RSA:**
- Each headline/description has separate Thai character limit
- ก (ko kai) counts as 1 character (same as English)
- Pin headlines for A/B testing
- Include Thai keywords naturally in headlines
**Ad Extensions (Required for full coverage):**
- Sitelinks: 6-8 (25 chars each)
- Callouts: 4-6 (25 chars each)
- Structured snippets: 1 header + 6 values
- Call extension: Optional
### 1.4 X/Twitter (2026)
| Element | Limit | Best Practice |
|---------|-------|---------------|
| Post length | 280 chars | 200-260 for threads |
| Thread | Up to 25 posts | 5-10 optimal |
| Hashtags | 2-3 per tweet | End of tweet |
| Media | 1 image/video per tweet | Use images for engagement |
**2026 Best Practices:**
- Hook tweet (first) must capture attention in first 50 chars
- Threads benefit from numbered tweets (1/X format)
- Punctuation and line breaks improve readability
- Questions drive engagement
- Native content (not links) prioritized
### 1.5 LinkedIn
| Element | Limit | Best Practice |
|---------|-------|---------------|
| Post body | 3,000 chars | 1,300-1,500 for reach |
| Article | Unlimited | 1,500-2,000 words |
| Hashtags | 3-5 | Industry + topical |
| Video | 10 secs - 10 mins | Short-form preferred |
**2026 Algorithm:**
- Prioritizes expertise signals (thought leadership)
- Meaningful conversations > likes
- Interest-based distribution (beyond network)
- Comments drive most reach
- First 200 chars critical for scroll-stopping
---
## 2. Thai Language Considerations
### 2.1 Character Counting
| Platform | English | Thai |
|----------|---------|------|
| Facebook post | 63,206 chars | Same (Thai chars count individually) |
| Facebook headline | 40 chars | 40 chars (ไทย = 3 chars) |
| Google Ads headline | 30 chars | 30 chars |
| Google Ads description | 90 chars | 90 chars |
| Twitter | 280 chars | 280 chars (Thai properly counts) |
**Thai Character Properties:**
- Thai script: Unicode range U+0E00-0E7F
- Each Thai character = 1 character
- No spaces between Thai words (word segmentation needed)
- PyThaiNLP recommended for word counting
### 2.2 Tone & Formality Levels
**Formal (องค์กร/บริษัท):**
- Use ครับ/ค่ะ (polite particles)
- Avoid slang
- Complete sentences
- Professional terminology
**Casual (กันเอง):**
- May omit polite particles in close-knit communities
- Use contemporary expressions
- More exclamation marks
- Emoji-friendly
**Neutral (ปกติ):**
- Standard Thai business writing
- Polite but not overly formal
- Clear and direct
### 2.3 Thai Social Media Specifics
**Platform Preferences (Thailand 2026):**
- Facebook: Most popular, all demographics
- TikTok: Highest engagement, younger audience
- LINE: Messaging + content consumption
- Instagram: Visual brands, urban
- X (Twitter): News/tech audience
**Thai-Specific Hashtags:**
- Industry: #ไทย, #กรุงเทพ, #ประเทศไทย
- Trending: Check daily trends
- Niche: Industry-specific Thai terms
**Cultural Considerations:**
- Respect for monarchy (พระมหากษัตริย์)
- Politeness valued
- Face-saving important in communication
- Relationship-building before business
---
## 3. Content Templates
### 3.1 Facebook Post Template
```json
{
"channel": "facebook",
"template": {
"hook": "Question or attention-grabbing statement (first 50 chars)",
"body": "Value proposition, 2-3 sentences max",
"cta": "Optional: question to drive comments",
"hashtags": "3-5 relevant hashtags"
},
"thai_variant": {
"hook": "คุณกำลังมองหา[problem]ใช่ไหม? 🎯",
"body": "[solution] ช่วยคุณได้[benefit]\n\n#hashtag1 #hashtag2 #hashtag3"
}
}
```
### 3.2 Facebook Ads Template
```json
{
"channel": "facebook_ads",
"template": {
"primary_text": {
"structure": "[Hook - problem/question]\\n\\n[Solution - your offer]\\n\\n[CTA]",
"length": "125 chars recommended",
"thai_example": "กำลังมองหาวิธี[solution]?\\n\\nเราช่วยคุณได้[benefit]\\n\\nสมัครเลย!"
},
"headline": {
"structure": "[Benefit or solution focused]",
"length": "25-40 chars",
"thai_example": "แก้ปัญหา[problem] ด้วย[product]"
},
"description": {
"structure": "[Additional detail + urgency]",
"length": "80-90 chars",
"thai_example": "เริ่มต้น[free_trial] วันนี้ ลองก่อนตัดสินใจ"
}
}
}
```
### 3.3 Google Ads Template
```json
{
"channel": "google_ads",
"responsive_search_ad": {
"headlines": [
{"text": "[Primary keyword] - [Benefit]", "pin": false},
{"text": "[Brand] | [Primary keyword]", "pin": false},
{"text": "[Solution] สำหรับ [Audience]", "pin": false},
{"text": "[Number] เหตุผลที่เลือก [Brand]", "pin": false},
{"text": "[Urgency]: [Offer]", "pin": false}
],
"descriptions": [
{"text": "[Detailed benefit + CTA]"},
{"text": "[Social proof + link]"}
],
"thai_headlines": [
"บริการ[Product] คุณภาพสูง",
"ราคาพิเศษ สั่งซื้อเลย",
"[Brand] ผู้เชี่ยวชาญ[Industry]",
"ส่งเร็ว ทั่วประเทศไทย",
"รีวิวดี ลูกค้าพึงพอใจ"
]
}
}
```
### 3.4 X/Twitter Thread Template
```json
{
"channel": "x",
"thread_template": {
"hook": {
"content": "Stop-scrolling statement or question",
"length": "200-250 chars",
"thai_example": "🔥 [Stat/Claim] ที่[Audience] ทุกคนต้องรู้"
},
"body": {
"structure": "1-8 tweets, each making 1 point",
"format": "Numbered points (1/, 2/, etc.)",
"engagement": "Questions, counters, strong opinions"
},
"cta": {
"content": "Final tweet with CTA",
"thai_example": "ถ้าชอบบทความนี้ follow ด้วยนะครับ ✓\n\n[Link]"
}
}
}
```
### 3.5 LinkedIn Post Template
```json
{
"channel": "linkedin",
"post_template": {
"hook": {
"structure": "Personal story or controversial take",
"length": "First 200 chars critical",
"thai_example": "ผมเพิ่ง[experience] และได้เรียนรู้ว่า..."
},
"body": {
"structure": "2-3 paragraphs, mixed sentence lengths",
"expert_signals": "Include data, credentials, specific examples",
"engagement": "Questions for comments"
},
"cta": {
"structure": "Soft CTA, not salesy",
"thai_example": "คุณคิดเห็นอย่างไร? แชร์ประสบการณ์ของคุณได้เลยครับ"
},
"hashtags": {
"structure": "3-5 hashtags",
"format": "[Industry] + [Topic] + [Thailand optional]"
}
}
}
```
---
## 4. Repurposing Workflow
### 4.1 Blog to Multi-Channel Flow
```
Blog Post (2000-3000 words)
┌─────────────────────────────────────────┐
│ Extract Key Points (10-15 insights) │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Content Atomization │
├─────────────────────────────────────────┤
│ • Statistics → Infographic │
│ • Tips → Carousel slides │
│ • Quotes → Single images │
│ • Steps → Thread │
│ • How-to → Video │
└─────────────────────────────────────────┘
┌─────────────────────────────────────────┐
│ Channel Distribution │
├─────────────────────────────────────────┤
│ Facebook: 1 post + 1-2 ads │
│ X: 5-10 tweet thread │
│ LinkedIn: 1-2 posts │
│ Google Ads: 15 headlines + 4 desc │
│ Blog: Original (if not published) │
└─────────────────────────────────────────┘
```
### 4.2 Content Repurposing Matrix
| Original Content | Facebook | Facebook Ads | Google Ads | X Thread | LinkedIn |
|------------------|----------|--------------|------------|----------|----------|
| How-to article | Carousel post | Primary text | Headlines | Step-by-step thread | How-to post |
| Listicle | Image posts | Headline focus | List keywords | Numbered tweets | Summary post |
| Data/Statistics | Infographic | Stat in primary | Numbers in headlines | Key stats thread | Data-driven post |
| Product review | Video + text | Benefit-driven | Brand keywords | Comparison thread | Review post |
### 4.3 Repurposing Best Practices
1. **Start with the longest format:** Blog post (SEO value)
2. **Extract before adapting:** Pull key points first
3. **Platform-native:** Don't just copy-paste; adapt format
4. **Consistent messaging, varied hooks:** Same value, different angles
5. **Timing matters:** Stagger posts, don't dump all at once
---
## 5. Image Requirements
### 5.1 Platform Image Specs
| Platform | Aspect Ratio | Dimensions | Format | Notes |
|----------|--------------|------------|--------|-------|
| Facebook Feed | 1.91:1, 1:1 | 1200x630, 1080x1080 | JPG, PNG | 1:1 growing preference |
| Facebook Stories | 9:16 | 1080x1920 | JPG, PNG | Full screen |
| Instagram Feed | 1:1, 4:5, 1.91:1 | 1080x1080, 1080x1350, 1080x566 | JPG, PNG | 4:5 gets more space |
| Instagram Stories | 9:16 | 1080x1920 | JPG, PNG | |
| X/Twitter | 16:9, 1:1 | 1200x675, 1080x1080 | JPG, PNG | Cards: 800x418 |
| LinkedIn | 1.91:1, 1:1 | 1200x627, 1080x1080 | JPG, PNG | |
| Google Ads | 1.91:1 | 1200x628 | JPG, PNG | |
### 5.2 Text Overlay Guidelines
| Platform | Text % | Best Practice |
|----------|--------|---------------|
| Facebook | <20% | Avoid heavy text, use as accent |
| Instagram | <20% | Text can be more prominent in stories |
| Google Ads | <20% | Google may reject >20% text |
| LinkedIn | <20% | Professional, minimal text |
### 5.3 Thai-Optimized Image Tips
- **Use Thai text sparingly:** English + numbers more readable
- **If Thai text needed:** Bold, large, high contrast
- **Cultural elements:** Thai-friendly aesthetics, Bangkok/Thai contexts
- **Colors:** Red/white (Thai flag colors) for local relevance
- **People:** Thai models/faces increase relatability
---
## Appendix: AI Content Humanization
### Avoiding Robotic Patterns
**Common AI Mistakes:**
- Overuse of transition words (furthermore, additionally)
- Generic openings (In today's world, It's important to note)
- Perfectly structured paragraphs
- Lack of specific examples
- No personal voice or opinion
**Humanization Techniques:**
1. **Vary sentence structure:** Mix short punchy + longer flowing
2. **Add specific details:** Names, dates, real examples
3. **Include opinions/takes:** "Here's what I think..."
4. **Use contractions:** Don't → don't (when appropriate for tone)
5. **Rhetorical questions:** Engage reader directly
6. **Cultural references:** Thai context, local examples
7. **Imperfections OK:** Occasionally fragment sentences
8. **Active voice:** Most of the time
**Thai-Specific:**
- Add Thai idioms (สำนวน) appropriately
- Use casual markers (ครับ/ค่ะ) correctly
- Reference Thai current events
- Include Thai-specific examples
---
## References
- Meta Business Help Center - Ad Formats
- Google Ads Help - Responsive Search Ads
- Twitter/X Business - Best Practices
- LinkedIn Marketing Solutions - Content Guidelines
- Sprinklr Social Media Benchmarks 2026
- Thai Digital Marketing Association
- DataReportal Digital 2026 Thailand
---
*Document maintained for OpenCode SEO Multi-Channel Skill*