Mình dùng bộ kit claude-growth audit chính blog ongboit.com của mình, phát hiện 22 vấn đề kỹ thuật + 138 bài thiếu FAQPage schema, sửa xong verify trực tiếp trên live. Đây là câu chuyện thật, từng dòng curl, từng fix, không bịa thêm một con số nào.
Bài viết này đặc biệt ở chỗ: mình không audit site của người khác. Mình audit chính blog mình đang viết bài này. Nếu kit phán sai hay báo lỗi ảo, mình là người đầu tiên biết.
Bạn sẽ thấy mình đọc report audit “rối” ra sao, phân loại cái nào fix trước, sửa thế nào, và quan trọng hơn: 7 mục mình chưa fix và tại sao. Xem thêm về /seo-pipeline nếu bạn chưa biết nó kiểm tra những gì.
TL;DR: Chạy 2 audit pipeline trên ongboit.com (~185 bài). Phát hiện 22 vấn đề kỹ thuật + 138 bài thiếu FAQPage schema. Sửa xong verify-live bằng curl và WP REST: 8/16 finding check-live = FIXED (CSP enforcing, xmlrpc 403, FAQPage 138 bài, robots 25 AI-bot). Điểm composite chỉ nhích nhẹ (Technical 73→80, GEO 57→65, Overall 62→78 (lần đầu 02-06 so sau-fix 18-06, đổi công thức nên kèm caveat)) và có LLM-noise nên không phải bằng chứng chính. 7 mục còn mở vì off-site hoặc rủi ro cao hơn lợi ích.

Tại sao mình tự “soi” blog của mình?
Nếu mình nói bộ kit claude-growth phát hiện lỗi tốt, bằng chứng thuyết phục nhất không phải là demo video hay số liệu tổng quan. Đó là chạy nó lên chính blog mình đang vận hành, rồi xem report nói gì. Mình không có gì để giấu, và nếu kit phán sai thì mình là người đầu tiên biết.
ongboit.com là blog kỹ thuật tiếng Việt, khoảng 185 bài (đo 2026-06-02). Stack: WordPress + Kadence + RankMath Pro + Cloudflare. Mình viết về Claude Code, n8n, SEO/GEO, agentic workflows. Nội dung ổn, traffic đủ để Google Search Console trả dữ liệu thật. Đây là môi trường test lý tưởng: không phải demo site, không phải site có hàng trăm nghìn bài để “pha loãng” lỗi.
Mình chạy 2 pipeline khác nhau. Thứ nhất: /seo-pipeline cho hạ tầng kỹ thuật toàn site (16 agent, 8 category có trọng số, 3 điểm composite). Thứ hai: /blog-audit-pipeline cho chất lượng nội dung portfolio (5 skill/bài, 12 dimension). Hai pipeline này đo hoàn toàn khác nhau, số liệu không được trộn lẫn.
Trước khi fix: report nói gì và mình đọc nó ra sao?
Report audit đầu ra dài, xếp theo ưu tiên P1/P2/P3, mỗi finding có bằng chứng kèm theo. Lần đầu mở lên, mình cũng thấy “rối”. Không phải vì kit viết tệ, mà vì site nào cũng có vấn đề theo nhiều chiều cùng lúc.
Cách mình đọc report: gom 22 finding thành 6 nhóm thay vì đọc từng dòng. Từng nhóm có câu hỏi riêng: cái này ảnh hưởng gì? Fix mất bao lâu? Rủi ro revert là gì?
6 nhóm vấn đề trên ongboit.com (kết quả /seo-pipeline)
| Nhóm | Vấn đề cốt lõi | Mức độ | Nặng nhất |
|---|---|---|---|
| GEO / AI-search | Không có AI Overview citation ở query thương mại; entity graph dở dang; llms.txt lỗ hổng | P1, P1, P3 | Bot AI không “thấy” site đúng cách |
| Tốc độ + hạ tầng | Không CDN; hero không preload; LCP lab mobile ~9.6s; logo 84KB phục vụ vào ô 50px | P2, P2, P3 | LCP mobile lab 9.6s (field CWV vẫn xanh) |
| Bảo mật | CSP chỉ là Report-Only (không chặn gì); xmlrpc.php nhận system.multicall | P2, P2 | CSP giả, xmlrpc lỗ hổng khuếch đại tấn công |
| Kỹ thuật + crawl | 5 link chết, 12 trang thiếu sitemap, 15 gần-orphan, homepage H1 thiếu keyword | P2, P2, P2 | Googlebot crawl không đều |
| Accessibility + Compliance | Ô search không có aria-label; bảng thiếu scope/caption; DSAR chỉ là Gmail cá nhân | P2, P2, P3 | WCAG 1.3.1 / 4.1.2 fail |
| Trang tiền bị bỏ | Trang pricing: 10.332 impression nhưng CTR chỉ 1.79% (dữ liệu GSC) | P1 | CTR thấp = impression thành công bị lãng phí |
Điểm 89/100 “Good” che giấu 138 bài thiếu schema
Đây là bài học đắt nhất mình rút ra. Khi chạy /blog-audit-pipeline trên 185 bài, điểm tổng Portfolio Health ban đầu là 89/100, xếp loại “Good”. Nhìn vào số đó, mình sẽ nghĩ blog ổn.
Sau khi lọc bỏ các “finding tích cực” (khen), con số actionable thật là 873 việc từ tổng 3.314 findings. Và nặng nhất: 138 bài có FAQ section nhưng KHÔNG có FAQPage schema JSON-LD. Không có schema nghĩa là Google và các AI engine (ChatGPT, Perplexity, AI Overviews) không extract được Q&A, mất quyền rich-result và AI-citation eligibility.
Điểm tổng 89 che giấu cái nợ đó. Đây không phải kit báo sai, đây là vấn đề cố hữu của điểm tổng: khi bạn có 185 bài và đa số ổn, bài xấu bị “chìm” trong trung bình. Audit thật sự là để tìm ra cái chìm đó.
Mình phân loại fix thế nào: Auto vs Cần-quyết-định
Sau khi gom finding thành nhóm, bước tiếp theo là phân loại: cái nào fix được ngay (auto hoặc script), cái nào cần mình quyết định vì có rủi ro. Đây là bước quan trọng nhất mà nhiều người bỏ qua.
Kit không tự fix mù. Với mỗi finding, report ghi rõ “fix bằng cách nào, rủi ro là gì”. Mình đọc từng mục và phân loại vào 2 bucket:
- Auto-script / low-risk: aria-label cho input, scope cho bảng, Organization schema JSON-LD, llms.txt, robots.txt, xmlrpc disable. Làm được trong 1 ngày, revert trong 10 giây nếu hỏng.
- Cần-quyết-định: defer CSS render-blocking của Kadence (rủi ro FOUC vì field CWV đã xanh), defer JS AdSense (rủi ro doanh thu), Wikidata entity + hiện diện off-site (chiến lược dài hạn, không làm ẩu). Mình chọn không làm các mục này thời điểm này.
Với FAQPage schema trên 138 bài: mình đã thử inject qua RankMath meta API trước, và phát hiện cách đó có tiền lệ crash WP admin. Giải pháp an toàn là inject inline JSON-LD vào body bài viết bằng block <!-- wp:html -->. Site luôn HTTP 200 xuyên suốt, không có downtime.
Implementation: Cái mình đã làm (verify-live từng bước)
Mình thực hiện các fix theo thứ tự từ rủi ro thấp đến cao, ghi forensic log cho mỗi thay đổi với cơ chế revert. Bảng dưới là changelog verify-live, không phải kế hoạch.
| Fix | Vấn đề gốc | Cách làm | Verify live |
|---|---|---|---|
| xmlrpc.php disable | xmlrpc nhận system.multicall (lỗ hổng khuếch đại) | Disable cứng: methods=[], RSD/X-Pingback gỡ, block 403 | POST system.multicall = 403 |
| CSP enforce | Content-Security-Policy chỉ là Report-Only | Promote Report-Only sang enforcing, thêm blob:/worker-src để AdSense/GTM không vỡ | Header không còn -Report-Only; 3 trang 200, ads còn sống |
| robots.txt + llms.txt | 11 AI-bot được Allow; llms.txt thiếu bài chủ lực | Rebuild robots.txt (11 -> 25 AI-bot Allow); llms.txt 67 link / 9 cluster; llms-full.txt 35 pillar (~1.11MB) | curl 200 text/plain; ChatGPT-User allowed |
| Organization schema | Schema thiếu url/description/foundingDate/contactPoint; sameAs chỉ có FB | Thêm YouTube @ongboitvuitinh vào sameAs (Person + Organization), khớp handle FB; thêm foundingDate ISO 2026-03-19 | 5 platform, đồng bộ homepage + article |
| Speakable schema | Thiếu speakable (GEO: AI voice assistant) | Inject speakable vào bài chủ lực | Verify live trên curl |
| Accessibility labels | Ô search không aria-label (WCAG 1.3.1); newsletter input tương tự | Thêm aria-label qua code-snippets plugin | Input search + newsletter có label lập trình |
| Bảng scope/caption | Bảng so sánh thiếu scope attribute + caption | Thêm scope=col/row + caption vào 31/31 bảng | 31/31 bảng verify |
| hreflang vi/x-default | Thiếu hreflang trên homepage + bài chủ lực | Thêm hreflang vi + x-default qua RankMath | Header hreflang đúng format |
| Homepage rebuild | H1 thiếu “Claude Code”; meta desc cũ; OG image vuông; category grid lộn xộn | H1 thêm “Claude Code”; meta desc 155 ký tự; og.webp 1200×630; rebuild category grid | RankMath updated, og:image đúng tỉ lệ |
| FAQPage schema 138 bài | 138 bài có FAQ section nhưng 0 FAQPage JSON-LD | Inject inline JSON-LD qua block wp:html (né lỗi crash RankMath schema meta đã biết) | FAQPage verify live, 0 bài còn thiếu |
| Title + meta 39+22 bài | 39 bài title >60 ký tự; 22 bài meta >160 ký tự | Đọc từng bài, viết lại keyword-front-load; loại suffix thừa; bám fact bài | 0 bài >60 ký tự title; 0 bài >160 ký tự meta |
| Pricing CTR | 10.332 impression, CTR 1.79% (GSC) | Refresh title + meta trang pricing | Đã đẩy live 2026-06-15 |
Một điều mình thấy quan trọng hơn bất kỳ fix nào: mình ghi forensic log cho từng thay đổi. Cơ chế revert cho mỗi mục. Nếu CSP enforcing làm vỡ ad hay GTM, mình revert trong 10 giây. Đây là cách làm với site thật, không phải site demo.
Kết quả: before vs after, thật và đủ thận trọng
Mình sẽ nói thẳng về cách đọc kết quả. Điểm composite (Technical, GEO, Overall) có thành phần LLM-scoring nên mang noise +/- giữa các lần chạy. Thay đổi nào nhỏ hơn 5 điểm là đi ngang, không phải “tốt lên”. Bằng chứng cứng là verification matrix và các fix verify-live cụ thể (CSP, xmlrpc, FAQPage, llms.txt), không phải điểm composite đơn thuần.
Composite scores: lần đầu (02-06) đến sau fix (18-06)
Caveat quan trọng: audit lần đầu (02-06) chấm bằng công thức CŨ, còn 18-06 dùng det-blend-v2 mới, nên delta composite KHÔNG so 1-1, một phần là do đổi cách chấm chứ không phải site tốt lên. Đừng đọc đây là “SEO tăng X điểm”. Bằng chứng thật là 8/16 finding fix verify-live và các item before/after cụ thể bên dưới.
Về chi tiết từng category, đa số tăng (accessibility, schema, technical, GEO) nhờ các fix ở trên; vài mục đi ngang hoặc giảm nhẹ. Hai mục giảm thật mình không giấu: backlink/brand authority (off-site, không fix được bằng code) và sitemap (đang theo dõi sau khi rebuild homepage). Con số category cụ thể nằm trong 2 report đầy đủ (link cuối bài); ở đây mình giữ bằng chứng cứng là verification matrix.
Verification matrix: 16 finding re-check
Muốn chạy đúng quy trình audit + fix này lên site của bạn?
Bộ kit claude-growth gói /seo-pipeline + /blog-audit-pipeline thành 1 lệnh. $149 một lần, dùng trọn đời, update khi ra version mới.
Xem 2 report thật ở trên trước khi mua · Kit + checkout tiếng Anh
Cái còn mở (và tại sao mình chủ ý chưa làm)
Có 7 mục trong danh sách “chưa fix”. Mình nói thẳng lý do, vì giấu đi thì report mất uy tín:
- Wikidata entity + off-site presence (Reddit/X/Quora): chiến lược dài hạn, founder-led. Blog ongboit.com còn non trẻ, notability chưa đủ cho Wikidata. Làm ẩu sẽ bị reject.
- Defer CSS render-blocking của Kadence: field CWV desktop đã FAST (LCP 1.09s, INP 38ms, CLS 0.03 theo PSI API 2026-06-12). Defer CSS có nguy cơ FOUC. Rủi ro > lợi ích ở thời điểm này.
- Defer JS AdSense: rủi ro doanh thu ads. Không làm mù.
- AVIF format: cần image plugin, Cloudflare free plan không convert. Bài toán infrastructure, không phải audit.
- SERP ranking + AI-Overview citation định lượng: fix vừa deploy 2026-06-17, chưa đủ thời gian để Google/AI re-crawl và đánh giá lại. Mình sẽ đo lại sau 30-60 ngày.
Kit chỉ ra TẤT CẢ. Fix cái đáng fix. Và biết DỪNG ở chỗ rủi ro > lợi ích. Đó là khác biệt giữa audit có trách nhiệm và “fix mù”.
5 bài học thật từ việc tự audit chính blog mình
1. Điểm tổng “tốt” là cái bẫy phổ biến nhất
Portfolio Health 89/100 trông ổn. Nhưng ẩn bên trong là 138 bài mất AI-citation. Nếu mình dừng lại ở điểm tổng, mình sẽ không biết. Bài học: audit thật là xem breakdown category và per-article finding, không phải điểm composite đơn thuần.
2. Verify-at-source trước khi fix
Mình fetch live từng bài trước mỗi thay đổi. Kết quả: 6 finding report là “chưa fix” thực ra đã được fix từ lần chỉnh sửa trước, không phải lỗi mới. Nếu không verify-at-source, mình sẽ “sửa” lại thứ đã ổn và có thể gây regression. Đây là nguy cơ thật khi dùng bất kỳ audit tool nào.
Xem thêm về GEO và cách AI engine chọn nguồn để trích dẫn nếu bạn muốn hiểu tại sao llms.txt và sameAs lại quan trọng trong kỷ nguyên AI search.
3. Bảo mật “gần đúng” nguy hiểm hơn không có
CSP Report-Only trông như có bảo mật. Nhưng nó không chặn gì. xmlrpc.php mở system.multicall nghĩa là một attacker có thể gửi 100 lệnh trong 1 request. Hai cái này không phải lỗi hiển nhiên khi nhìn vào WP admin, nhưng curl ra header là thấy ngay.
4. Fix ít nhưng verify từng cái tốt hơn fix nhiều và không chắc
Mình fix 12 loại vấn đề, mỗi cái có forensic log và revert path. Không có cái nào “hy vọng nó ổn”. Site luôn HTTP 200 xuyên suốt. Tổng thời gian từ khi bắt đầu đến khi verify xong: khoảng 2 ngày làm việc, không phải 2 tuần sprint.
5. Contrarian: kit tốt nhất là kit biết bảo bạn DỪNG lại
Hầu hết tool SEO/audit sẽ liệt kê càng nhiều “lỗi” càng tốt để trông impressive. Kit này đánh dấu rõ 3 mục mình không nên fix lúc này (defer CSS vì CWV xanh, defer AdSense vì doanh thu, Wikidata vì notability). Cái đó, theo mình, mới là dấu hiệu của tool đáng tin.
Câu hỏi thường gặp
Cách này áp dụng được cho site khác không, hay chỉ đúng với ongboit.com?
Pipeline chạy được trên bất kỳ WordPress site nào có Google Search Console kết nối. Các finding sẽ khác (số lỗi, loại lỗi), nhưng quy trình giống nhau: 6 nhóm audit, phân loại Auto vs Cần-quyết-định, verify-live từng fix. Điều duy nhất site-specific là ngưỡng risk tolerance của bạn, ví dụ defer CSS có thể an toàn hơn trên site khác nếu CWV chưa xanh.
Mất bao lâu và chi phí bao nhiêu?
Mình mất khoảng 2 ngày làm việc từ audit đến verify-live đủ các fix trong phạm vi low-risk. Audit chạy tự động (~1-2 giờ). Chi phí: bộ kit claude-growth $149 một lần, dùng mãi. Chi phí token Claude API khoảng $0.15-0.40 tiền mặt mỗi bài với Max subscription, audit site tổng thể thêm chút. Không có phí subscription tháng nào thêm ngoài Claude sub bạn đang dùng. Bạn xem thêm tại trang kit claude-growth.
Nếu làm lại từ đầu, mình sẽ thay đổi gì?
Mình sẽ chạy /blog-audit-pipeline song song với /seo-pipeline từ ngày đầu, không phải làm tuần tự. Hai pipeline đo hoàn toàn khác nhau: một bên là hạ tầng kỹ thuật, một bên là chất lượng từng bài. Chạy tuần tự mất thêm 1 ngày. Mình cũng sẽ set up forensic log từ bài thứ nhất thay vì thêm vào giữa chừng. Theo nghiên cứu GEO của Princeton (arXiv 2311.09735, 2023), trang có sourced statistics được trích dẫn nhiều hơn 40%, điều đó lẽ ra phải khiến mình ưu tiên FAQPage schema từ sớm hơn.
Bước tiếp theo
Mình đã verify xong 8/16 finding. 7 mục còn lại là bài toán dài hạn (off-site authority, Wikidata, CDN AVIF) hoặc rủi ro cao hơn lợi ích ở thời điểm này. Kết quả traffic/ranking sau 30-60 ngày mình sẽ viết ở Case Study phần 2 khi GSC có đủ dữ liệu.
Điều mình có thể nói ngay bây giờ: site đã có CSP enforcing, xmlrpc đóng, 138 bài có FAQPage schema, 25 AI-bot được phép crawl, Organization schema đủ field. Đây là nền tảng để Google và AI engine bắt đầu đánh giá lại. Số liệu sau 60 ngày mới là bằng chứng outcome thật.
Đối chiếu report thật: audit lần đầu (02-06): hạ tầng · nội dung; sau khi fix (18-06): hạ tầng. Bộ kit chạy toàn bộ quy trình này là claude-growth, $149 một lần (trọn đời, update khi ra version mới), tại nextgrowth.gumroad.com/l/claude-growth.
Xem thêm: Audit hạ tầng site bằng /seo-pipeline | Audit portfolio nội dung bằng /blog-audit-pipeline | GEO là gì | AI Overview là gì
