showme-studio 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/install.js +41 -0
- package/package.json +17 -0
- package/skills/agent-blog/SKILL.md +169 -0
- package/skills/agent-course-outline/SKILL.md +115 -0
- package/skills/agent-fbpost/SKILL.md +122 -0
- package/skills/agent-image/SKILL.md +106 -0
- package/skills/agent-landingpage/SKILL.md +159 -0
- package/skills/agent-landingpage/refs/cta.md +155 -0
- package/skills/agent-landingpage/refs/sections.md +196 -0
- package/skills/agent-landingpage/refs/vepa-cle.md +138 -0
- package/skills/agent-launch-campaign/SKILL.md +131 -0
- package/skills/agent-onboarding/SKILL.md +144 -0
- package/skills/agent-platform/SKILL.md +232 -0
- package/skills/agent-seo/SKILL.md +145 -0
- package/skills/agent-title/SKILL.md +150 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-launch-campaign
|
|
3
|
+
description: "Lên kế hoạch chiến dịch ra mắt sản phẩm/khoá học, dựa trên Product Launch Formula (Jeff Walker) và Soap Opera Sequence (Russell Brunson) — cảm xúc/câu chuyện thật trước, thuyết phục/offer sau. Kết hợp cấu trúc bài launch giọng thật của SHOWME."
|
|
4
|
+
argument-hint: "[sản phẩm/khoá học muốn ra mắt, hoặc subcommand: prelaunch | launchday]"
|
|
5
|
+
version: "1.1.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /agent-launch-campaign — Lên Kế Hoạch Ra Mắt Sản Phẩm
|
|
9
|
+
|
|
10
|
+
Sai lầm phổ biến: ra mắt bằng đúng 1 bài đăng "hôm nay mở bán". Product Launch Formula (Jeff Walker) chỉ ra ra mắt hiệu quả là một chuỗi, không phải 1 bài — người xem cần được cho giá trị và xây kỳ vọng trước khi thấy lời chào mua.
|
|
11
|
+
|
|
12
|
+
2 nguyên tắc gốc xuyên suốt:
|
|
13
|
+
|
|
14
|
+
- **Value Before Reveal** — cho giá trị thật trước, chưa vội nói "mua đi"
|
|
15
|
+
- **Desire Before Availability** — xây mong muốn trước khi sản phẩm mở bán, không phải mở bán rồi mới thuyết phục
|
|
16
|
+
|
|
17
|
+
Toàn bộ chuỗi chia làm 2 pha rõ rệt — **cảm xúc trước, thuyết phục sau**:
|
|
18
|
+
|
|
19
|
+
- **Pha Cảm xúc** (Pre-Prelaunch + 3 nội dung Prelaunch): dùng **Soap Opera Sequence** (Russell Brunson) — kể một câu chuyện thật theo 4 nhịp cảm xúc, chưa chào bán: bối cảnh quen thuộc → kịch tính/nỗi đau → khoảnh khắc giác ngộ → lợi ích bất ngờ. Người đọc cần thấy mình trong câu chuyện trước khi sẵn sàng nghe lời chào mua
|
|
20
|
+
- **Pha Thuyết phục** (Launch Day): nhịp thứ 5 của Soap Opera Sequence — thúc giục hành động, đây là nơi duy nhất được đẩy CTA rõ ràng
|
|
21
|
+
|
|
22
|
+
Không đảo ngược thứ tự: chưa kể xong câu chuyện cảm xúc thì chưa mở bán, và Launch Day không lặp lại nội dung giáo dục đã cho ở Pha Cảm xúc — chỉ tập trung thuyết phục + CTA.
|
|
23
|
+
|
|
24
|
+
## Routing
|
|
25
|
+
|
|
26
|
+
| Input | Hành động |
|
|
27
|
+
|---|---|
|
|
28
|
+
| _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
|
|
29
|
+
| sản phẩm/khoá học cụ thể | Chạy **Full Flow**: Pre-Prelaunch → Prelaunch (3 nội dung) → Launch Day |
|
|
30
|
+
| `prelaunch [sản phẩm]` | Chỉ chạy 3 nội dung Prelaunch |
|
|
31
|
+
| `launchday [sản phẩm]` | Chỉ chạy bài Launch Day (dùng chung cấu trúc với `/agent-fbpost launch`) |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Full Flow
|
|
36
|
+
|
|
37
|
+
### Giai đoạn 1 — Pre-Prelaunch (xây kỳ vọng, 3-7 ngày trước)
|
|
38
|
+
|
|
39
|
+
**Soap Opera Sequence — Nhịp 1: Bối cảnh quen thuộc.** Chưa có kịch tính, chỉ cho người đọc thấy mình trong đó.
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
Tôi sắp ra mắt: [sản phẩm/khoá học]
|
|
43
|
+
|
|
44
|
+
Hãy giúp tôi viết 1-2 bài "hé lộ nhẹ" đăng trước ngày mở bán, theo tinh
|
|
45
|
+
thần: không nói rõ đó là gì, chỉ tạo cảm giác "có gì đó đang được chuẩn bị".
|
|
46
|
+
|
|
47
|
+
Mở bằng một bối cảnh/tình huống đời thường mà đúng người đọc mục tiêu
|
|
48
|
+
sẽ thấy mình trong đó (không phải kịch tính, chỉ là "à, đúng là mình
|
|
49
|
+
hay gặp cảnh này") — kể một quan sát/trải nghiệm gần đây đang dẫn tới
|
|
50
|
+
quyết định làm sản phẩm này, chưa nhắc tên sản phẩm hay giá.
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Giai đoạn 2 — Prelaunch: 3 nội dung giá trị (đăng cách nhau vài ngày)
|
|
54
|
+
|
|
55
|
+
Đăng tuần tự, mỗi nội dung cách nhau vài ngày để giữ nhịp chờ đợi. 3 nội dung này lần lượt đi qua nhịp 2, 3, 4 của Soap Opera Sequence — vẫn là Pha Cảm xúc, chưa chào bán.
|
|
56
|
+
|
|
57
|
+
**Nội dung 1 — Kịch tính/nỗi đau & lối mở (SOS nhịp 2 + đầu nhịp 3)**
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
Viết nội dung Prelaunch #1 cho [sản phẩm]. Mục tiêu:
|
|
61
|
+
|
|
62
|
+
1. Nói rõ "bức tường" đã chặn đường — nỗi đau/khó khăn thật đã gặp,
|
|
63
|
+
những gì đã thử mà không hiệu quả, sự thất vọng thật (không phóng
|
|
64
|
+
đại, không kịch hoá giả tạo)
|
|
65
|
+
2. Sau đó mới hé lộ ý tưởng lớn đằng sau sản phẩm — tiềm năng nó mang
|
|
66
|
+
lại, vì sao điều này quan trọng với người đọc ngay bây giờ
|
|
67
|
+
|
|
68
|
+
Chưa bán, chỉ mở ra khả năng mới sau khi đã thừa nhận nỗi đau thật.
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Nội dung 2 — Khoảnh khắc giác ngộ & bằng chứng (SOS nhịp 3 + đầu nhịp 4)**
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
Viết nội dung Prelaunch #2 cho [sản phẩm]. Mục tiêu:
|
|
75
|
+
|
|
76
|
+
1. Kể lại đúng khoảnh khắc phát hiện ra cách làm khác — chuyện gì cụ
|
|
77
|
+
thể đã xảy ra khiến góc nhìn thay đổi, không nói chung chung
|
|
78
|
+
2. Chủ động nói ra những nghi ngờ/phản đối phổ biến người đọc có thể
|
|
79
|
+
có (giá, thời gian, liệu có hợp với mình không), trả lời thẳng thắn.
|
|
80
|
+
Nếu có case thật/phản hồi trước đó, đưa vào làm bằng chứng
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Nội dung 3 — Lợi ích bất ngờ & bước tiếp theo (SOS nhịp 4)**
|
|
84
|
+
|
|
85
|
+
```text
|
|
86
|
+
Viết nội dung Prelaunch #3 cho [sản phẩm]. Mục tiêu: dạy một phần thật
|
|
87
|
+
sự hữu ích (không giữ lại), cho người đọc thấy lợi ích cụ thể mà có
|
|
88
|
+
thể họ không ngờ tới khi mới nghe ý tưởng ban đầu, rồi hé lộ ngày mở
|
|
89
|
+
bán sắp tới.
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Giai đoạn 3 — Launch Day (mở bán)
|
|
93
|
+
|
|
94
|
+
**Soap Opera Sequence — Nhịp 5: Thúc giục hành động.** Đây là điểm chuyển từ Pha Cảm xúc sang Pha Thuyết phục — toàn bộ câu chuyện đã kể ở Giai đoạn 1-2 giờ dẫn tới lời chào mua rõ ràng.
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
Viết bài mở bán cho [sản phẩm], dùng cấu trúc bài launch:
|
|
98
|
+
|
|
99
|
+
Mở bằng mong muốn lâu nay.
|
|
100
|
+
Nói nỗi khó thật.
|
|
101
|
+
Kể lại điều vừa xảy ra / trải nghiệm gần đây.
|
|
102
|
+
Mở rộng khả năng mới.
|
|
103
|
+
Chặn hiểu lầm (không phải làm đại trà, công nghiệp giống nhau).
|
|
104
|
+
Đặt niềm tin: có hồn, có bản sắc, là mình.
|
|
105
|
+
Giới thiệu chương trình.
|
|
106
|
+
Nói rõ đầu ra.
|
|
107
|
+
Nói điều kiện, lịch, học phí, ưu đãi.
|
|
108
|
+
Nói quà tặng nếu có.
|
|
109
|
+
Kết bằng triết lý SHOWME.
|
|
110
|
+
CTA inbox.
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Có thể chạy trực tiếp `/agent-fbpost launch [sản phẩm]` cho bước này — dùng chung 1 cấu trúc.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Nguyên tắc
|
|
118
|
+
|
|
119
|
+
- Cảm xúc trước, thuyết phục sau — không đảo ngược thứ tự 5 nhịp Soap Opera Sequence, không chào bán khi câu chuyện chưa kể xong
|
|
120
|
+
- Không mở bán ngay từ bài đầu tiên — luôn có ít nhất 2-3 nội dung giá trị trước Launch Day
|
|
121
|
+
- Nội dung Prelaunch phải cho giá trị thật và cảm xúc thật (nỗi đau/khoảnh khắc giác ngộ là chuyện có thật đã xảy ra), không phải teaser rỗng hay kịch hoá giả tạo chỉ để câu tương tác
|
|
122
|
+
- Chủ động nói ra phản đối/nghi ngờ trước khi người đọc tự nghĩ ra và bỏ qua
|
|
123
|
+
- Launch Day là nơi duy nhất được đẩy CTA rõ ràng — các bài trước không CTA mua
|
|
124
|
+
- Áp cùng nguyên tắc giọng văn SHOWME: minh bạch giá, không hook giả, không sáo rỗng
|
|
125
|
+
|
|
126
|
+
## Files
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
agent-launch-campaign/
|
|
130
|
+
└── SKILL.md — router + Soap Opera Sequence (Pha Cảm xúc) + Launch Day (Pha Thuyết phục), theo Product Launch Formula (file này)
|
|
131
|
+
```
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-onboarding
|
|
3
|
+
description: "Khai thác context dự án và giọng văn cá nhân qua hội thoại hoặc phân tích bài viết mẫu, rồi tự tổng hợp thành CLAUDE.md hoàn chỉnh. Chạy đầu tiên, trước mọi agent khác trong bộ Showme Studio."
|
|
4
|
+
argument-hint: "[(empty) để bắt đầu hội thoại, hoặc subcommand: samples | interview | summary]"
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /agent-onboarding — Dựng CLAUDE.md Từ Context Thật
|
|
9
|
+
|
|
10
|
+
Đa số người dùng khó tự mô tả giọng văn của mình bằng lời (tự nhận ra giọng mình khó hơn tự nhận ra giọng người khác). Agent này giải quyết bằng 2 cách song song: hỏi trực tiếp về bối cảnh dự án, và phân tích bài viết mẫu có sẵn thay vì bắt khách tự mô tả giọng văn trừu tượng.
|
|
11
|
+
|
|
12
|
+
Nền tảng: phân biệt **Voice** và **Tone** (Mailchimp Content Style Guide) — Voice là giọng cố định, giữ nguyên xuyên suốt mọi bài viết (con người thật của bạn). Tone là cách giọng đó thể hiện ra tuỳ ngữ cảnh — bài dạy khác bài thông báo, khác bài ra mắt. CLAUDE.md cần ghi rõ cả hai, không gộp chung.
|
|
13
|
+
|
|
14
|
+
## Routing
|
|
15
|
+
|
|
16
|
+
| Input | Hành động |
|
|
17
|
+
|---|---|
|
|
18
|
+
| _(empty)_ hoặc `help` | Bắt đầu **Full Flow** — hội thoại dẫn dắt qua 4 bước |
|
|
19
|
+
| `samples` | Chỉ chạy bước phân tích bài viết mẫu để rút Voice Profile |
|
|
20
|
+
| `interview` | Chỉ chạy bước phỏng vấn khi chưa có bài viết mẫu nào |
|
|
21
|
+
| `summary` | Tổng hợp câu trả lời đã có (từ các bước trước) thành CLAUDE.md hoàn chỉnh |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Full Flow
|
|
26
|
+
|
|
27
|
+
### Bước 1 — Bối cảnh dự án
|
|
28
|
+
|
|
29
|
+
Hỏi từng câu một, không hỏi dồn hết một lúc:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
1. Bạn đang làm/bán gì? (sản phẩm, dịch vụ, hoặc chuyên môn đang chia sẻ)
|
|
33
|
+
2. Ai là người đọc/khách hàng chính? Họ đang vướng gì?
|
|
34
|
+
3. Dùng agent này để làm gì là chính — viết blog đều hơn, ra bài SEO,
|
|
35
|
+
đăng Facebook, hay chuẩn bị ra mắt sản phẩm?
|
|
36
|
+
4. Giai đoạn hiện tại của dự án là gì? (mới bắt đầu, đã có khách,
|
|
37
|
+
sắp ra mắt sản phẩm mới...)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Tóm tắt lại thành đoạn ngắn để khách xác nhận trước khi qua bước 2.
|
|
41
|
+
|
|
42
|
+
### Bước 2 — Rút Voice Profile (2 cách, chọn 1)
|
|
43
|
+
|
|
44
|
+
**Cách A — Có bài viết cũ (ưu tiên, chính xác hơn tự mô tả)**
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
Hãy dán 2-3 bài viết bạn từng viết (blog, Facebook, email — loại nào
|
|
48
|
+
cũng được, miễn là do chính bạn viết, không phải AI viết hộ).
|
|
49
|
+
|
|
50
|
+
Tôi sẽ phân tích và rút ra:
|
|
51
|
+
- Độ dài câu trung bình, câu ngắn hay dài
|
|
52
|
+
- Cách mở bài thường dùng (vào thẳng vấn đề, kể chuyện, đặt câu hỏi...)
|
|
53
|
+
- Từ/cụm từ hay lặp lại
|
|
54
|
+
- Cách kết bài
|
|
55
|
+
- Điều bạn có xu hướng tránh (ví dụ: không dùng từ to tát, không
|
|
56
|
+
viết câu cảm thán)
|
|
57
|
+
|
|
58
|
+
Sau đó tôi tóm tắt thành Voice Profile 4-5 dòng để bạn xác nhận
|
|
59
|
+
đúng là giọng của bạn không.
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Cách B — Chưa có bài viết nào (dùng phỏng vấn)**
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
Chưa có bài mẫu thì trả lời nhanh các câu sau, trả lời bằng bản năng,
|
|
66
|
+
không cần nghĩ quá kỹ:
|
|
67
|
+
|
|
68
|
+
1. Khi giải thích điều gì đó cho bạn bè, bạn hay nói dài dòng hay
|
|
69
|
+
đi thẳng vào ý chính?
|
|
70
|
+
2. Bạn ghét đọc kiểu văn viết nào nhất? (sáo rỗng, khô khan, quá
|
|
71
|
+
nhiều thuật ngữ, quá "cố tỏ ra vui vẻ"...)
|
|
72
|
+
3. Có câu/cụm từ nào bạn hay dùng khi nói chuyện đời thường, mà
|
|
73
|
+
muốn giữ cả khi viết?
|
|
74
|
+
4. Có điều gì bạn nhất định không muốn xuất hiện trong bài viết
|
|
75
|
+
của mình? (ví dụ: CTA ép mua, viết hoa tuỳ tiện, nói quá về
|
|
76
|
+
sản phẩm)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Bước 3 — Người viết truyền cảm hứng (tuỳ chọn)
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
Có ai bạn hay đọc và thích cách họ viết không? (không nhất thiết
|
|
83
|
+
cùng ngành)
|
|
84
|
+
|
|
85
|
+
Nếu có, hãy nói tên hoặc dán 1 đoạn viết của họ mà bạn thích. Tôi sẽ
|
|
86
|
+
chỉ ra cụ thể điều gì ở cách viết đó đáng học — ví dụ: cách vào bài,
|
|
87
|
+
cách dùng ví dụ, độ dài đoạn văn — để tham khảo kỹ thuật, không phải
|
|
88
|
+
để sao chép giọng của họ. Giọng cuối cùng vẫn phải là giọng bạn ở
|
|
89
|
+
Bước 2.
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Bước 4 — Tone theo ngữ cảnh + tổng hợp CLAUDE.md
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
Voice của bạn giữ nguyên, nhưng Tone (cách thể hiện) nên khác nhau
|
|
96
|
+
tuỳ loại bài. Hãy xác nhận nhanh:
|
|
97
|
+
|
|
98
|
+
- Bài dạy/chia sẻ kiến thức: tông muốn ra sao? (điềm tĩnh, chắc chắn...)
|
|
99
|
+
- Bài thông báo/khoe sản phẩm: tông muốn ra sao? (hào hứng nhưng
|
|
100
|
+
không quá đà...)
|
|
101
|
+
- Bài ra mắt/bán hàng: tông muốn ra sao? (tin tưởng, rõ ràng,
|
|
102
|
+
không ép buộc...)
|
|
103
|
+
|
|
104
|
+
Từ tất cả thông tin đã thu thập (Bước 1-4), hãy tổng hợp thành file
|
|
105
|
+
CLAUDE.md hoàn chỉnh theo đúng format:
|
|
106
|
+
|
|
107
|
+
# Giọng văn của tôi
|
|
108
|
+
|
|
109
|
+
## Tôi là ai
|
|
110
|
+
[từ Bước 1]
|
|
111
|
+
|
|
112
|
+
## Đối tượng đọc chính
|
|
113
|
+
[từ Bước 1]
|
|
114
|
+
|
|
115
|
+
## Cách tôi thường nói
|
|
116
|
+
[Voice Profile từ Bước 2, có thể thêm điều học được từ Bước 3]
|
|
117
|
+
|
|
118
|
+
## Tone theo loại bài
|
|
119
|
+
[từ Bước 4 — liệt kê rõ tông cho từng loại bài]
|
|
120
|
+
|
|
121
|
+
## Điều tôi không muốn
|
|
122
|
+
[từ Bước 2]
|
|
123
|
+
|
|
124
|
+
## Bối cảnh đang làm
|
|
125
|
+
[từ Bước 1]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Lưu file này vào thư mục làm việc, tên `CLAUDE.md`. Từ phiên sau, mọi agent khác trong bộ Showme Studio tự đọc file này.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Nguyên tắc
|
|
133
|
+
|
|
134
|
+
- Ưu tiên phân tích bài viết mẫu thật hơn để khách tự mô tả trừu tượng — con người thường không tự nhận ra giọng của chính mình
|
|
135
|
+
- Người viết truyền cảm hứng chỉ để học kỹ thuật cụ thể, không phải để giọng cuối cùng giống hệt người đó
|
|
136
|
+
- Tone thay đổi theo ngữ cảnh, Voice thì không — không gộp hai khái niệm này làm một khi viết CLAUDE.md
|
|
137
|
+
- Nếu khách trả lời sơ sài ở bước nào, hỏi lại 1 câu cụ thể hơn thay vì tự bịa cho đủ
|
|
138
|
+
|
|
139
|
+
## Files
|
|
140
|
+
|
|
141
|
+
```
|
|
142
|
+
agent-onboarding/
|
|
143
|
+
└── SKILL.md — router + 4 bước dựng CLAUDE.md (file này)
|
|
144
|
+
```
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-platform
|
|
3
|
+
description: "Đăng bài blog (kèm ảnh) lên WordPress, Emdash hoặc Wix. Hướng dẫn lấy thông tin kết nối nền tảng, ghi vào file cấu hình _platforms/{nền tảng}.json, rồi đăng qua MCP/API. Đọc nội dung từ noi-dung/4-approved/{slug}/blog.md và ảnh trong images/, chuyển thư mục sang 5-published/ và cập nhật _context/published-index.md sau khi đăng."
|
|
4
|
+
argument-hint: "[slug bài viết muốn đăng, hoặc subcommand: connect | wordpress | emdash | wix]"
|
|
5
|
+
version: "1.3.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /agent-platform — Đăng Bài Lên Nền Tảng
|
|
9
|
+
|
|
10
|
+
Agent lo bước cuối cùng: lấy nội dung đã duyệt trong `noi-dung/4-approved/{slug}/` (xem quy ước tại `agents/README.md` mục "Cấu trúc thư mục nội dung — quản lý kiểu Kanban") và đăng lên nền tảng blog thật — WordPress, Emdash, hoặc Wix — thông qua MCP hoặc REST API đã kết nối trên máy. Agent này không viết nội dung, không tạo ảnh — chỉ đưa nội dung đã có (`blog.md` + `images/`) lên nền tảng, rồi chuyển cả thư mục bài viết sang `noi-dung/5-published/{slug}/` và ghi thêm 1 dòng vào `noi-dung/_context/published-index.md` sau khi đăng thật thành công. Bài Facebook (`fbpost.md`) đăng thủ công, ngoài phạm vi agent này.
|
|
11
|
+
|
|
12
|
+
Mỗi nền tảng có 1 file cấu hình riêng trong `_platforms/{nền tảng}.json` (site URL, cách xác thực, quy tắc format) — `connect` tạo file này 1 lần, các subcommand đăng bài sau đọc lại từ đó thay vì hỏi lại mỗi lần.
|
|
13
|
+
|
|
14
|
+
## Routing
|
|
15
|
+
|
|
16
|
+
| Input | Hành động |
|
|
17
|
+
|---|---|
|
|
18
|
+
| _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
|
|
19
|
+
| `connect [nền tảng]` | Hướng dẫn kết nối + tạo `_platforms/{nền tảng}.json` — chạy trước khi đăng lần đầu trên mỗi site |
|
|
20
|
+
| `wordpress [slug]` | Đăng bài trong `noi-dung/4-approved/[slug]/` lên WordPress |
|
|
21
|
+
| `emdash [slug]` | Đăng bài lên Emdash |
|
|
22
|
+
| `wix [slug]` | Đăng bài lên Wix |
|
|
23
|
+
|
|
24
|
+
Chỉ đăng bài đang ở `4-approved/` — nếu `[slug]` đang ở stage khác (`1-ideas`, `2-drafting`, `3-review`), báo user bài chưa được duyệt, không tự đăng.
|
|
25
|
+
|
|
26
|
+
Nếu chưa rõ đang dùng nền tảng nào, hỏi user trước khi chạy bất kỳ subcommand nào. Trước khi đăng, kiểm tra `_platforms/{nền tảng}.json` đã tồn tại chưa — nếu chưa, chạy `connect` trước.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Subcommand: `connect` — Kết nối nền tảng (làm 1 lần cho mỗi site)
|
|
31
|
+
|
|
32
|
+
Trước khi hướng dẫn lấy thông tin kết nối, kiểm tra xem đã có MCP server phù hợp cấu hình sẵn chưa (WordPress MCP, MCP riêng theo site Emdash, hoặc Wix connector) — nếu có, ưu tiên dùng MCP thay vì gọi REST API trực tiếp bằng curl.
|
|
33
|
+
|
|
34
|
+
**Nguyên tắc chung khi tạo `_platforms/{nền tảng}.json`:** file này chỉ chứa cấu hình (site URL, tên MCP server, quy tắc format, scope quyền cần có) — **không bao giờ ghi token/password thật vào file này.** Token thật lưu trong biến môi trường hoặc trình quản lý secret riêng của máy, file JSON chỉ ghi *cách lấy* token đó.
|
|
35
|
+
|
|
36
|
+
### WordPress
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
Để đăng bài lên WordPress qua REST API (nếu chưa có MCP WordPress), cần:
|
|
40
|
+
|
|
41
|
+
1. Đăng nhập WordPress admin → Users → Profile (hồ sơ của chính bạn)
|
|
42
|
+
2. Kéo xuống mục "Application Passwords"
|
|
43
|
+
3. Đặt tên bất kỳ (ví dụ "Claude Agent"), bấm "Add New Application Password"
|
|
44
|
+
4. Copy password hiện ra (chỉ hiện đúng 1 lần, dạng "xxxx xxxx xxxx xxxx")
|
|
45
|
+
5. Ghi lại thêm: URL site và username đăng nhập
|
|
46
|
+
|
|
47
|
+
Lưu username + application password vào biến môi trường hoặc CLAUDE.md
|
|
48
|
+
cá nhân (không public, không commit git). Tạo _platforms/wordpress.json:
|
|
49
|
+
|
|
50
|
+
{
|
|
51
|
+
"platform": "wordpress",
|
|
52
|
+
"site_url": "https://your-domain.com",
|
|
53
|
+
"api_base": "https://your-domain.com/wp-json/wp/v2",
|
|
54
|
+
"format": { "input": "html", "note": "REST API nhận HTML, chuyển Markdown sang HTML trước khi gửi" },
|
|
55
|
+
"authentication": {
|
|
56
|
+
"type": "application-password",
|
|
57
|
+
"header": "Authorization: Basic base64(username:application_password)",
|
|
58
|
+
"note": "Tạo tại Users → Profile → Application Passwords"
|
|
59
|
+
},
|
|
60
|
+
"featured_image": { "field": "featured_media", "upload_endpoint": "/media" },
|
|
61
|
+
"publish": { "default_status": "draft" }
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Emdash
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
Emdash xác thực bằng Personal Access Token (PAT), không dùng OAuth:
|
|
69
|
+
|
|
70
|
+
1. Vào {site_url}/_emdash → Settings → API Tokens
|
|
71
|
+
2. Tạo token mới, chọn đủ scope: content:read, content:write,
|
|
72
|
+
media:read, media:write, taxonomies:manage
|
|
73
|
+
3. Copy token (dạng "ec_pat_...", chỉ hiện 1 lần)
|
|
74
|
+
|
|
75
|
+
Lưu token vào biến môi trường hoặc CLAUDE.md cá nhân (không public,
|
|
76
|
+
không commit git). Tạo _platforms/emdash.json:
|
|
77
|
+
|
|
78
|
+
{
|
|
79
|
+
"platform": "emdash",
|
|
80
|
+
"site_url": "https://your-domain.com",
|
|
81
|
+
"admin_url": "https://your-domain.com/_emdash",
|
|
82
|
+
"mcp_endpoint": "https://your-domain.com/_emdash/api/mcp",
|
|
83
|
+
"mcp_server_name": "ten-mcp-server-da-cau-hinh-trong-claude-code",
|
|
84
|
+
"content_collection": "posts",
|
|
85
|
+
"format": { "input": "markdown", "note": "Emdash nhận Markdown trực tiếp, không cần chuyển sang Ricos JSON" },
|
|
86
|
+
"authentication": {
|
|
87
|
+
"type": "personal-access-token",
|
|
88
|
+
"token_format": "ec_pat_*",
|
|
89
|
+
"header": "Authorization: Bearer ec_pat_YOUR_TOKEN",
|
|
90
|
+
"scopes_needed": ["content:read", "content:write", "media:read", "media:write", "taxonomies:manage"]
|
|
91
|
+
},
|
|
92
|
+
"featured_image": { "field": "featured_image", "note": "Set qua field riêng, không chèn vào đầu nội dung body" },
|
|
93
|
+
"mcp_tools": {
|
|
94
|
+
"create_post": "content.create (collection: posts)",
|
|
95
|
+
"publish_post": "content.publish",
|
|
96
|
+
"update_post": "content.update",
|
|
97
|
+
"schedule_post": "content.schedule"
|
|
98
|
+
},
|
|
99
|
+
"publish": { "default_status": "draft" }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
Nếu MCP server (dạng mcp__{ten-site}__content_create...) đã có sẵn
|
|
103
|
+
trong danh sách tool, dùng MCP thay vì gọi thẳng mcp_endpoint bằng curl.
|
|
104
|
+
Gọi thử content_list/content.list trước để xác nhận kết nối trước khi
|
|
105
|
+
đăng bài thật.
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Wix
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
Wix kết nối qua Wix connector (OAuth), không dùng API key thủ công:
|
|
112
|
+
|
|
113
|
+
1. Nếu dùng claude.ai/Claude Desktop: mở phần cài đặt Connectors,
|
|
114
|
+
thêm Wix, đăng nhập tài khoản Wix để cấp quyền
|
|
115
|
+
2. Nếu dùng Claude Code CLI: cần MCP server Wix đã cấu hình sẵn trong
|
|
116
|
+
môi trường — hỏi người hỗ trợ cài đặt nếu chưa quen việc này
|
|
117
|
+
3. Sau khi kết nối, lấy site ID (gọi danh sách site qua MCP, ví dụ
|
|
118
|
+
ListWixSites) để xác nhận đúng site cần đăng
|
|
119
|
+
|
|
120
|
+
Tạo _platforms/wix.json:
|
|
121
|
+
|
|
122
|
+
{
|
|
123
|
+
"platform": "wix",
|
|
124
|
+
"site_id": "site-id-lay-tu-buoc-3",
|
|
125
|
+
"site_url": "https://your-domain.com",
|
|
126
|
+
"blog_url": "https://your-domain.com/blog",
|
|
127
|
+
"format": {
|
|
128
|
+
"input": "markdown",
|
|
129
|
+
"note": "Wix Blog API nhận Ricos JSON, không nhận Markdown thô — phải chuyển Markdown sang Ricos JSON trước khi gọi API (dùng Wix MCP nếu MCP tự lo bước này)"
|
|
130
|
+
},
|
|
131
|
+
"seo": {
|
|
132
|
+
"title_source": "Meta Title trong file draft — KHÔNG để Wix tự generate",
|
|
133
|
+
"description_source": "Meta Description trong file draft",
|
|
134
|
+
"slug_gotcha": "Wix mặc định tự sinh slug từ tiêu đề bài, thường ra tiếng Việt có dấu. Phải override thủ công qua field seoSlug (tiếng Anh/không dấu, nối bằng -) sau khi tạo draft."
|
|
135
|
+
},
|
|
136
|
+
"featured_image": { "field": "coverImage hoặc tương đương trong Wix Blog API", "note": "Dùng ảnh featured.png riêng, không chèn vào đầu nội dung body" },
|
|
137
|
+
"publish": { "default_status": "draft" }
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Subcommand: `wordpress [slug]` — Đăng lên WordPress
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
Đăng bài noi-dung/4-approved/[slug]/blog.md lên WordPress, dùng cấu
|
|
147
|
+
hình đọc từ _platforms/wordpress.json.
|
|
148
|
+
|
|
149
|
+
1. Đọc blog.md, tách tiêu đề (H1 đầu tiên) làm title, phần còn lại
|
|
150
|
+
chuyển từ Markdown sang HTML làm content
|
|
151
|
+
2. Upload images/featured.png (nếu có) qua endpoint media, gán vào
|
|
152
|
+
field featured_media — không chèn ảnh này vào đầu content
|
|
153
|
+
3. Với mỗi ảnh khác trong images/ được tham chiếu trong blog.md, upload
|
|
154
|
+
qua endpoint media, lấy URL trả về, thay tham chiếu cục bộ trong
|
|
155
|
+
content bằng URL đã upload
|
|
156
|
+
4. Tạo bài viết với title, content, featured_media, status=draft —
|
|
157
|
+
chỉ đặt publish khi user xác nhận rõ ràng
|
|
158
|
+
5. Trả về link bài viết (link nháp hoặc link live tuỳ status)
|
|
159
|
+
6. Chỉ khi đã publish thật (không phải draft): thêm dòng URL bài đã
|
|
160
|
+
đăng vào phần ghi chú đăng bài trong blog.md, rồi di chuyển cả
|
|
161
|
+
thư mục bài viết sang noi-dung/5-published/[slug]/
|
|
162
|
+
7. Thêm 1 dòng vào noi-dung/_context/published-index.md (tạo file với
|
|
163
|
+
header bảng nếu chưa có): ngày đăng, tiêu đề, URL, category, tags
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Subcommand: `emdash [slug]` — Đăng lên Emdash
|
|
167
|
+
|
|
168
|
+
```text
|
|
169
|
+
Đăng bài noi-dung/4-approved/[slug]/blog.md lên Emdash, dùng cấu hình
|
|
170
|
+
đọc từ _platforms/emdash.json.
|
|
171
|
+
|
|
172
|
+
1. Đọc blog.md, tách tiêu đề, mô tả ngắn (nếu có), nội dung — giữ
|
|
173
|
+
nguyên Markdown, Emdash nhận trực tiếp
|
|
174
|
+
2. Upload images/featured.png (nếu có) qua MCP Emdash
|
|
175
|
+
(media_create/media.create), gán vào field featured_image — không
|
|
176
|
+
chèn ảnh này vào đầu nội dung
|
|
177
|
+
3. Upload các ảnh khác trong images/ được tham chiếu trong blog.md,
|
|
178
|
+
thay tham chiếu cục bộ bằng URL/storageKey trả về
|
|
179
|
+
4. Tạo nội dung bằng content_create/content.create (collection: posts),
|
|
180
|
+
mặc định status=draft — chỉ publish (content_publish/content.publish)
|
|
181
|
+
khi user xác nhận rõ ràng
|
|
182
|
+
5. Trả về link xem trước
|
|
183
|
+
6. Chỉ khi đã publish thật (không phải draft): thêm dòng URL bài đã
|
|
184
|
+
đăng vào phần ghi chú đăng bài trong blog.md, rồi di chuyển cả
|
|
185
|
+
thư mục bài viết sang noi-dung/5-published/[slug]/
|
|
186
|
+
7. Thêm 1 dòng vào noi-dung/_context/published-index.md (tạo file với
|
|
187
|
+
header bảng nếu chưa có): ngày đăng, tiêu đề, URL, category, tags
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## Subcommand: `wix [slug]` — Đăng lên Wix
|
|
191
|
+
|
|
192
|
+
```text
|
|
193
|
+
Đăng bài noi-dung/4-approved/[slug]/blog.md lên Wix, dùng cấu hình
|
|
194
|
+
đọc từ _platforms/wix.json.
|
|
195
|
+
|
|
196
|
+
1. Đọc blog.md, tách tiêu đề, nội dung
|
|
197
|
+
2. Chuyển nội dung từ Markdown sang Ricos JSON (định dạng Wix Blog API
|
|
198
|
+
yêu cầu) — dùng Wix MCP nếu MCP tự lo bước chuyển đổi này
|
|
199
|
+
3. Upload images/featured.png (nếu có) lên Wix, gán làm ảnh đại diện —
|
|
200
|
+
không chèn ảnh này vào đầu nội dung body
|
|
201
|
+
4. Upload các ảnh khác trong images/ được tham chiếu trong blog.md,
|
|
202
|
+
gắn vào đúng vị trí trong Ricos JSON
|
|
203
|
+
5. Lấy Meta Title/Meta Description từ blog.md, KHÔNG để Wix tự generate
|
|
204
|
+
6. Tạo bài viết ở trạng thái draft, sau đó override field seoSlug
|
|
205
|
+
bằng slug tiếng Anh không dấu (Wix tự sinh slug có dấu từ tiêu đề,
|
|
206
|
+
phải sửa lại thủ công) — chỉ publish khi user xác nhận rõ ràng
|
|
207
|
+
7. Trả về link bài viết
|
|
208
|
+
8. Chỉ khi đã publish thật (không phải draft): thêm dòng URL bài đã
|
|
209
|
+
đăng vào phần ghi chú đăng bài trong blog.md, rồi di chuyển cả
|
|
210
|
+
thư mục bài viết sang noi-dung/5-published/[slug]/
|
|
211
|
+
9. Thêm 1 dòng vào noi-dung/_context/published-index.md (tạo file với
|
|
212
|
+
header bảng nếu chưa có): ngày đăng, tiêu đề, URL, category, tags
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## Nguyên tắc chung
|
|
218
|
+
|
|
219
|
+
- Mặc định tạo bản draft, không tự publish công khai — luôn hỏi user xác nhận trước khi đăng thật ra công chúng
|
|
220
|
+
- Không tự đoán thông tin kết nối (site URL, key, tên MCP server...) — nếu thiếu, chạy `connect` trước, không tự bịa
|
|
221
|
+
- Không bao giờ ghi token/application password thật vào `_platforms/{nền tảng}.json`, file trong `noi-dung/`, hay commit vào git — chỉ lưu trong biến môi trường hoặc `CLAUDE.md` cá nhân (không public)
|
|
222
|
+
- Nếu MCP/API trả lỗi xác thực, dừng lại và báo user kiểm tra lại bước `connect`, không tự thử đổi endpoint hay đoán lại thông tin khác
|
|
223
|
+
- Ảnh trong `blog.md` tham chiếu theo tên file cục bộ (ví dụ `images/quote-1.png`) — agent tự thay bằng URL thật sau khi upload, không cần user chèn lại thủ công trên nền tảng
|
|
224
|
+
- Ảnh đại diện (`images/featured.png`, do `agent-image` tạo riêng, khác các ảnh chèn trong bài) luôn gán vào đúng field ảnh đại diện của nền tảng (featured_media/featured_image/coverImage...), không chèn vào đầu nội dung body
|
|
225
|
+
- Chỉ di chuyển thư mục bài viết sang `5-published/` khi đã publish thật ra công chúng — nếu chỉ tạo draft, giữ nguyên thư mục ở `4-approved/`
|
|
226
|
+
|
|
227
|
+
## Files
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
agent-platform/
|
|
231
|
+
└── SKILL.md — router + connect (3 nền tảng) + 3 flow đăng bài (file này)
|
|
232
|
+
```
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-seo
|
|
3
|
+
description: "Viết bài SEO chuẩn cấu trúc, dựa trên E-E-A-T (Google), Skyscraper Technique (Backlinko), Topic Cluster (HubSpot) và TOFU-MOFU-BOFU (funnel marketing). Dùng khi muốn bài viết vừa xếp hạng tốt vừa giữ được chất chuyên gia thật, vừa phủ đều các giai đoạn hành trình mua hàng."
|
|
4
|
+
argument-hint: "[từ khoá/chủ đề muốn lên top, hoặc subcommand: cluster | research | onpage]"
|
|
5
|
+
version: "1.1.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /agent-seo — Viết Bài SEO Giữ Chất Chuyên Gia
|
|
9
|
+
|
|
10
|
+
Khác với bài blog kể chuyện tự do, bài SEO cần vừa đúng cấu trúc để công cụ tìm kiếm hiểu, vừa đủ thật để người đọc và Google tin đây là nội dung của một người có chuyên môn thật. Agent này dùng 4 nền tảng:
|
|
11
|
+
|
|
12
|
+
- **Topic Cluster / Pillar Page (HubSpot):** một trang trụ (pillar) bao quát chủ đề lớn, nhiều bài cluster đi sâu từng nhánh nhỏ, tất cả link chéo về nhau — thay vì viết rời rạc từng bài không liên kết
|
|
13
|
+
- **TOFU-MOFU-BOFU (funnel marketing):** phân loại từng bài Cluster theo giai đoạn hành trình mua hàng — TOFU (Top of Funnel: nhận biết vấn đề, chưa nghĩ tới giải pháp cụ thể), MOFU (Middle: đang cân nhắc giải pháp/so sánh lựa chọn), BOFU (Bottom: sẵn sàng mua, cần lý do chốt) — để bộ Cluster không lệch hẳn về TOFU (nhiều traffic nhưng ít ai mua) hay BOFU (ít traffic nhưng không ai tìm thấy)
|
|
14
|
+
- **Skyscraper Technique (Brian Dean/Backlinko):** tìm nội dung đang xếp hạng tốt nhất cho chủ đề, rồi làm bản tốt hơn — đầy đủ hơn, mới hơn, trình bày rõ hơn, đi sâu hơn
|
|
15
|
+
- **E-E-A-T (Google Search Quality Rater Guidelines):** Google và người đọc đánh giá nội dung qua Experience (trải nghiệm thật), Expertise (chuyên môn), Authoritativeness (uy tín), Trustworthiness (đáng tin) — không phải chỉ nhồi từ khoá
|
|
16
|
+
|
|
17
|
+
## Routing
|
|
18
|
+
|
|
19
|
+
| Input | Hành động |
|
|
20
|
+
|---|---|
|
|
21
|
+
| _(empty)_ hoặc `help` | In hướng dẫn + ví dụ |
|
|
22
|
+
| từ khoá/chủ đề cụ thể | Chạy **Full Flow**: cluster → research → viết → onpage |
|
|
23
|
+
| `cluster [chủ đề lớn]` | Chỉ chạy bước xây pillar + cluster |
|
|
24
|
+
| `research [từ khoá]` | Chỉ chạy bước phân tích nội dung đang xếp hạng tốt |
|
|
25
|
+
| `onpage [bản nháp]` | Chỉ chạy checklist on-page cho bài đã viết |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Full Flow
|
|
30
|
+
|
|
31
|
+
### Bước 1 — Xây Pillar và Cluster
|
|
32
|
+
|
|
33
|
+
```text
|
|
34
|
+
Chủ đề lớn tôi muốn làm chủ trên Google: [chủ đề]
|
|
35
|
+
|
|
36
|
+
Hãy giúp tôi:
|
|
37
|
+
1. Xác định 1 trang Pillar bao quát toàn bộ chủ đề (mức độ tổng quan,
|
|
38
|
+
dài, dẫn tới các bài con)
|
|
39
|
+
2. Đề xuất 5-8 bài Cluster — mỗi bài đi sâu 1 từ khoá dài (long-tail)
|
|
40
|
+
liên quan trực tiếp tới Pillar
|
|
41
|
+
3. Gắn nhãn từng bài Cluster theo giai đoạn phễu:
|
|
42
|
+
- TOFU — bài giải thích khái niệm, nhận biết vấn đề, chưa nhắc giải pháp cụ thể
|
|
43
|
+
- MOFU — bài so sánh, đánh giá, hướng dẫn chọn giải pháp
|
|
44
|
+
- BOFU — bài giá cả, case study, "vì sao chọn [sản phẩm/dịch vụ mình]"
|
|
45
|
+
4. Kiểm tra bộ Cluster đã đề xuất có phủ đủ cả 3 giai đoạn chưa —
|
|
46
|
+
nếu lệch hẳn về TOFU (toàn bài kiến thức chung) hoặc BOFU (toàn bài
|
|
47
|
+
bán hàng), đề xuất thêm bài để cân lại
|
|
48
|
+
5. Vẽ sơ đồ: bài nào link về Pillar, Pillar link tới bài nào
|
|
49
|
+
|
|
50
|
+
Ưu tiên chủ đề mà tôi có kinh nghiệm thật để trả lời, không chọn
|
|
51
|
+
chủ đề chỉ vì có volume tìm kiếm cao.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Trước khi vẽ sơ đồ, đọc `noi-dung/_context/published-index.md` (nếu có) — nếu đã có bài đã đăng cùng chủ đề, đưa thẳng vào sơ đồ Cluster thay vì chỉ đề xuất bài mới, tránh viết trùng chủ đề đã có.
|
|
55
|
+
|
|
56
|
+
### Bước 2 — Nghiên cứu nội dung đang xếp hạng tốt (Skyscraper bước 1-2)
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
Từ khoá tôi muốn viết: [từ khoá]
|
|
60
|
+
|
|
61
|
+
Hãy giúp tôi phân tích những bài đang đứng top cho từ khoá này (dựa trên
|
|
62
|
+
tiêu đề, cấu trúc heading, độ dài, góc nhìn — tôi sẽ dán nội dung nếu có):
|
|
63
|
+
|
|
64
|
+
1. Các bài đó đang trả lời câu hỏi gì, bỏ sót câu hỏi gì?
|
|
65
|
+
2. Cấu trúc heading của họ ra sao?
|
|
66
|
+
3. Thông tin nào đã cũ, chưa cập nhật?
|
|
67
|
+
4. Tôi có thể làm bài "hơn" ở đâu — đầy đủ hơn, có ví dụ thật hơn,
|
|
68
|
+
trình bày rõ hơn, trả lời sâu hơn câu hỏi thật?
|
|
69
|
+
|
|
70
|
+
Không copy cấu trúc, chỉ dùng để biết mình cần vượt qua điều gì.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Bước 3 — Viết bài theo cấu trúc SEO + chất riêng
|
|
74
|
+
|
|
75
|
+
```text
|
|
76
|
+
Viết bài cho từ khoá [từ khoá], dựa trên khoảng trống đã tìm ở bước 2
|
|
77
|
+
và trải nghiệm thật của tôi: [dán trải nghiệm/ghi chú]
|
|
78
|
+
|
|
79
|
+
Yêu cầu cấu trúc:
|
|
80
|
+
- Heading H1 chứa từ khoá chính, đọc tự nhiên như người thật viết
|
|
81
|
+
(dùng `agent-title` subcommand `seo` nếu muốn sinh nhiều phương án
|
|
82
|
+
Title/H1 và chấm điểm trước khi viết bài)
|
|
83
|
+
- Đoạn mở trả lời thẳng câu hỏi trong 2-3 câu đầu (không vòng vo)
|
|
84
|
+
- Heading H2/H3 theo từng câu hỏi phụ người đọc thật hay hỏi
|
|
85
|
+
- Có ít nhất 1 đoạn thể hiện Experience thật (đã tự làm, tự thử,
|
|
86
|
+
tự gặp vấn đề này) — đây là phần AI không tự bịa được, cần chất liệu thật
|
|
87
|
+
- Có ít nhất 1 đoạn thể hiện Expertise cụ thể (số liệu, quy trình,
|
|
88
|
+
cách làm chi tiết mà người ngoài nghề không biết)
|
|
89
|
+
- Kết bài dẫn về Pillar/bài Cluster liên quan (nếu có)
|
|
90
|
+
- Đọc `noi-dung/_context/published-index.md`, chọn 1-3 bài đã đăng
|
|
91
|
+
cùng chủ đề/category/tags liên quan, chèn internal link tự nhiên
|
|
92
|
+
trong thân bài (không chỉ ở kết bài) kèm anchor text mô tả đúng nội
|
|
93
|
+
dung bài được link tới, không dùng "xem thêm tại đây"
|
|
94
|
+
|
|
95
|
+
Không nhồi từ khoá lặp lại máy móc — ưu tiên đọc tự nhiên trước,
|
|
96
|
+
đúng cấu trúc sau.
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Khi bắt đầu ghi vào `blog.md`, di chuyển cả thư mục bài viết từ `noi-dung/1-ideas/{slug}/` sang `noi-dung/2-drafting/{slug}/` (nếu chưa ở đó) — xem quy ước tại `agents/README.md` mục "Cấu trúc thư mục nội dung — quản lý kiểu Kanban".
|
|
100
|
+
|
|
101
|
+
### Bước 4 — Checklist On-page + E-E-A-T
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
Đây là bản nháp bài SEO của tôi:
|
|
105
|
+
|
|
106
|
+
[Dán bản nháp]
|
|
107
|
+
|
|
108
|
+
Hãy kiểm tra và chỉ ra chỗ cần sửa theo checklist:
|
|
109
|
+
|
|
110
|
+
On-page:
|
|
111
|
+
- Title có chứa từ khoá chính, dưới 60 ký tự không? (dùng `agent-title`
|
|
112
|
+
subcommand `seo` nếu cần sinh và chấm điểm nhiều phương án trước khi chốt)
|
|
113
|
+
- Meta description có nêu rõ lợi ích, dưới 155 ký tự không?
|
|
114
|
+
- Heading H2/H3 có theo đúng thứ tự logic không, có từ khoá phụ không?
|
|
115
|
+
- Có internal link về Pillar/bài liên quan không? (đối chiếu với
|
|
116
|
+
`noi-dung/_context/published-index.md` — còn bài đã đăng cùng chủ
|
|
117
|
+
đề nào chưa được link tới không?)
|
|
118
|
+
- Có ảnh minh hoạ kèm alt text mô tả đúng nội dung không?
|
|
119
|
+
|
|
120
|
+
E-E-A-T:
|
|
121
|
+
- Experience — có đoạn nào thể hiện tôi đã thật sự làm việc này không?
|
|
122
|
+
- Expertise — có chi tiết cụ thể mà chỉ người có chuyên môn mới biết không?
|
|
123
|
+
- Authoritativeness — có nhắc nguồn/số liệu đáng tin, hoặc dẫn về
|
|
124
|
+
bài khác đã viết cùng chủ đề không?
|
|
125
|
+
- Trustworthiness — có minh bạch (giá, giới hạn, điều sản phẩm/dịch vụ
|
|
126
|
+
không làm được) thay vì chỉ khen không?
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Sau khi chốt bản cuối, lưu vào `blog.md` (cùng vị trí bài blog thường), rồi di chuyển cả thư mục bài viết sang `noi-dung/3-review/{slug}/` — xem quy ước ở `agents/README.md` mục "Cấu trúc thư mục nội dung — quản lý kiểu Kanban".
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Nguyên tắc
|
|
134
|
+
|
|
135
|
+
- Chủ đề chọn viết phải là chủ đề có trải nghiệm thật để trả lời — SEO không thay được chuyên môn thật
|
|
136
|
+
- Cấu trúc phục vụ người đọc trước, công cụ tìm kiếm sau — không hy sinh sự rõ ràng để nhồi từ khoá
|
|
137
|
+
- Áp cùng nguyên tắc giọng văn với agent-blog: không viết hoa sau dấu hai chấm, không dùng gạch ngang dài (—), minh bạch giá nếu nhắc tới sản phẩm/dịch vụ
|
|
138
|
+
- Mỗi bài Cluster nên link về đúng 1 Pillar, tránh viết rời rạc không liên kết
|
|
139
|
+
|
|
140
|
+
## Files
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
agent-seo/
|
|
144
|
+
└── SKILL.md — router + full flow (file này)
|
|
145
|
+
```
|