SEO là mảnh đất lý tưởng cho agent vì nó nhiều dữ liệu, nhiều bước lặp và có tiêu chí đo được. Bài này xây một SEO agent làm hai việc: nghiên cứu từ khóa theo intent và tối ưu on-page theo checklist.
Phân cụm từ khóa theo intent, không theo volume
Sai lầm phổ biến là chọn từ khóa chỉ vì volume cao. Agent nên nhóm theo search intent:
- Informational: "serum vitamin C là gì" → bài blog how-to/guide.
- Commercial: "serum vitamin C loại nào tốt" → bài so sánh/review.
- Transactional: "mua serum vitamin C" → trang sản phẩm.
- Navigational: "serum Lụa vitamin C" → trang thương hiệu.
cluster(keywords):
for kw in keywords:
intent = classify_intent(kw) # model phân loại
topic = extract_topic(kw)
group[topic][intent].append(kw)
return group # -> mỗi cụm map tới 1 dạng trang
Map cụm → dạng trang giúp bạn xây topic cluster (một pillar + nhiều bài phụ liên kết nội bộ), thứ Google đánh giá cao.
Phân tích khoảng trống nội dung (content gap)
Cho agent đọc top 10 kết quả đang xếp hạng để tìm điều đối thủ có mà bạn thiếu:
gap_analysis(keyword):
serps = get_serp(keyword)[:10]
competitor_headings = [get_headings(url) for url in serps]
our_headings = get_headings(our_url)
missing = subtopics_in(competitor_headings) - our_headings
return missing # ví dụ: ["cách bảo quản", "tương tác với retinol"]
Agent trả về danh sách chủ đề con còn thiếu để bổ sung — cực hữu ích và có thể sai (nếu bịa) nên luôn dựa trên dữ liệu SERP thật, không để model đoán. Sau khi có danh sách, hãy để con người lọc lại: không phải chủ đề nào đối thủ có cũng đáng viết; một số là nhiễu hoặc không phù hợp định vị thương hiệu.
Topic cluster: pillar và bài phụ
Google ngày càng đánh giá theo độ phủ chủ đề (topical authority) chứ không chỉ từng bài lẻ. Chiến lược: một trang pillar bao quát chủ đề rộng ("Hướng dẫn toàn diện về serum vitamin C") liên kết tới nhiều bài phụ đi sâu từng khía cạnh (cách dùng buổi tối, kết hợp với retinol, chọn nồng độ). Agent có thể tự đề xuất cấu trúc cluster từ kết quả phân cụm từ khóa:
build_cluster(topic_group):
pillar = pick_broad_informational_kw(topic_group)
supports = [kw for kw in topic_group if kw != pillar]
return {"pillar": pillar,
"supports": supports,
"internal_links": "mỗi bài phụ link về pillar và ngược lại"}
Liên kết nội bộ hai chiều giúp Google hiểu quan hệ giữa các bài và truyền "link equity" trong cluster.
Checklist on-page agent tự kiểm
Agent chạy qua checklist và trả điểm kèm gợi ý sửa:
- [ ] Title chứa từ khóa chính, dưới 60 ký tự
- [ ] Meta description hấp dẫn, dưới 155 ký tự
- [ ] Một thẻ H1 duy nhất, chứa từ khóa
- [ ] Từ khóa xuất hiện trong 100 từ đầu
- [ ] Có internal link tới pillar/bài liên quan
- [ ] Alt text ảnh mô tả đúng, có từ khóa khi hợp lý
- [ ] URL ngắn, có từ khóa, không dấu
- [ ] Không nhồi từ khóa (mật độ tự nhiên)
Ví dụ output tối ưu
optimize_page(url) ->
{
"score": 72,
"pass": ["H1 ok", "internal link ok"],
"fix": [
{"field":"title","issue":"dài 68 ký tự",
"suggest":"Serum Vitamin C: Cách Dùng Đúng Cho Da Nhạy Cảm"},
{"field":"meta","issue":"thiếu",
"suggest":"Hướng dẫn dùng serum vitamin C buổi tối..."}
]
}
Các bước triển khai
- Kết nối nguồn dữ liệu từ khóa (API SEO hoặc export CSV).
- Viết
classify_intent+clusterđể nhóm từ khóa. - Map mỗi cụm sang dạng trang và cấu trúc topic cluster.
- Thêm
gap_analysisdựa trên SERP thật. - Cài checklist on-page trả điểm + gợi ý (không tự sửa live).
- Đưa gợi ý cho biên tập viên duyệt trước khi áp dụng.
Sai lầm thường gặp
- Chọn từ khóa theo volume, bỏ qua intent: kéo traffic không chuyển đổi.
- Để agent bịa content gap: nếu không đọc SERP thật, danh sách "thiếu chủ đề" là tưởng tượng. Luôn ground bằng dữ liệu.
- Tối ưu quá đà (over-optimization): nhồi từ khóa, spam internal link → Google phạt. Ưu tiên trải nghiệm đọc.
- Để agent sửa trực tiếp trên site: một thay đổi title/meta sai có thể rớt hạng. Luôn duyệt trước.
- Bỏ qua E-E-A-T: nội dung y tế/làm đẹp cần độ tin cậy; agent không thay được chuyên gia kiểm định.