Không phải công cụ báo số liệu. Là một vòng lặp khép kín: phát hiện bất thường → tìm nguyên nhân có bằng chứng → đề xuất việc cụ thể → giao người làm → máy kiểm chứng → đo kết quả → ghi nhớ để lần sau quyết định tốt hơn.
Công cụ SEO hiện có trả lời “số liệu hiện tại là bao nhiêu”. Câu hỏi thật của người vận hành là “vì sao nó đổi, nên làm gì, và việc đã làm có hiệu quả không”.
Khoảng cách đó khiến đội ngũ marketing làm việc theo cảm tính: thấy tụt hạng thì viết lại nội dung, viết xong thì không biết có tác dụng hay không, tháng sau gặp lại tình huống tương tự thì lại đoán từ đầu. Công sức tích luỹ nhưng kinh nghiệm thì không.
| Câu hỏi | Công cụ thông thường | Hệ thống này |
|---|---|---|
| Số liệu là bao nhiêu? | Trả lời tốt | Trả lời tốt |
| Vì sao nó thay đổi? | Một “điểm SEO” không giải thích được | 5 nhánh chẩn đoán, mỗi nhánh có điểm bằng chứng riêng, bấm ra được dữ liệu gốc |
| Nên làm gì trước? | Danh sách lỗi dài hàng trăm dòng | Việc nhỏ nhất có bằng chứng mạnh nhất, xếp theo giá trị kinh doanh |
| Việc đó có hiệu quả không? | Không trả lời | So với nhóm đối chứng, có ngưỡng đủ dữ liệu, 6 mức kết quả |
| Lần sau có khôn hơn không? | Không | Bộ nhớ tình huống → chẩn đoán → việc → kết quả |
Đối thủ sao chép được giao diện và danh sách tính năng. Cái không sao chép được là lịch sử dữ liệu tích luỹ, và bộ nhớ “việc gì đã hiệu quả trong hoàn cảnh nào”. Vì vậy lưu lịch sử bất biến là yêu cầu từ ngày đầu, không phải tính năng thêm sau.
Toàn bộ sản phẩm là một vòng lặp. Mọi module tồn tại để phục vụ một mắt xích trong đó.
Ba mắt xích tô đậm là phần khó nhất và cũng là phần tạo giá trị. Phần còn lại là công việc tích hợp — tốn sức nhưng ai cũng làm được.
Vòng lặp này không riêng của SEO. Quảng cáo, email, mạng xã hội có cấu trúc y hệt: dữ liệu khác, tín hiệu khác, nhưng khung thì một. Vì vậy các bảng lõi được thiết kế trung lập với kênh ngay từ V1 — thêm kênh về sau là thêm dữ liệu đăng ký, không phải nhân bản module.
Website bán phần mềm SEO. Sau một đợt chỉnh menu, trang sản phẩm chủ lực tụt hạng. Đây là toàn bộ những gì hệ thống làm — không có bước nào do người phải nhớ.
Ở ngày 12, hệ thống chỉ đề xuất một việc dù cả liên kết ngoài cũng yếu. Lý do: nếu đổi hai thứ cùng lúc rồi thứ hạng tăng, không ai biết thứ nào có tác dụng — và bộ nhớ học được từ đó là bộ nhớ sai. Kỷ luật “mỗi lần một biến” là thứ biến sản phẩm thành hệ thống biết học, thay vì một danh sách việc cần làm.
| Bước | Module | Làm gì | TC |
|---|---|---|---|
| 1 | Business Profile | Biết công ty bán gì, cho ai, cái gì đáng tiền | 14 |
| 2 | Market Map | Khách đang tìm gì, nhóm nào đáng làm | 16 |
| 3 | Content & URL Plan | Giữ · bổ sung · tạo mới · gộp · đổi hướng · hoãn | 15 |
| 4 | Diagnosis Engine | 5 nhánh, chấm điểm bằng chứng, chọn rào cản chính | 18 |
| 5 | Action Engine | Việc cụ thể, ưu tiên, chống thay nhiều biến cùng lúc | 20 |
| 6 | Outcome Engine | Đối chứng, đủ dữ liệu mới kết luận, ghi bộ nhớ | 20 |
| 7 | Workflow | Giao việc, duyệt, máy kiểm chứng đã làm thật | 17 |
| 8 | Reporting | Bốn cách nhìn theo vai trò, số liệu chốt cứng | 16 |
| 9 | AI Gateway | AI đứng sau bộ kiểm tra, không bịa số, không ghi dữ liệu | 20 |
| 10 | Nền tảng thương mại | Tài khoản, hạn mức, chi phí, thanh toán | 20 |
| 11 | Phạm vi V1 | Chốt làm gì trước, hoãn gì lại | 176 |
Backend Go, bảy service. Nguyên tắc cắt service: theo ranh giới giao dịch, không theo tên bước nghiệp vụ.
| Lớp | Chọn | Vì sao |
|---|---|---|
| Mô hình | Web SaaS multi-tenant | Bước 7 cần nhiều người cùng làm việc — ứng dụng cài máy không làm được |
| Backend | Go 1.23 · 7 microservice | Thu thập dữ liệu, báo cáo và vòng lặp lõi có nhịp vận hành khác hẳn nhau, tách để scale riêng |
| Cơ sở dữ liệu | PostgreSQL 16 + pgvector | Một cụm, mỗi service một schema và một tài khoản riêng — ranh giới ép bằng quyền, không bằng thoả thuận |
| Truy cập dữ liệu | pgx + sqlc, không ORM | Truy vấn của phần chẩn đoán và đo kết quả quá đặc thù để giao cho ORM |
| Giao tiếp | gRPC + outbox trên Postgres | Sự kiện ghi cùng transaction với dữ liệu nghiệp vụ — không mất sự kiện, không cần hai pha |
| Hàng đợi | river (Postgres) | Đã có Postgres; thêm hạ tầng chỉ khi thật cần |
| Contract | buf · proto · registry YAML | Một kho nguồn sinh ra mã Go, SQL và TypeScript. Không ai khai lại lần thứ hai |
| Frontend | React · Vite · TanStack Query | Nhiều màn hình lặp cấu trúc “danh sách → chi tiết → bằng chứng” |
| Thu thập web | Go colly/chromedp dự phòng | Tự viết. Đây là dữ liệu nền, phụ thuộc bên thứ ba ở đây là rủi ro |
| AI | Service cổng riêng | Là service để không thể đi vòng. Model rẻ cho phân loại, model mạnh cho suy luận |
| Quan sát | OpenTelemetry · Grafana | Bảy service thì truy vết xuyên service là bắt buộc, không phải thêm sau |
| Triển khai | Docker Compose · VPS · GitHub Actions | Kubernetes khi cần scale riêng. Quy trình: nhánh tính năng → develop → máy chủ thử → main → production |
| Service | Sở hữu | Vì sao đứng riêng |
|---|---|---|
| identity | Tổ chức, dự án, quyền, hạn mức, chi phí | Ranh giới bảo mật của cả hệ thống |
| collector | Thu thập web, Search Console, thứ hạng, từ khoá | Nặng vào ra, chạy nền, giới hạn tốc độ theo nhà cung cấp |
| knowledge | Hồ sơ doanh nghiệp, bản đồ thị trường, kế hoạch nội dung | Chạy theo chu kỳ tuần/tháng |
| intelligence | Tín hiệu → chẩn đoán → hành động → kết quả → bộ nhớ | Bốn bước phải ghi nguyên tử, tách ra là phải dựng saga |
| workflow | Việc, duyệt, kiểm chứng, nhật ký | Nhịp do con người điều khiển |
| reporting | Chỉ số, bản báo cáo chốt cứng | Truy vấn nặng, tách để không làm chậm đường ghi |
| ai-gateway | Tác vụ AI, model, nhật ký gọi, khoá của khách | Là chokepoint bắt buộc — dựng thành service để không đi vòng được |
Chẩn đoán, hành động và đo kết quả nằm chung một service. Ba thứ phải ghi trong cùng một giao dịch: hành động và hồ sơ đo · ghi thay đổi và khoá cửa sổ quan sát · kết luận và nhả khoá. Tách ra thì mỗi cái thành một saga, và saga hỏng giữa chừng để lại dữ liệu sai mà không ai phát hiện. Chấp nhận một service lớn còn hơn ba saga cho ba câu lệnh giao dịch.
Bảy service là bảy cơ hội để một enum bị định nghĩa lần thứ hai rồi hai bản trôi khỏi nhau. Trong một khối mã duy nhất trình biên dịch bắt được; qua ranh giới mạng thì không ai bắt. Vì vậy mỗi quy tắc có một cổng kiểm tra tự động, hỏng thì dừng build.
Enum, đăng ký loại hành động, định nghĩa chỉ số khai một chỗ; mã Go, SQL và TypeScript đều sinh ra. Máy kiểm tra mã sinh khớp nguồn.
Mọi truy vấn bắt buộc mang mã dự án; mỗi service một tài khoản cơ sở dữ liệu chỉ thấy phần của mình. Có bài kiểm tra tìm đường lách.
Quyền sửa và xoá bị thu hồi ngay ở lần tạo bảng đầu tiên. Sai thì ghi bản ghi mới.
Chỉ cơ chế: xác thực, ghi nhật ký, giao dịch. Công thức chấm điểm thuộc về service sở hữu nó — nếu không, đổi một dòng phải triển khai lại tất cả.
Không tồn tại kết luận nào không trỏ ngược được về dữ liệu gốc. Ép ở tầng ghi.
Việc ghi mức sử dụng nằm bên trong lớp gọi nhà cung cấp — nơi gọi không thể quên.
| Người dùng | Việc hằng ngày | Giá trị nhận được |
|---|---|---|
| Agency SEO khách chính đề xuất | Quản lý nhiều dự án, giao việc cho đội, gửi báo cáo tháng cho khách | Chuẩn hoá quy trình, báo cáo đứng vững khi khách hỏi lại từng con số, chứng minh được việc mình làm có kết quả |
| Quản lý SEO nội bộ | Mở app buổi sáng, xem hôm nay việc gì gấp | Không phải tự dò lỗi trong hàng trăm dòng; hệ thống chỉ ra rào cản chính có bằng chứng |
| Người viết nội dung | Nhận yêu cầu bổ sung nội dung | Biết viết cho truy vấn nào, đối thủ đang phủ gì, và phần nào không được sửa |
| Lập trình viên | Nhận việc kỹ thuật | Yêu cầu nói rõ hiện trạng, kỳ vọng, và cách xác minh |
| Chủ doanh nghiệp | Xem một màn hình mỗi tháng | Bốn câu trả lời: tốt hay xấu · nhờ đâu · đáng lo gì · đội ngũ đang làm gì |
Chi phí chia ba lớp theo nguyên tắc ai tự mua được và độ biến động. Dữ liệu thứ hạng và AI chẩn đoán do nền tảng trả — khách không tự mua được, và chi phí dự đoán được. AI viết nội dung là khoản đắt và biến động gần 20 lần: gói cao bao sẵn một hạn mức, ai cần nhiều hơn thì tự mang khoá riêng.
| Gói | Giá / tháng | Dự án | Chi phí ước tính | Biên gộp |
|---|---|---|---|---|
| Starter | 590.000đ | 1 | ~60.000đ | ~90% |
| Pro | 1.490.000đ | 3 | ~400.000đ | ~73% |
| Agency | 3.990.000đ | 10 | ~1.340.000đ | ~66% |
Đơn giá nhà cung cấp là ước lượng để kiểm tra mô hình, chưa có báo giá thật. Nếu giá thật cao hơn 50%, gói Agency rơi xuống khoảng 50% biên. Khảo giá ít nhất hai nhà cung cấp là việc đang chặn quyết định công bố giá.
Kiểm tra thứ hạng 500 từ khoá mỗi ngày tốn khoảng 390.000đ/tháng cho một website — gần bằng cả gói Pro. Trang bán hàng kiểm tra hằng ngày, bài viết cũ kiểm tra hằng tuần: còn 89.000đ. Giảm 77% chi phí, gần như không mất giá trị chẩn đoán. Đây là điều kiện sống của mô hình kinh doanh, không phải tối ưu kỹ thuật.
Thứ tự bắt buộc theo chuỗi. Không xây phần chẩn đoán khi lịch sử dữ liệu chưa bất biến — không có lịch sử thì không có bằng chứng.
| Mốc | Nội dung | Hoàn thành khi |
|---|---|---|
| M0.1 | Kho contract + sinh mã | Đổi một dòng khai báo → mã Go, SQL, TypeScript đổi theo; CI kiểm mã sinh khớp nguồn |
| M0.2 | Thư viện chung + service mẫu | Có bài kiểm tra chứng minh không lách được cách ly dữ liệu |
| M0.3 | identity | Tài khoản, tổ chức, dự án, quyền, hạn mức |
| M1 | Thu thập dữ liệu | Search Console, thu thập web, thứ hạng, từ khoá, liên kết |
| M2 | Lịch sử | Chỉ ghi thêm, quyền sửa/xoá đã bị thu hồi |
| M3 | Tín hiệu | 15 loại, chỉ phát hiện, không kết luận |
| M4 | Chẩn đoán | Mọi kết luận trỏ được về dữ liệu gốc |
| M5 | Hành động | 6 loại, có cách đo trước khi làm, chống đổi nhiều biến |
| M6 | Vận hành | Giao việc, duyệt, máy kiểm chứng |
| M7 | Kết quả | Đối chứng, ngưỡng đủ dữ liệu, ghi bộ nhớ |
| M8 | Giao diện + báo cáo | Người dùng mở app biết hôm nay làm gì |
tuần-người, đã cộng chi phí microservices
theo khối lượng trên
hoặc cắt phạm vi để rút ngắn
Cắt được: phần tìm cơ hội mới rút gọn · ba quyết định trang phức tạp để sau · báo cáo chỉ giữ tóm tắt điều hành · bỏ nhánh chẩn đoán liên kết ngoài · thanh toán làm tay lúc đầu.
Cách ly dữ liệu giữa các khách · lịch sử bất biến · bằng chứng cho mỗi chẩn đoán · định cách đo trước khi làm · đo kết quả. Cắt những thứ này là cắt chính sản phẩm — phần còn lại chỉ là một bảng số liệu.
| Rủi ro | Vì sao nguy hiểm | Cách chặn |
|---|---|---|
| Chi phí vượt giá bán | Chi phí tăng theo từng khách; bán càng nhiều lỗ càng lớn | Ghi sổ chi phí từ V1 · phân bổ theo mức quan trọng · cầu chì trần chi phí tự ngắt |
| Xây 9 tháng không có khách thật | Xây sai thứ, phát hiện quá muộn | 3–5 dự án thí điểm chạy trên website thật từ tháng thứ hai |
| Phần lõi thành vài câu điều kiện | Mất lợi thế, sản phẩm thành bảng số liệu | Bằng chứng và cách đo là ràng buộc ở tầng dữ liệu, không phải quy ước |
| Lộ dữ liệu giữa hai khách | Một lần là mất toàn bộ uy tín | Hai lớp chặn cộng bài kiểm tra tìm đường lách |
| AI bịa số liệu | Mất uy tín nhanh hơn mọi lỗi khác | Máy soát: mọi con số trong câu AI viết phải có trong dữ liệu gốc |
| Phạm vi phình | 16 hạng mục, đội nhỏ | Bảng cắt phạm vi quyết định trước khi bắt đầu, không phải giữa đường |
| Quyết định | Chặn việc gì | Khuyến nghị |
|---|---|---|
| Khách chính là agency hay đội nội bộ | Thứ tự ưu tiên tính năng vận hành và báo cáo | Agency — trả theo số dự án, doanh thu mỗi khách cao hơn |
| Nhà cung cấp dữ liệu thứ hạng | Công bố giá | So ít nhất hai nhà; lớp trừu tượng bắt buộc dù chọn ai |
| Tự viết bộ thu thập web | Chi phí và mức kiểm soát | Tự viết — đây là dữ liệu nền của toàn hệ thống |
Mỗi bản có luồng, lược đồ dữ liệu, giao diện lập trình, tiêu chí nghiệm thu, bảng rủi ro
Kèm 113 tiêu chí nghiệm thu, xuất ra Excel bằng một lệnh
Chưa bắt đầu — chờ ba quyết định ở mục 09