Phiếu lệnh triển khai · Bộ 4 skill SEO Web

WordPress Lark Base,
bài tự lên web mỗi ngày

Bạn dựng web trên Hostinger, điền 6 ô, dán khối lệnh vào Claude Code — máy tự tải bộ 4 skill về và cài. Từ đó mỗi ngày 11:00 nó lấy bài đến hạn trong Lark, viết chuẩn SEO, đăng lên web và ghi link ngược lại vào bảng.

  1. Hostingerhosting + tên miền
  2. WordPresscài 1 nút, bật SSL
  3. Lark Basemỗi dòng = 1 bài
  4. Bộ 4 skillresearch · viết · đăng · ảnh
  5. 11:00 mỗi ngàybài lên web, có link
minhhoasqtt-prog/bo-skill-seo-web-hoc-vien
01

Bắt buộc làm trước

Không có thứ này thì mọi bước sau đều vô ích

Lấy Application Password của WordPress — không phải mật khẩu bạn dùng để đăng nhập

Vào ten-mien-cua-ban.com/wp-adminUsers → Profile → kéo xuống cuối trang, mục Application Passwords → đặt tên Claude SEOAdd New. WordPress hiện một chuỗi 24 ký tự — chỉ hiện đúng một lần, copy ngay.

Không thấy mục đó? Vì web chưa bật HTTPS. WordPress ẩn hoàn toàn Application Passwords trên site chạy http://. Bật SSL ở bước 3 của mục 02 rồi tải lại trang là hiện.

02

Dựng web — 15 phút trên Hostinger

Sáu việc, làm một lần rồi thôi. Đã có WordPress sẵn thì nhảy tới số 3.

  1. Mua gói Hostinger + tên miền

    Gói Premium trở lên là đủ. Mua theo năm thường được tặng tên miền năm đầu — lấy luôn cho gọn, đỡ phải trỏ DNS thủ công.

  2. Cài WordPress bằng Auto Installer

    hPanel → Website → Auto Installer → WordPress. Khoảng 2 phút. Nhớ tên đăng nhập — lát nữa điền vào ô WP_USER.

  3. Bật SSL và tắt “Coming soon”

    hPanel → Security → SSL → bật (miễn phí). Rồi vào Website → Dashboard tắt Coming soon / Maintenance. Quên tắt thì web vẫn “đang xây dựng” với khách, và Application Password ở mục 01 không hiện ra.

  4. Đổi đường dẫn tĩnh sang “Tên bài viết”

    WordPress → Settings → Permalinks → Post name. Mặc định là ?p=123 — để nguyên thì cột URL Slug trong bảng trở thành vô nghĩa và bài mất sạch điểm SEO.

  5. Cài Yoast SEO

    Plugins → Add New → Yoast SEO → cài, kích hoạt. Bộ skill ghi meta theo chuẩn Yoast (_yoast_wpseo_title, _yoast_wpseo_metadesc) — cài Rank Math thay vào là hai cột Meta không sang được.

  6. Cài plugin Royal MCP và tạo API key

    Cài plugin → mở phần cài đặt của nó → tạo API key → copy. Đây là con đường duy nhất để ảnh lên được web (xem mục 06). Không có key thì bài vẫn đăng, nhưng trắng trơn không một tấm ảnh.

03

Cài trên máy của bạn

Bốn thứ. Máy làm việc máy giỏi (quét bảng, tải ảnh, gọi API) nên chạy thẳng bằng Node, không qua trình duyệt.

Cần cóKiểm bằngThiếu thì sao
Node.js v18+node -vScripts dùng fetch có sẵn từ v18. Bản cũ hơn là chạy không nổi.
Claude Codeclaude --versionKhông có thì không dán được khối lệnh, và lịch 11:00 cũng không gọi được AI viết bài.
lark-clilark-cli auth statusPhải ra ready. Đây là đường duy nhất bộ skill đọc/ghi Lark Base.
ffmpegffmpeg -versionKhuyến nghị. Không có thì ảnh 6–10 MB không nén được về 1600px — web nặng, điểm tốc độ tụt.
Về lark-cli: nó đăng nhập bằng chính tài khoản Lark của bạn (--as user) — nên bộ này không cần tạo app Lark, không cần App ID / App Secret. Nhưng repo không kèm hướng dẫn cài công cụ này, và gói trùng tên trên npm là gói khác. Máy chưa có thì hỏi người bàn giao bộ skill trước khi làm tiếp — đây là chỗ tắc số một.
Bộ skill bạn không phải tải tay. Khối lệnh ở mục 05 tự git clone repo về, chép đúng 4 thư mục vào .claude/skills/ rồi dọn thư mục tạm. Bạn chỉ cần mở Claude Code ở thư mục dự án của mình.
  1. hmh-mkt-research-seo-web — tìm từ khoá, nạp brief vào bảng
  2. hmh-AIOS-dang-bai-seo — viết bài và đăng, chạy mỗi ngày
  3. hmh-AIOS-anh-lark-wordpress — đưa ảnh từ Lark lên web
  4. seo-web-writer — bản đăng tay 9 bước, khi muốn giám sát từng bài
Xem repo ↗
04

Điền 6 ô của bạn

Địa chỉ web của bạn, có https://, không có dấu / ở cuối.
Tên đăng nhập wp-admin, không phải email.
Chuỗi 24 ký tự lấy ở mục 01. Giữ nguyên khoảng trắng.
Lấy ở bước 6 mục 02. Mọi ảnh đều đi qua đây — bỏ trống là bài lên web không có ảnh nào.
Hiện ở khung tác giả cuối mỗi bài. Google soi tín hiệu “người thật” rất gắt với bài tiền bạc.
Chỉ nêu sự thật kiểm chứng được, khớp trang giới thiệu trên web. Phóng đại ở đây là tự hại uy tín.
Đã có bảng “Lịch bài SEO” thì dán link vào. Chưa có thì bỏ trống — máy tự dựng đủ 31 trường đúng tên.
Custom Bot trong nhóm Lark. Có nó thì đăng lỗi bạn biết ngay; không có thì phải tự mở bảng kiểm.
Các giá trị này chỉ nằm trong trình duyệt của bạn — trang không gửi đi đâu và không lưu lại. Đóng tab là mất.
05

Khối lệnh — sao chép rồi dán vào Claude Code

Lệnh triển khai

    

Chưa điền ô nào — khối lệnh đang ở dạng mẫu.

Đoạn “mu-plugin yoast-rest-meta.php” trong khối lệnh đừng xoá. Thiếu file đó thì bài vẫn đăng thành công, script chỉ in một dòng [warn] rồi đi tiếp — còn Meta Title và Meta Description thì không bao giờ sang tới Yoast. Bạn chỉ phát hiện khi bài đã lên Google với tiêu đề sai.
06

Cỗ máy chạy thế nào

Hai giai đoạn, không gọi nhau trực tiếp. Chúng gặp nhau tại một cái bảng — và cái bảng đó là nguồn sự thật duy nhất.

  1. Giai đoạn 1 · researchBạn cho chủ đề → máy tìm từ khoá, đọc top Google, dựng brief → ghi vào bảng, Trạng thái “Chờ viết”, Ngày đăng giãn mỗi bài 1 ngày.
  2. Bảng LarkMỗi dòng = 1 bài. Cột Trạng thái là công tắc, cột Ngày đăng là hẹn giờ.
  3. Giai đoạn 2 · 11:00 mỗi ngàyLấy bài cũ nhất đến hạn → tải ảnh, nén → AI viết HTML → đăng WordPress → ghi ngược link vào bảng, Trạng thái “Đã đăng”.

Bốn cổng kiểm — lỗi ở đâu dừng ở đó, không đăng bừa

CổngChặn cái gì
Tiền kiểmChưa có Application Password → báo nhóm Lark rồi dừng. Không chết câm.
Lưới HTMLBài viết ra không hợp lệ, quá ngắn, thiếu chỗ chèn ảnh → không đăng, ghi sổ lỗi.
Cổng YMYLBài tiền bạc có cụm hứa hẹn phóng đại (“giàu nhanh”, “cam kết lợi nhuận”, “x3 doanh thu”…) → chặn trước khi upload ảnh, không tạo rác trên web. Đây là tính năng bảo vệ uy tín, đừng tắt.
Verify sau đăngĐọc lại bài vừa tạo, xác nhận status = publish thật rồi mới báo thành công. Không bao giờ báo “đã đăng” chỉ vì lệnh không lỗi.
Còn một lưới nữa: sổ đếm lỗi. Một bài hỏng 3 lần liên tiếp sẽ bị bỏ qua để không chặn hàng đợi — một dòng lỗi không được phép làm cả dây chuyền đói. Bài kẹt được báo riêng về Lark.

Ảnh đi đường nào — Royal MCP

Nhiều hosting bật tường lửa chặn thẳng việc đẩy file nhị phân lên /wp/v2/media — trả 403. Bộ skill không đi lách: nó gửi ảnh dạng base64 nằm trong JSON qua plugin Royal MCP, một cửa chính thống có khoá riêng.

MảnhLà gì
CửaWP_URL/wp-json/royal-mcp/v1/mcp — giao thức MCP Streamable HTTP
KhoáHeader X-Royal-MCP-API-Key, đọc từ ROYAL_MCP_API_KEY trong .secrets/wordpress.env
Việcwp_upload_media nhận base64 → trả media ID. Ảnh #1 thành ảnh đại diện qua wp_set_featured_image
Đây không phải đường dự phòng — đây là đường duy nhất. Cả publish-wordpress.mjs lẫn skill ảnh không có nhánh nào upload qua REST; /wp/v2/media chỉ được dùng để tra ảnh trùng. Thiếu ROYAL_MCP_API_KEY thì mỗi ảnh ném lỗi, máy gỡ trọn khối <figure> rồi vẫn đăng bài — trắng trơn không ảnh, chỉ để lại một dòng [warn]. Bài lên Google mà không có ảnh đại diện, bạn không biết cho tới lúc mở web ra xem.
07

Cái bảng là công tắc, không phải bạn

Muốn đăng → thêm dòng “Chờ viết” kèm Ngày đăng. Muốn hoãn → dời ngày. Muốn dừng → đổi trạng thái. Không ai phải sửa code.

Nhóm cộtAi điềnGồm
BriefMáy research
(hoặc bạn)
Tiêu đề · Từ khoá chính/phụ/người dùng · Outline · Meta Title · Meta Description · URL Slug · Danh mục · Schema Type · Internal Links · Số từ · Ngày đăng
ẢnhBạn
(hoặc skill ảnh)
File ảnh · Link ảnh Drive · Alt text — bài không ảnh vẫn đăng được, có ảnh thì chuẩn SEO hơn
Hệ thốngMáy tự điềnTrạng thái · Link web sau đăng · WordPress Media ID — bạn đừng sửa tay ba cột này
31 trường phải đúng TÊN và đúng KIỂU. Script tìm cột theo tên, không theo mã — sai một chữ hoặc thừa một dấu cách là im lặng không ghi được. Vì vậy hãy để máy dựng bảng cho bạn ở khối lệnh, đừng gõ tay 31 cột.
08

Bài viết sẽ ra hình dạng nào

Phiên viết bài bị “khoá tay”: AI chỉ nhận đúng hai thứ — checklist SEO và brief của bài đó — rồi nhả ra HTML. Không tự do bịa cấu trúc.

H1Headline có số + lợi ích + lời hứa
SapoTừ khoá chính phải nằm trong 100 từ đầu

H2/H3Bám đúng Outline trong bảng, không thêm bớt mục
ẢnhChèn bằng chỗ trống __IMG1__, __IMG2__ — alt bắt buộc chứa từ khoá chính
Bằng chứng≥1 trải nghiệm thật + ≥1 link ra nguồn uy tín — đây là phần E-E-A-T

FAQLấy thẳng từ cột Từ khoá người dùng — cụm người thật gõ vào Google
KếtDưới 200 từ
CTAĐúng 2 chỗ, gắn UTM cta-giua-baicta-cuoi-bai — để đo CTA nào ra tiền
CuốiKhung tác giả: tên + tiểu sử + link — tín hiệu “người thật đứng sau bài”
Mật độ từ khoá chính giữ quanh 1,5–2%. Mọi bài đều tự gắn thêm danh mục BLOG, ngoài danh mục bạn ghi trong bảng.
09

Việc bạn phải tự tay — và cách kiểm

  1. Dán file yoast-rest-meta.php lên hosting

    Claude đưa bạn nội dung file. hPanel → File Managerpublic_html/wp-content/ → tạo thư mục mu-plugins nếu chưa có → dán vào. Không cần kích hoạt, WordPress tự nhận.

  2. Bổ sung ảnh cho bài trước ngày đăng

    Máy viết được chữ nhưng không tự nghĩ ra ảnh. Kéo ảnh vào cột File ảnh của dòng đó, hoặc dùng skill hmh-AIOS-anh-lark-wordpress. Bài thiếu ảnh vẫn lên, chỉ là yếu hơn.

  3. Để máy bật lúc 11:00

    Lịch chạy bằng Task Scheduler của Windows, không phải máy chủ đám mây. Task chỉ chạy khi máy bật và đã đăng nhập — máy tắt là hôm đó không có bài, và cũng không có ai báo cho bạn.

KiểmĐúng thì thấy gì
Trên bảng LarkDòng vừa đăng chuyển Đã đăng, có Link web sau đăng bấm được và WordPress Media ID.
Địa chỉ bàiĐúng dạng tenmien.com/url-slug/không phải ?p=123.
Ảnh bìaBài có ảnh đại diện, và trong thân bài không còn chữ __IMG1__ nào sót lại.
Meta YoastWordPress → sửa bài → khung Yoast hiện đúng Meta Title và Description của bảng. Trống nghĩa là thiếu mu-plugin.
Nếu máy báo 401 dù mật khẩu đúng — hosting đang nuốt mất phần xác thực. Vào File Manager, mở public_html/.htaccess, thêm dòng này lên đầu file rồi thử lại:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Nếu bài lên web mà không có ảnh nào — gần như chắc chắn là Royal MCP. Chạy thử một phát để biết hỏng ở đâu:
node .claude/skills/hmh-AIOS-dang-bai-seo/scripts/royal-mcp.mjs upload duong-dan-anh.jpg "alt thử"
Ra {"id":…,"url":…} là ngon. Báo thiếu ROYAL_MCP_API_KEY → chưa điền key. Báo không nhận được Mcp-Session-Id → plugin chưa bật hoặc key sai.