ongboit.com — SEO + GEO Audit

URL: https://ongboit.com Date: 2026-06-16 Duration: 35m 48s Business: Publisher Market: Auto-detected Mode: reaudit Kit: Claude-Growth v1.2.1 T2 · GSC + DataForSEO MCP + Firecrawl MCP
Technical + CWV
73 /100
Fair
GEO + AEO
62 /100
Fair
Overall Search-Readiness
74 /100
Fair
74 Technical
74 Schema
76 Sitemap
71 Performance
100 GEO
60 Platform
30 Brand
80 Image
87 Accessibility
84 Compliance
48 GSC / Google
74 On-Page
80 Visual

This SEO + GEO Audit scores the site on three composite indices — Technical + Core Web Vitals, GEO + AEO readiness, and an Overall Search-Readiness score — built from specialist agents covering technical health, schema, sitemap, performance, AI-crawler access, llms.txt, platform readiness, brand authority, and on-page quality. Every issue is ranked by fix ROI; ready-to-paste fix artifacts and a 90-day roadmap follow.

How to Read This Report

Ordered by what to do, in 3 tiers:

  • ACT (top) — what to fix, in order: Top-3 Priority · Quick Wins · Findings by severity · 90-Day Roadmap · 🤖 Apply with Claude Code (copy-paste prompt) + the ready-to-paste robots.txt / llms.txt artifacts in the Autofix Bundle.
  • INVESTIGATE (middle) — drill down: Score Breakdown · per-category Deep Dives (incl. on-page audit + performance levers) · the 7 charts (CWV, GEO radar, GSC, AI-crawler table, platform, striking-distance) · per-skill cards.
  • TRUST (bottom) — confidence the run was sound: Verification (10 gates) · Methodology timeline · Appendix (formulas, tools, tier coverage, capability checklist).

To apply fixes: hand Claude Code the report MD plus the fixes/ folder, then paste the prompt in the "🤖 Apply These Fixes with Claude Code" section below.

Glossary — what the terms mean

CWV (Core Web Vitals) — Google's UX metrics: LCP (load), INP (responsiveness), CLS (visual stability). They feed ranking + the Technical score.

LCP — Largest Contentful Paint — when the largest element renders. Good <2.5s, Poor ≥4.0s. Driven mostly by server response time (TTFB).

INP / CLS — INP = Interaction-to-Next-Paint (target <200ms, replaced FID). CLS = layout shift (target <0.1).

GEO / AEO — Generative / Answer Engine Optimization — being citable by AI engines (ChatGPT, Perplexity, Gemini, AI Overviews), not just ranking in blue links.

llms.txt — An emerging 2026 manifest that tells LLMs which URLs to read. A broken/missing one costs AI-citation coverage.

AI crawler access — Whether bots like GPTBot / ClaudeBot / PerplexityBot are allowed in robots.txt. Blocking them removes you from AI answers.

Schema (structured data) — JSON-LD that labels your content (Article, FAQ, Organization, Person…). Helps both rich results and AI extraction.

Canonical — The <link rel="canonical"> tag declaring the preferred URL for a page — prevents duplicate-content dilution.

Striking distance — Keywords ranking on page 2 (positions 11-20) with real impressions — small wins can push them to page 1.

Crawl budget — How many pages a search engine will fetch per visit. Wasted on junk URLs = important pages crawled less often.

E-E-A-T — Experience, Expertise, Authoritativeness, Trustworthiness — Google's content-quality framework.

Progress since the 2026-05-29 baseline
What moved, what got fixed, and what is intentionally next-cycle — the ROI of this audit cycle.
Overall
61 74
▲ +13
Technical + CWV
71 73
≈ +2 flat
GEO + AEO
58 62
≈ +4 flat
Geo
62100 (+38)
Compliance
5184 (+33)
Image
6080 (+20)
Schema
6274 (+12)
Performance
6271 (+9)
Sitemap
7276 (+4, ≈flat)
Brand
2830 (+2, ≈flat)
Accessibility
8687 (+1, ≈flat)
Technical
7874 (-4, ≈flat)
Platform
6460 (-4, ≈flat)
Bar = current score; the dark tick marks the baseline. Green = improved, red = regressed, grey = within ±5 scoring noise (LLM-judged categories swing run-to-run and the scoring formula changed between audits) — treat grey as flat. The verification matrix below + measured categories are the hard evidence, not these soft category deltas.
Prior-finding verification — 18 of 57 fixed
18
7
32
18 fixed   7 partial   32 not-fixed / out-of-scope
Show all 57 prior findings
✅ Fixed (18)
C1No cookie consent bannerComplianz live + Consent Mode v2 (all 7 storage denied default); curl-verified
C2/privacy 301 to blog postNow 301 -> /chinh-sach-bao-mat/ (bilingual policy)
C3Zero FAQPage on flagshipFAQPage now on 199/202 articles + 2 backfilled this session; HowTo deprecated (skip)
H4No top-level OrganizationOrganization entity @id #organization live (Rank Math Company)
H5Author Person missing E-E-A-TjobTitle/knowsAbout/sameAs/worksFor enriched (snippet #8) + real avatar
H6Privacy policy missing GDPR/CCPABilingual policy w/ GDPR/CCPA/PDPD/controller/legal-basis/SCC/breach/DPO
H12llms.txt 301 redirectNow HTTP 200 at root (snippet #9)
H13llms-full.txt missingCreated, 748KB, 25 posts, HTTP 200
H14llms.txt prose not markdown linksRegenerated, 25 markdown links + sections
M6robots.txt no AI crawler directives11 AI crawlers explicit Allow (snippet #9)
M7llms.txt 32 days staleRegenerated Last-Updated 2026-06-15
M9llms.txt covers 6/171 postsNow 25 verified links
M12No granular cookie categoriesComplianz 3-category opt-in
M13No DPO + cross-border clausePolicy has DPO exemption + cross-border (SCC/DPF)
L2robots.txt no llms.txt SitemapAdded - BUT reaudit flags it as a NEW issue (Google parses text/plain as XML); reconsider
L3llms.txt author plain textNow markdown links
L6Avatar alt='Avatar'Now alt='Nguyen Minh The' (real avatar)
L8Email inconsistencyAligned to gmail across policy/terms/contact
🟡 Partial (7)
H1All 6 security headers missing5/6 added (HSTS/X-Frame/nosniff/Referrer/Permissions); CSP intentionally skipped
H3sameAs under-linked + dup OrgDuplicate Org removed + top-level Org created; sameAs still 4 platforms (X/YT/Wikidata not added)
M2Flagship cite zero external sourcesSeveral articles do cite sources now (content audit); inconsistent
M3xmlrpc.php exposedxmlrpc_enabled=false (auth blocked) + X-Pingback removed; BUT POST still returns 80 methods incl pingback - ne
M11No DSAR formPolicy has DSAR email + 30-day SLA; no dedicated form
M18Color contrast muted textFooter legal-link contrast fixed (9.9:1); muted body text marginal AA
M19Focus indicatorsSearch input OK; email input outline:none still open
□ Not fixed (out of scope) (30)
C4Zero Reddit presenceStrategic off-site - not addressed
C5No Wikipedia/WikidataStrategic off-site - not addressed
H2Severe SERP visibility gapStrategic; slightly improved 4->8 ranked kw but still page 4-8
H7Authority deficitStrategic backlinks - not addressed
H816 earned mentions not backlinkingStrategic - not addressed
H9Google Fonts render-blockingInfra/theme (Kadence local-fonts toggle) - not addressed
H10TTFB 657ms no CDNInfra - not addressed (field LCP still FAST)
H11LCP image no fetchpriorityNot addressed
H15HowTo schema missingGoogle deprecated HowTo rich result - skip
H16Not top-10 organicStrategic - not addressed
H17No X/Twitter accountStrategic off-site - not addressed
H18Zero viblo/tinhte presenceStrategic off-site - not addressed
M1Footer FB/X social hrefs emptyFooter legal-nav added this session; theme social block not addressed
M4Zero speakableClaimed via snippet #5 but reaudit grep = 0 live hits - NOT deployed
M5dateModified == datePublishedNot addressed (note: dateModified now updates on edits)
M8No markdown alternatesNot addressed
M10Google Fonts Schrems IIInfra - not addressed
M14IG/FB reposts no backlinkStrategic - not addressed
M15No YouTube channelStrategic - not addressed
M16Zero Quora presenceStrategic - not addressed
M17Inputs no programmatic labelReaudit confirmed still open (search + email inputs)
M21No image sitemapNot addressed
M226 render-blocking CSSInfra/theme - not addressed
M24Perplexity not surfacingStrategic - not addressed
L1308 vs 301 redirectNot addressed
L4SearchAction homepage onlyNot addressed
L5Tables no scope/captionReaudit confirmed still open
L7buymeacoffee CLSNot addressed
L9GitHub bio no linkStrategic - not addressed
L10No Bing/IndexNowNot addressed (user deprioritized)
⏭ Intentional skip (1)
M20sitemap noindex headerRank Math default - intentional, not a real issue (false-positive)
— Unauditable (1)
M23DataForSEO Backlinks blockedSubscription still inactive (40204)
✅ Biggest wins this cycle
Geo +38, Compliance +33, Image +20, Schema +12
🟡 Still in progress
H1, H3, M2, M3, M11
□ Out of scope → next cycle
Not-fixed are dominated by strategic off-site (Brand=28 roadmap: Reddit/X/YouTube/Wikidata/backlinks) + infra (TTFB/CDN/fonts/CSS) - intentionally deferred. The
⚠ 1 critical/high issue OUTSIDE the headline score
Overall measures search-readiness; these legal / accessibility / UX risks are scored separately and do not lower it — but they need attention:
  • P1 · Accessibility — Search + newsletter inputs have no programmatic label (WCAG 1.3.1/4.1.2)

The 3 Problems Hurting You Most Right Now

#1

speakable property not live despite claimed fix

grep speakable on home + 2 articles = 0 hits

→ Fix: 2h · +voice/AI assistant readout signal
#2

xmlrpc.php not fully blocked - POST still returns 80 methods incl pingback

POST system.listMethods -> HTTP 200, 80 methods; pingback.ping present

→ Fix: 2h · Closes pingback-DDoS + brute-force amplification
#3

robots.txt declares llms.txt as a Sitemap - Google parses text/plain as XML (GSC errors)

robots.txt Sitemap: https://ongboit.com/llms.txt; file is text/plain

→ Fix: 2h · avoids GSC parse errors

Quick Wins — Shippable This Week

18.0h total

6 fixes shippable this week (effort = S). Estimated overall score lift +5-15 points.

  • R-H3speakable property not live despite claimed fix 2h +voice/AI assistant readout signal
  • R-M1robots.txt declares llms.txt as a Sitemap - Google parses text/plain as XML (GSC errors) 2h avoids GSC parse errors
  • R-H4Search + newsletter inputs have no programmatic label (WCAG 1.3.1/4.1.2) 2h WCAG AA compliance
  • R-M2Organization missing url, description, foundingDate, contactPoint 2h Knowledge Graph resolution
  • R-M5Comparison tables: 13 th, 0 scope, 0 caption 2h WCAG AA
  • R-H2Content-Security-Policy absent on all public pages 8h XSS hardening; start report-only

Executive Summary

74/100

Overall Score: 74/100 (Fair)

Website audit found 41 issues across 13 weighted categories. Technical fundamentals score 73/100 (Fair), while AI search readiness scores 62/100 (Fair).

Issue Distribution

P1: 10 P2: 12 P3: 19

Priority breakdown by severity — 41 findings total

The 3 Biggest Problems

  1. R-H3
  2. R-H1
  3. R-M1

Audit Details:

  • URL: https://ongboit.com
  • Business Type: Publisher (confidence: medium)
  • Market: Auto-detected
  • Pages Analyzed: 8
  • Sampled Deep: 8 business-type-prioritized pages

Score Breakdown

Overall Composite

CategoryScoreWeightWeightedRating
Geo 100/100 25% 25.0 Excellent
Brand 30/100 13% 3.9 Critical
Platform 60/100 6% 3.6 Fair
Schema 74/100 13% 9.6 Fair
Technical 74/100 18% 13.3 Fair
Image 80/100 6% 4.8 Good
Performance 71/100 13% 9.2 Fair
Sitemap 76/100 6% 4.6 Good
Accessibility* 87/100 Good
Compliance* 84/100 Good
Google-Api* 48/100 Poor
Page-Deep-Dive* 74/100 Fair
Visual* 80/100 Good
OVERALL 100% 74.0 → 74/100 Fair

* Informational categories with 0% weight in overall formula — surfaced from agent findings for context but not double-counted toward overall score.

Three Composite Scores

CompositeScoreRatingFormula
Technical + Core Web Vitals73/100FairTechnical*0.45 + Performance*0.35 + Sitemap*0.20...
GEO + AEO Readiness62/100FairBrand*0.30 + Schema*0.25 + Platform*0.25 + Geo*0.20...
Overall Search-Readiness74/100FairTechnical*0.18 + Schema*0.13 + Sitemap*0.06 + Performance*0.13 + Geo*0.25 + Plat...

Score Interpretation

  • 90-100: Excellent
  • 75-89: Good
  • 60-74: Fair
  • 40-59: Poor
  • 0-39: Critical

How this audit was conducted

Audit timeline

Audit ran in 35m 48s across 11 phases. 13 category scores computed.

0_setup
Setup
7s
1_discovery
Live Discovery
1s
2_sampling
Page Sampling
5s
3_issues
Issue Catalog Scan
1s
4_agents
Parallel Agents
33m5s
5_synthesis
Synthesis
2m29s
6_score
Score Calculation
0s
6.5_verification
Verification (10 gates)
0s
7_deliverable
Deliverable Generation
0s
8_pdf
PDF Generation
0s
9_cleanup
Cleanup
0s

Total: 35m 48s

Specialist tools used (click to inspect)

Specialist agents ran in parallel during Phase 4. Each examined a different dimension of your site. Click any agent to see its sub-scores, cost, and output file.

0/100
Why this tool:

2-4 sentence executive summary

geo-accessibility 87/100
Why this tool:

ongboit.com sits at 87/100 (AA, good) - up 1 point from the 86 baseline. Two baseline items verified fixed by grep: the author avatar now has alt text (L6) and the footer legal nav link was darkened to #93c5fd giving 9.9:1 contrast on the dark footer (this session's stated change CONFIRMED).

Strong fundamentals persist: lang="vi", single H1 with clean H1->H2->H3 nesting, 26/26 article images with…

geo-brand-mentions 30/100
Why this tool: Off-site brand authority scan (Reddit/YouTube/Wikipedia/LinkedIn)

Off-site brand authority essentially unchanged (28->30): entity graph cleaner (Organization + deduped sameAs) but strategic presence gaps remain - no X/Reddit/YouTube/Quora/Wikidata, 16 earned mentions un-recovered. Brand=28 roadmap: off-site account-building + backlink recovery, not a code task.

geo-compliance 84/100
Why this tool:

ongboit.com compliance jumped from 51/100 (Poor) at the 2026-05-29 baseline to 84/100 (Good). All seven claimed fixes are curl-verified: Google Consent Mode v2 is live with every storage type denied by default and geo-targeted to 32 EEA/EU regions via Complianz; the bilingual VI/EN privacy policy covers GDPR, CCPA and Vietnam PDPD (Decree 13/2023) with data-controller, legal-basis, SCC, cross-bord…

ComponentScoreRating
Cookie Consent Banner95/100Excellent
Consent Mode V295/100Excellent
Privacy Policy Quality88/100Good
Terms Of Use90/100Excellent
Security Headers72/100Fair
Dsar Mechanism60/100Fair
Third Party Tags85/100Good
Data Subject Rights85/100Good
Footer Legal Links100/100Excellent
Privacy Redirect100/100Excellent
geo-crawlers 97/100
Why this tool: AI bot robots.txt audit (11 bots)

robots.txt fully remediated. All 11 targeted AI crawlers have explicit Allow: / stanzas covering every major citation-generating platform (ChatGPT, Claude.ai, Perplexity, Google AIO, Apple Intelligence) plus training crawlers. Score rises from 78 to 97. Only gap is 3 secondary crawlers (cohere-ai, Amazonbot, meta-externalagent) lacking explicit stanzas — low-priority since wildcard inheritance is…

geo-llmstxt 88/100
Why this tool: llms.txt validate + generate

llms.txt fully remediated from a broken 301→404 state to a well-structured, spec-compliant file at HTTP 200. llms-full.txt is newly present at 748 KB with 25 articles and per-article metadata. Score rises from 62 to 88. Remaining gaps are:

  1. RSL 1.0 license field — medium priority for AI training trust signals;
  2. missing ETag/Last-Modified response headers — medium priority for crawl efficienc…
geo-platform-optimizer 60/100
Why this tool: Per-platform readiness (AIO/ChatGPT/Perplexity/Gemini/Copilot)

AI-platform crawl/ingest foundation is now strong (robots AI-crawlers 97, llms.txt 88, llms-full present) - infrastructure side fixed. But actual citation requires top-10 ranking + community/authority, still weak (page 4-8, no Reddit/X). Strategic, off-site.

geo-schema 74/100
Why this tool: Winner over seo-schema — sameAs 14-platform strategy, per-type GEO rules

Score improved from 62 to 74 (+12 points). All major structural fixes confirmed live: Organization entity (@id #organization) with logo and sameAs 4 platforms, no duplicate Organization block, Author Person with E-E-A-T properties (jobTitle, knowsAbout, sameAs, worksFor), FAQPage on sampled articles, BreadcrumbList, WebSite+SearchAction.

Critical gap: speakable property was claimed as fixed in bas…

geo-technical 74/100
Why this tool: Winner over seo-technical — 449 lines, SSR 15pt dedicated, 11-bot matrix

Reaudit of https://ongboit.com on 2026-06-16 vs baseline 2026-05-29 (score 78). Technical score: 74/100. The site is a WordPress installation with strong server-side rendering (all content visible in initial HTML, AI crawlers can read everything), good meta tag coverage, clean URL structure, and correct mobile viewport configuration.

The robots.txt is exemplary for AI SEO — 11 AI crawlers explicit…

seo-backlinks 0/100
Why this tool: Profile health + toxic links + authority gap

Backlinks API access denied (subscription inactive), identical to baseline limitation M23. Indirect DataForSEO signal shows a thin link profile. Authority-building untouched this session - strategic.

seo-google 48/100
Why this tool:

SERP visibility weak but improving: 8 ranked keywords (VN) vs baseline 4, best #12. High-volume terms still page 4-8. AI Overview appears on target queries but ongboit below the citation threshold. Strategic authority/backlink gap, not addressed this session.

seo-images 80/100
Why this tool:

Image SEO strong: 100% alt-text coverage across sampled images, WebP heroes, author avatar carries the real name (L6 fixed). Remaining: no image sitemap (M21) + missing explicit width/height (minor CLS).

seo-page 74/100
Why this tool:

ongboit.com demonstrates a strong on-page SEO baseline for a Vietnamese-language WordPress blog: all 4 pages pass canonical self-referencing, have 100% image alt coverage (78/78 images), no noindex anomalies, and the 3 article pages carry deep structured data (BlogPosting + FAQPage + BreadcrumbList + Person).

Meta descriptions are well-crafted and within length targets on article pages. The site h…

seo-performance 71/100
Why this tool: Core Web Vitals + field vs lab data

Field Core Web Vitals FAST (CrUX desktop LCP 1.09s / INP 38ms / CLS 0.03). Lab mobile perf 82. Main gap: origin TTFB slow (no CDN, 288/305 URLs) - infra (H10), unchanged. Field CWV FAST caps real-world severity at P2.

seo-sitemap 76/100
Why this tool: Sitemap health + URL structure analysis

Sitemap architecture healthy (305 URLs, 70 legit noindex tag/category pages, current lastmod). New minor issue: robots.txt 'Sitemap: llms.txt' (added this session) points Googlebot at a plain-text file as if XML - remove to avoid GSC parse errors.

seo-visual 80/100
Why this tool:

Above-fold renders cleanly; field CLS ~0.03 (FAST). Footer legal-link contrast fixed this session (9.9:1). Minor: muted body text passes AA only marginally; email input lacks a visible focus indicator.

High Priority — Fix within 1 week

10 issues

These issues significantly limit your reach. Plan to fix within the next sprint. Issues ranked by impact-to-effort ratio — highest-ROI fixes appear first.

R-H1

xmlrpc.php not fully blocked - POST still returns 80 methods incl pingback

High

The attack surface fix only blocked auth methods; pingback DDoS vector is still open.

2h (S) HIGH Closes pingback-DDoS + brute-force amplification

Recommended fix

Block /xmlrpc.php at Apache/Traefik (Deny all) - the WP filter alone is insufficient

Technical details for your developer
POST system.listMethods -> HTTP 200, 80 methods; pingback.ping present
xmlrpc.php not fully blocked - POST still returns 80 methods incl pingback
technical
geo-technical
R-H3

speakable property not live despite claimed fix

High

The voice/AI-readout signal is missing - claimed baseline fix did not deploy.

2h (S) HIGH +voice/AI assistant readout signal

Recommended fix

Add speakable.cssSelector to BlogPosting via rank_math/json_ld filter; verify with curl|grep

Technical details for your developer
grep speakable on home + 2 articles = 0 hits
speakable property not live despite claimed fix
schema
geo-schema
R-H4

Search + newsletter inputs have no programmatic label (WCAG 1.3.1/4.1.2)

High

Screen-reader users cannot identify the search and email fields.

2h (S) HIGH WCAG AA compliance

Recommended fix

Add aria-label or visually-hidden label to both inputs

Technical details for your developer
home search (type=search) + email input have no label/aria-label, only placeholder
Search + newsletter inputs have no programmatic label (WCAG 1.3.1/4.1.2)
accessibility
geo-accessibility
R-H2

Content-Security-Policy absent on all public pages

High

No CSP means XSS injection surface is uncapped (3 plugin vectors).

8h (M) MEDIUM XSS hardening; start report-only

Recommended fix

Add CSP-Report-Only first, then enforce default-src self

Technical details for your developer
No CSP header on home/article (only frame-ancestors on wp-login)
Content-Security-Policy absent on all public pages
technical
geo-technical
R-H5

Severe SERP visibility gap - 8 ranked keywords, 1 on page 2, rest pos 31-87

High

The site barely ranks; high-volume terms sit on page 4-8.

24h (L) HIGH Top-10 for 2-3 mid-vol kw -> 10-20x ETV

Recommended fix

Authority + on-page depth + internal-link the striking-distance pages

Technical details for your developer
DataForSEO VN: 8 kw, best #12; 'claude code' 33,100/mo at #69
Severe SERP visibility gap - 8 ranked keywords, 1 on page 2, rest pos 31-87
google
seo-google
R-H6

AI Overview present on target queries but ongboit not cited (page 4-8)

High

Site is crawlable by AI engines but ranks too low to be cited.

24h (L) HIGH AIO/ChatGPT/Perplexity citation

Recommended fix

Reach top-10 + add community/authority signals

Technical details for your developer
ai_overview in SERP for claude code gia re/eval/llm; ongboit 39-87
AI Overview present on target queries but ongboit not cited (page 4-8)
platform
geo-platform-optimizer
R-H7

No X/Reddit/YouTube/Quora/Wikipedia/Wikidata - highest-weight AI-citation sources absent

High

The brand has almost no off-site footprint for AI engines to trust.

24h (L) HIGH entity confidence + AI citation

Recommended fix

Create Wikidata + X + YouTube; recover 16 earned mentions as backlinks

Technical details for your developer
sameAs=4; no X/Reddit/YouTube/Wikidata
No X/Reddit/YouTube/Quora/Wikipedia/Wikidata - highest-weight AI-citation sources absent
brand
geo-brand-mentions
R-H8

Thin backlink profile (1-2 referring domains on ranked kw); DataForSEO Backlinks API inactive

High

Authority is the #1 blocker for the page-4-8 rankings.

24h (L) MEDIUM ranking lift

Recommended fix

Backlink outreach + recover earned mentions (H8)

Technical details for your developer
avg referring_domains 1.0-1.3; backlinks_summary 40204
Thin backlink profile (1-2 referring domains on ranked kw); DataForSEO Backlinks API inactive
brand
seo-backlinks
CR1

Internal links pointing to broken pages — 10 pages🔍 site-crawl

High

Internal links point to URLs that 404 — they leak link equity and frustrate readers.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Fix or remove the broken internal links, or publish the missing target pages.

Technical details for your developer
10 URLs affected: ongboit.com/keyword-cannibalization/; ongboit.com/keyword-cannibalization/; ongboit.com/keyword-cannibalization/; ongboit.com/codex-seo/; ongboit.com/codex-cli-la-gi/; ongboit.com/obsidian-markdown-cu-phap/ (+4 more)
Internal links pointing to broken pages (10 URLs)
technical
full-site-crawl
CR2

Broken pages returning 4xx — 9 pages🔍 site-crawl

High

Visitors and crawlers hit a dead page (404/410), wasting crawl budget and link equity.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Restore the page, 301-redirect it to the right URL, or remove the links pointing to it.

Technical details for your developer
9 URLs affected: ongboit.com/internal-link-la-gi/; ongboit.com/google-search-console-la-gi/; ongboit.com/audit-website-2026/; ongboit.com/codex-cli-roadmap/; ongboit.com/codex-cli-n8n-workflow/; ongboit.com/obsidian-markdown-cu-phap/url.md (+3 more)
Broken pages returning 4xx (9 URLs)
technical
full-site-crawl

Medium Priority — Fix within 1 month

12 issues

These improvements compound over time. Schedule into your next month. Issues ranked by impact-to-effort ratio — highest-ROI fixes appear first.

R-M1

robots.txt declares llms.txt as a Sitemap - Google parses text/plain as XML (GSC errors)

Medium

A line added this session can trigger Google Search Console sitemap errors.

2h (S) HIGH avoids GSC parse errors

Recommended fix

Remove the llms.txt Sitemap line from robots.txt (keep sitemap_index.xml)

Technical details for your developer
robots.txt Sitemap: https://ongboit.com/llms.txt; file is text/plain
robots.txt declares llms.txt as a Sitemap - Google parses text/plain as XML (GSC errors)
sitemap
seo-sitemap
R-M2

Organization missing url, description, foundingDate, contactPoint

Medium

The entity anchor Google uses for Knowledge Graph is incomplete.

2h (S) HIGH Knowledge Graph resolution

Recommended fix

Add url/description/foundingDate/contactPoint to Local SEO

Technical details for your developer
Org block has @id/name/logo/sameAs only
Organization missing url, description, foundingDate, contactPoint
schema
geo-schema
R-M4

DSAR / Do-Not-Sell routed only to a personal Gmail; no form / privacy@ alias

Medium

Data-rights requests land in a personal inbox - response-window risk.

2h (S) HIGH GDPR Art 12 SLA

Recommended fix

Add a DSAR form + domain alias

Technical details for your developer
policy points to thenguyen.ai.automation@gmail.com only
DSAR / Do-Not-Sell routed only to a personal Gmail; no form / privacy@ alias
compliance
geo-compliance
R-M5

Comparison tables: 13 th, 0 scope, 0 caption

Medium

Tables are hard for screen readers to navigate.

2h (S) HIGH WCAG AA

Recommended fix

Add scope=col + caption to comparison tables

Technical details for your developer
4 tables on article, 0 scope/caption
Comparison tables: 13 th, 0 scope, 0 caption
accessibility
geo-accessibility
R-M7

No hreflang vi/x-default on any page

Medium

Vietnamese-locale signal not explicit.

2h (S) HIGH locale SERP signal

Recommended fix

Add hreflang vi + x-default via Rank Math

Technical details for your developer
0 hreflang on 4 sampled pages
No hreflang vi/x-default on any page
on-page
seo-page
R-M8

Homepage H1/title lack the primary keyword cluster

Medium

Homepage misses crawl-time keyword reinforcement.

2h (S) MEDIUM topical reinforcement

Recommended fix

Add keyword cluster to homepage H1/title

Technical details for your developer
H1 brand-narrative only; no Claude Code/n8n
Homepage H1/title lack the primary keyword cluster
on-page
seo-page
R-M3

sameAs missing Wikidata, X/Twitter, YouTube

Medium

Missing the highest-value entity links for LLM graphs.

8h (M) HIGH entity-recognition +25-35%

Recommended fix

Create Wikidata (free), add X/YouTube to sameAs

Technical details for your developer
sameAs=4 (FB/GitHub/TikTok/LinkedIn)
sameAs missing Wikidata, X/Twitter, YouTube
schema
geo-schema
R-M6

TTFB slow on 288/305 URLs - no CDN on Apache origin

Medium

Server is slow to first byte; field LCP is still FAST so impact is moderate.

24h (L) HIGH LCP headroom + crawl budget

Recommended fix

Front origin with a CDN (Cloudflare)

Technical details for your developer
crawl slow_ttfb=288; baseline 657ms
TTFB slow on 288/305 URLs - no CDN on Apache origin
performance
seo-performance
CR3

Broken outbound links — 18 pages🔍 site-crawl

Medium

Outbound links return 404/410/5xx — a trust and UX signal.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Update or remove the dead external links.

Technical details for your developer
18 URLs affected: ongboit.com/n8n-queue-mode/; ongboit.com/vault-structure-claude-code-para/; ongboit.com/mcp-servers-claude-code/; ongboit.com/dataforseo-mcp-setup/; ongboit.com/dataforseo-la-gi/; ongboit.com/dataforseo-pricing/ (+12 more)
Broken outbound links (18 URLs)
technical
full-site-crawl
CR4

Duplicate page titles — 16 pages🔍 site-crawl

Medium

Multiple pages share the same <title>, splitting relevance signals.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Make each title unique and descriptive.

Technical details for your developer
16 URLs affected: ongboit.com; ongboit.com/; ongboit.com/contact/; ongboit.com/contact/?subject=Subscribe/; ongboit.com/contact/?subject=Setup+%26+Deploy/; ongboit.com/contact/?subject=Claude+Code+Training/ (+10 more)
Duplicate page titles (16 URLs)
technical
full-site-crawl
CR5

Invalid JSON-LD (parse error) — 1 page🔍 site-crawl

Medium

A structured-data block has a syntax error, so Google and AI engines silently drop it.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Fix the malformed JSON-LD — usually an unescaped quote or raw HTML inside a value.

Technical details for your developer
1 URL affected: ongboit.com/llm-la-gi/
Invalid JSON-LD (parse error) (1 URL)
schema
full-site-crawl
CR13

Indexable pages missing from the sitemap — 12 pages🔍 site-crawl

Medium

Indexable pages absent from the XML sitemap are discovered slower.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Add them to the sitemap, or noindex if not meant to rank.

Technical details for your developer
12 URLs affected: ongboit.com; ongboit.com/contact/?subject=Subscribe/; ongboit.com/contact/?subject=Setup+%26+Deploy/; ongboit.com/contact/?subject=Claude+Code+Training/; ongboit.com/contact/?subject=n8n+Workflow/; ongboit.com/contact/?subject=SEO+%26+AI+Strategy/ (+6 more)
Indexable pages missing from the sitemap (12 URLs)
sitemap
full-site-crawl

Low Priority — Backlog

18 issues

Nice-to-have refinements. Add to backlog for when capacity allows. Issues ranked by impact-to-effort ratio — highest-ROI fixes appear first.

CR6

Slow server response (TTFB) — 286 pages🔍 site-crawl

Low

Many URLs are slow to first byte.

24h (L) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Add caching/CDN to cut TTFB.

Technical details for your developer
286 URLs affected: ongboit.com/category/claude-code/; ongboit.com/category/ai-101/; ongboit.com/category/n8n/; ongboit.com/category/self-hosting/; ongboit.com/contact/; ongboit.com/dich-vu/ (+280 more)
Slow server response (TTFB) (286 URLs)
performance
full-site-crawl
CR7

Large HTML payload — 279 pages🔍 site-crawl

Low

Pages ship a large HTML document.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Reduce inline bloat or split content.

Technical details for your developer
279 URLs affected: ongboit.com; ongboit.com/; ongboit.com/about/; ongboit.com/category/seo/; ongboit.com/category/codex-cli/; ongboit.com/category/claude-code/ (+273 more)
Large HTML payload (279 URLs)
performance
full-site-crawl
CR8

Low text-to-HTML ratio — 25 pages🔍 site-crawl

Low

Heavy markup versus little text.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Trim markup or add substantive content.

Technical details for your developer
25 URLs affected: ongboit.com; ongboit.com/; ongboit.com/about/; ongboit.com/category/seo/; ongboit.com/category/codex-cli/; ongboit.com/category/claude-code/ (+19 more)
Low text-to-HTML ratio (25 URLs)
technical
full-site-crawl
CR9

Near-orphan pages (one internal link in) — 20 pages🔍 site-crawl

Low

Pages with only one internal dofollow link in are weakly connected.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Add internal links from related content.

Technical details for your developer
20 URLs affected: ongboit.com/category/ai-101/page/2/; ongboit.com/category/n8n/page/2/; ongboit.com/contact/?subject=Setup+%26+Deploy/; ongboit.com/contact/?subject=Claude+Code+Training/; ongboit.com/contact/?subject=n8n+Workflow/; ongboit.com/contact/?subject=SEO+%26+AI+Strategy/ (+14 more)
Near-orphan pages (one internal link in) (20 URLs)
technical
full-site-crawl
CR10

Duplicate meta descriptions — 18 pages🔍 site-crawl

Low

Multiple pages share one meta description.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Write a unique description per page.

Technical details for your developer
18 URLs affected: ongboit.com; ongboit.com/; ongboit.com/contact/; ongboit.com/contact/?subject=Subscribe/; ongboit.com/contact/?subject=Setup+%26+Deploy/; ongboit.com/contact/?subject=Claude+Code+Training/ (+12 more)
Duplicate meta descriptions (18 URLs)
technical
full-site-crawl
CR11

Internal links to redirects — 14 pages🔍 site-crawl

Low

Internal links pass through a 301 hop — minor crawl waste.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Point links straight at the final URL.

Technical details for your developer
14 URLs affected: ongboit.com/claude-code-marketing-skills/; ongboit.com/claude-code-design-skill/; ongboit.com/claude-code-master-hacks/; ongboit.com/claude-code-gioi-han-su-dung/; ongboit.com/dataforseo-pricing/; ongboit.com/claude-code-sub-agents/ (+8 more)
Internal links to redirects (14 URLs)
technical
full-site-crawl
CR12

Nofollow outbound links (informational) — 13 pages🔍 site-crawl

Low

Some external links are nofollow.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Review whether intended.

Technical details for your developer
13 URLs affected: ongboit.com/chinh-sach-bao-mat/; ongboit.com/claude-code-master-hacks/; ongboit.com/dataforseo-mcp-setup/; ongboit.com/dataforseo-la-gi/; ongboit.com/dataforseo-pricing/; ongboit.com/dataforseo-api-tutorial/ (+7 more)
Nofollow outbound links (informational) (13 URLs)
technical
full-site-crawl
CR14

Incomplete OpenGraph tags — 10 pages🔍 site-crawl

Low

Missing og: tags weaken social and AI link previews.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Add the missing OpenGraph tags.

Technical details for your developer
10 URLs affected: ongboit.com/category/seo/; ongboit.com/category/codex-cli/; ongboit.com/category/claude-code/; ongboit.com/category/ai-101/; ongboit.com/category/n8n/; ongboit.com/category/self-hosting/ (+4 more)
Incomplete OpenGraph tags (10 URLs)
technical
full-site-crawl
CR15

Incomplete structured data — 10 pages🔍 site-crawl

Low

JSON-LD entities miss recommended properties.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Add the missing schema properties.

Technical details for your developer
10 URLs affected: ongboit.com/category/seo/; ongboit.com/category/codex-cli/; ongboit.com/category/claude-code/; ongboit.com/category/ai-101/; ongboit.com/category/n8n/; ongboit.com/category/self-hosting/ (+4 more)
Incomplete structured data (10 URLs)
schema
full-site-crawl
CR16

Meta descriptions too short — 8 pages🔍 site-crawl

Low

Short descriptions waste SERP real estate.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Expand to ~150 characters.

Technical details for your developer
8 URLs affected: ongboit.com/category/seo/; ongboit.com/category/claude-code/; ongboit.com/category/ai-101/; ongboit.com/category/n8n/; ongboit.com/category/self-hosting/; ongboit.com/chinh-sach-bao-mat/ (+2 more)
Meta descriptions too short (8 URLs)
technical
full-site-crawl
CR18

Multiple H1 tags — 5 pages🔍 site-crawl

Low

Pages with more than one H1 muddy the document outline.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Keep a single H1 per page.

Technical details for your developer
5 URLs affected: ongboit.com/system-prompt-la-gi/; ongboit.com/dataforseo-mcp-setup/; ongboit.com/dataforseo-la-gi/; ongboit.com/dataforseo-api-tutorial/; ongboit.com/dataforseo-free-trial/
Multiple H1 tags (5 URLs)
technical
full-site-crawl
CR19

Thin page: H1 duplicates the title — 3 pages🔍 site-crawl

Low

On a thin/short-title page the H1 repeats the title verbatim.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Differentiate the H1 or enrich the page.

Technical details for your developer
3 URLs affected: ongboit.com/dich-vu/; ongboit.com/chinh-sach-bao-mat/; ongboit.com/dieu-khoan-su-dung/
Thin page: H1 duplicates the title (3 URLs)
technical
full-site-crawl
CR20

Too many links on a page — 2 pages🔍 site-crawl

Low

Excessive links dilute link equity and crawl focus.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Trim to the most useful links.

Technical details for your developer
2 URLs affected: ongboit.com/claude-code-roadmap/; ongboit.com/claude-code-la-gi/
Too many links on a page (2 URLs)
technical
full-site-crawl
CR21

Meta desc too long — 1 page🔍 site-crawl

Low

Flagged by the deterministic full-site crawl.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Review the affected URLs and resolve.

Technical details for your developer
1 URL affected: ongboit.com/tiet-kiem-token-claude-code/
Meta desc too long (1 URL)
technical
full-site-crawl
CR22

HTTP (non-HTTPS) URL in sitemap — 1 page🔍 site-crawl

Low

The sitemap lists an http:// URL.

2h (S) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Use the https URL.

Technical details for your developer
1 URL affected: ongboit.com/sitemap.xml
HTTP (non-HTTPS) URL in sitemap (1 URL)
sitemap
full-site-crawl
CR23

Missing header content security policy — 1 page🔍 site-crawl

Low

Flagged by the deterministic full-site crawl.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Review the affected URLs and resolve.

Technical details for your developer
1 URL affected: ongboit.com
Missing header content security policy (1 URL)
compliance
full-site-crawl
CR24

Not compressed — 1 page🔍 site-crawl

Low

Flagged by the deterministic full-site crawl.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Review the affected URLs and resolve.

Technical details for your developer
1 URL affected: ongboit.com
Not compressed (1 URL)
performance
full-site-crawl
CR25

No cache control — 1 page🔍 site-crawl

Low

Flagged by the deterministic full-site crawl.

8h (M) HIGH Resolving improves crawlability and on-page quality across the affected pages.

Recommended fix

Review the affected URLs and resolve.

Technical details for your developer
1 URL affected: ongboit.com
No cache control (1 URL)
performance
full-site-crawl

Geo Deep Dive

100/100

Rating: Excellent · Primary source: /geo-llmstxt (88/100)

llms.txt fully remediated from a broken 301→404 state to a well-structured, spec-compliant file at HTTP 200. llms-full.txt is newly present at 748 KB with 25 articles and per-article metadata. Score rises from 62 to 88. Remaining gaps are:

  1. RSL 1.0 license field — medium priority for AI training trust signals;
  2. missing ETag/Last-Modified response headers — medium priority for crawl efficiency on the large llms-full.txt;
  3. thin description snippets on 22 links — low effort, high citability upside

Findings from /geo-llmstxt (8)

P2 llms.txt serves HTTP 200 at root — 301→404 redirect chain fully resolved
P2 llms-full.txt present at 200, 748 KB, 25 concatenated articles
P2 Strong structure: H1 + blockquote tagline + 8 organised sections
P2 Core Guides section leads with quantitative citability hooks
P2 RSL 1.0 license declaration absent
P2 No ETag or Last-Modified HTTP response header on llms.txt or llms-full.txt
P3 22 of 28 links lack quantitative description snippets
P2 llms-full.txt listed as Sitemap: in robots.txt (non-standard)

Accessibility Deep Dive

87/100

Rating: Good · Primary source: /geo-accessibility (87/100)

ongboit.com sits at 87/100 (AA, good) - up 1 point from the 86 baseline. Two baseline items verified fixed by grep: the author avatar now has alt text (L6) and the footer legal nav link was darkened to #93c5fd giving 9.9:1 contrast on the dark footer (this session's stated change CONFIRMED).

Strong fundamentals persist: lang="vi", single H1 with clean H1->H2->H3 nesting, 26/26 article images with alt, and image-wrapped links all carry accessible names. The remaining AA gaps are unchanged from baseline: the homepage search and newsletter inputs have no programmatic labels (M17, the dominant gap), the icon-only search button has no accessible name, the four article comparison tables have zero th scope and zero captions (L5), and the email field suppresses its focus outline with no replacement (M19, partial).

All are small-effort template-level fixes; muted body text passes AA only marginally (4.55-4.76:1) and is flagged for a safety-margin darken.

Findings from /geo-accessibility (5)

P1 Search and newsletter inputs lack programmatic labels (WCAG 1.3.1 / 4.1.2 / 3.3.2)

Evidence: https://ongboit.com homepage: <input type="search" name="s" placeholder="Tim bai viet..."> and <input type="email" placeholder="Email cua ban"> have no <label for>, no aria-label, no aria-labelledby. Screen readers announce only the role + placeholder (placeholder is not a reliab

Impact: Restores accessible name for 2 primary site interactions (search, newsletter signup) for SR/voice-control users; removes the largest single AA gap.

P2 Data table header cells missing scope and tables missing caption (WCAG 1.3.1)

Evidence: https://ongboit.com/claude-code-la-gi/ : 4 <table>, 13 <th> cells, 0 carry scope="col"/"row", 0 <caption>. Header-to-data association is not programmatically conveyed.

Impact: Lets SR users understand which header governs each data cell in comparison tables; low reach but cheap fix (template-level).

P2 Search submit button is icon-only with no accessible name (WCAG 4.1.2)

Evidence: https://ongboit.com homepage: <button type="submit" ...>🔍</button> contains only an emoji glyph and no aria-label. SR may announce nothing or the literal emoji name.

Impact: Gives the search trigger a clear name (e.g. aria-label="Tim kiem"); pairs with M17 fix in the same search-form template.

P2 Newsletter email input suppresses focus outline with no replacement (WCAG 2.4.7)

Evidence: https://ongboit.com homepage: <input type="email" style="...outline: none;"> has no onfocus/border swap (unlike the search input which restores its border). Keyboard users get no visible focus state on the email field. Theme :focus-visible covers only .menu-toggle.

Impact: Restores keyboard-visible focus on a form control; partial-credit item from baseline M19.

P3 Muted body text contrast passes AA only marginally (WCAG 1.4.3)

Evidence: #64748b on #f8fafc = 4.55:1 and on #ffffff = 4.76:1 (AA normal-text threshold 4.5:1). Passes but with no headroom; any future bg lightening or smaller weight risks failure. Footer legal link itself is fine (#93c5fd 9.9:1).

Impact: Darken muted token to ~#475569 for safety margin and AAA-leaning readability; low priority since currently compliant.

Brand Deep Dive

30/100

Rating: Critical · Primary source: /geo-brand-mentions (30/100)

Off-site brand authority essentially unchanged (28->30): entity graph cleaner (Organization + deduped sameAs) but strategic presence gaps remain - no X/Reddit/YouTube/Quora/Wikidata, 16 earned mentions un-recovered. Brand=28 roadmap: off-site account-building + backlink recovery, not a code task.

Findings from /geo-brand-mentions (2)

P1 No X/Twitter, Reddit, YouTube, Quora, Wikipedia/Wikidata - highest-weight AI-citation sources absent

Evidence: sameAs = 4 (FB/GitHub/TikTok/LinkedIn); no X/Reddit/YouTube/Wikidata

Impact: entity confidence + AI citation

P2 16 earned mentions (n8n.community/Medium/IG/FB) do not backlink - recoverable

Evidence: baseline H8

Impact: authority

Findings from /seo-backlinks (1)

P1 Backlinks API unavailable (DataForSEO subscription inactive 40204) + avg referring domains ~1-2 for ranked kw = thin profile

Evidence: backlinks_summary -> 40204; ranked-kw avg referring_domains 1.0-1.3

Impact: Authority is the #1 lever for page-4-8 rankings

Compliance Deep Dive

84/100

Rating: Good · Primary source: /geo-compliance (84/100)

ongboit.com compliance jumped from 51/100 (Poor) at the 2026-05-29 baseline to 84/100 (Good). All seven claimed fixes are curl-verified: Google Consent Mode v2 is live with every storage type denied by default and geo-targeted to 32 EEA/EU regions via Complianz; the bilingual VI/EN privacy policy covers GDPR, CCPA and Vietnam PDPD (Decree 13/2023) with data-controller, legal-basis, SCC, cross-border, breach, retention, DPO and Do-Not-Sell sections; Terms of Use is live; /privacy now correctly 301s to the canonical policy; five security headers are present; and the footer exposes Privacy, Terms, Contact and a manage-cookies revocation control.

The tag surface is reduced to a single consent-gated Google Tag with no third-party trackers observed pre-consent. Two medium gaps remain: there is no Content-Security-Policy header (HSTS also lacks includeSubDomains/preload), and DSAR / CCPA Do-Not-Sell requests are routed only to a personal Gmail inbox rather than a dedicated form or branded privacy alias.

GTM auto-PII disablement is asserted but not externally verifiable via curl.

Sub-component scores

ComponentScoreRating
Cookie Consent Banner95/100Excellent
Consent Mode V295/100Excellent
Privacy Policy Quality88/100Good
Terms Of Use90/100Excellent
Security Headers72/100Fair
Dsar Mechanism60/100Fair
Third Party Tags85/100Good
Data Subject Rights85/100Good
Footer Legal Links100/100Excellent
Privacy Redirect100/100Excellent

Findings from /geo-compliance (8)

P2 Google Consent Mode v2 active with all storage denied by default (EEA geo-targeted)

Evidence: curl https://ongboit.com/ -> gtag('consent','default',{"ad_personalization":"denied","ad_storage":"denied","ad_user_data":"denied","analytics_storage":"denied","functionality_storage":"denied","security_storage":"denied","personalization_storage":"denied","region":[32 EEA/EU ISO

Impact: high

P2 Bilingual privacy policy covers GDPR, CCPA and Vietnam PDPD (Decree 13/2023)

Evidence: curl https://ongboit.com/chinh-sach-bao-mat/ -> 'GDPR' x13, 'CCPA' x7, 'Decree 13' + 'Nghị định 13' + 'Personal Data Protection' (PDPD). Fields present: 'Data controller', 'Standard Contractual' (SCCs x2), 'legal basis'/'Cơ sở pháp lý', 'Data breach'/'vi phạm dữ liệu', 'DPO'/'Dat

Impact: high

P2 /privacy now 301-redirects to canonical policy (was redirecting to a blog post at baseline)

Evidence: curl -sI https://ongboit.com/privacy -> HTTP/1.1 301 Moved Permanently; Location: https://ongboit.com/chinh-sach-bao-mat/. Baseline (2026-05-29) redirected to an unrelated blog post.

Impact: medium

P2 Five security headers present (HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)

Evidence: curl -sI https://ongboit.com/ -> Strict-Transport-Security: max-age=31536000; X-Frame-Options: SAMEORIGIN; X-Content-Type-Options: nosniff; Referrer-Policy: strict-origin-when-cross-origin; Permissions-Policy: camera=(), microphone=(), geolocation=(), browsing-topics=().

Impact: medium

P2 No Content-Security-Policy header and HSTS lacks includeSubDomains/preload

Evidence: curl -sI https://ongboit.com/ shows no Content-Security-Policy, no Cross-Origin-Opener-Policy / Cross-Origin-Resource-Policy, and no X-XSS-Protection. HSTS = 'max-age=31536000' only (no includeSubDomains, no preload). 5/7 of the standard header set present; CSP is the highest-val

Impact: medium

P2 DSAR / data-subject-rights request routed only to a personal Gmail address

Evidence: curl https://ongboit.com/chinh-sach-bao-mat/ -> rights-exercise contact is mailto:thenguyen.ai.automation@gmail.com (x4); 'thực hiện quyền' present but no dedicated DSAR web form, no privacy@/dpo@ branded alias, no 'Do Not Sell' opt-out form (CCPA expects a request mechanism). Po

Impact: medium

P2 Footer carries all required legal links incl. manage-cookies control

Evidence: curl https://ongboit.com/ footer -> chinh-sach-bao-mat (Privacy), dieu-khoan-su-dung (Terms), contact x6, cmplz-manage-consent x8 (Complianz manage-cookies revocation control). Terms page /dieu-khoan-su-dung/ returns HTTP 200.

Impact: low

P2 Only a single first-party Google Tag fires; no Meta/Hotjar/Clarity trackers detected pre-consent

Evidence: curl https://ongboit.com/ -> only gtag/js?id=GT-K8HP8DDM present; no googletagmanager.com/gtm, facebook.net, hotjar, clarity.ms, or doubleclick references on the homepage. Tag is gated behind the Consent Mode v2 default-denied block, so analytics/ads storage stays denied until op

Impact: medium

🔍 Full-crawl per-URL findings (1 deterministic issues — every page scanned, complements the AI score above)

missing header content security policy — 1 URL
URLMissing header
https://ongboit.comCSP

Platform Deep Dive

60/100

Rating: Fair · Primary source: /geo-platform-optimizer (60/100)

AI-platform crawl/ingest foundation is now strong (robots AI-crawlers 97, llms.txt 88, llms-full present) - infrastructure side fixed. But actual citation requires top-10 ranking + community/authority, still weak (page 4-8, no Reddit/X). Strategic, off-site.

Findings from /geo-platform-optimizer (2)

P1 AI Overview shown on target queries but ongboit not cited (page 4-8 < citation threshold)

Evidence: DataForSEO ai_overview for claude code gia re/eval/llm; ongboit rank 39-87

Impact: AIO/ChatGPT/Perplexity citation

P2 Perplexity/ChatGPT topical surfacing absent - community-validation gap

Evidence: baseline M24; no Reddit/community signals

Impact: AI citation

Schema Deep Dive

74/100

Rating: Fair · Primary source: /geo-schema (74/100)

Score improved from 62 to 74 (+12 points). All major structural fixes confirmed live: Organization entity (@id #organization) with logo and sameAs 4 platforms, no duplicate Organization block, Author Person with E-E-A-T properties (jobTitle, knowsAbout, sameAs, worksFor), FAQPage on sampled articles, BreadcrumbList, WebSite+SearchAction.

Critical gap: speakable property was claimed as fixed in baseline notes but is NOT present in any live page HTML — zero hits on 3 sampled pages. This is the highest-priority remaining action (10 pts). Secondary gaps: Organization lacks url, description, foundingDate; Person lacks description bio; BlogPosting lacks wordCount; sameAs missing Wikipedia/Wikidata/YouTube.

JSON-LD is server-rendered across all pages — no AI crawler visibility risk.

Findings from /geo-schema (9)

P1 speakable NOT found live — claimed fix is unconfirmed

Evidence: grep for 'speakable' across raw HTML of homepage, /claude-code-la-gi/, and /n8n-pricing/ returns 0 hits. fetch_page.py structured_data also shows no speakable property on BlogPosting or WebPage types. Baseline noted speakable present on snippet #5 — this is not confirmed in today

Impact: Medium-high: speakable is the most direct AI-assistant signal. Its absence means AI voice assistants and AI crawlers cannot identify the most citable passages without inference.

P2 Organization missing url, description, foundingDate, contactPoint

Evidence: Organization @graph block keys: ['@type', '@id', 'name', 'sameAs', 'logo']. url=MISSING, description=MISSING, foundingDate=MISSING, contactPoint=MISSING, address=MISSING, founder=MISSING. These were listed as intended additions (founder was mentioned in baseline comparison notes)

Impact: Medium: url and description are E-E-A-T signals that help AI models build a complete entity graph. Without url, Google cannot confidently resolve the @id anchor to a canonical site.

P2 Organization sameAs missing Wikipedia, Wikidata, YouTube — 4 platforms only

Evidence: Organization sameAs=['https://www.facebook.com/ongboitvuitinh/', 'https://github.com/thenguyenvn90', 'https://www.tiktok.com/@ongbo.it', 'https://www.linkedin.com/in/minh-the-nguyen-6b995960']. Wikipedia, Wikidata, YouTube not present. Baseline noted these as 'strategic, still op

Impact: High for AI entity resolution: Wikipedia and Wikidata are the strongest cross-platform entity signals for LLMs. YouTube is a high-authority platform signal. Adding them would push sameAs score from 10 to 15.

P3 Person sameAs contains duplicate LinkedIn entry (http vs https)

Evidence: Person sameAs includes both 'https://www.linkedin.com/in/minh-the-nguyen-6b995960' and 'https://linkedin.com/in/minh-the-nguyen-6b995960' (missing www prefix). These resolve to the same URL but signal inconsistency.

Impact: Low: not a validation error, but clean sameAs arrays send stronger entity signals. Remove the www-less variant.

P3 Person schema missing description (author bio text)

Evidence: Person block keys: ['@type', '@id', 'name', 'url', 'image', 'sameAs', 'worksFor', 'jobTitle', 'knowsAbout']. description=MISSING. A bio string like 'DevOps Engineer and AI Vibe Coder helping Vietnamese developers automate with Claude Code and n8n' would complete the E-E-A-T perso

Impact: Low-medium: description strengthens author entity for AI citation decisions, especially for 'who wrote this?' queries.

P3 BlogPosting missing wordCount

Evidence: BlogPosting keys on both sampled articles: ['@type', 'headline', 'keywords', 'datePublished', 'dateModified', 'articleSection', 'author', 'publisher', 'description', 'name', '@id', 'isPartOf', 'image', 'inLanguage', 'mainEntityOfPage']. wordCount=MISSING.

Impact: Low: wordCount is a recommended (not required) property. Signals content depth to AI models that use schema to assess comprehensiveness before citation.

P2 FAQPage present — restricted since Aug 2023, but appropriate to retain for AI semantics

Evidence: FAQPage confirmed on /claude-code-la-gi/ (9 questions) and /n8n-pricing/ (7 questions) as separate JSON-LD blocks outside the main @graph. Syntactically valid. mainEntity uses Question/@type and Answer/@type correctly.

Impact: No rich result eligibility for non-authority sites, but schema provides strong Q&A semantic structure for AI crawlers (GPTBot, ClaudeBot, PerplexityBot). Retain. Do NOT remove.

P2 Organization url property absent — Google entity anchor incomplete

Evidence: The Organization @id is 'https://ongboit.com/#organization' which is an internal anchor, not the canonical site URL. Without a url property ('https://ongboit.com/'), Google's Knowledge Graph and AI models cannot cleanly link the Organization entity to the domain.

Impact: Medium: url is a recommended property for Organization and strongly expected by Google's structured data documentation for Knowledge Panel eligibility.

🔍 Full-crawl per-URL findings (11 deterministic issues — every page scanned, complements the AI score above)

schema invalid jsonld — 1 URL
URL
https://ongboit.com/llm-la-gi/
schema incomplete — 10 URLs
URLMissing properties
https://ongboit.com/category/seo/Organization: missing logo
https://ongboit.com/category/codex-cli/Organization: missing logo
https://ongboit.com/category/claude-code/Organization: missing logo
https://ongboit.com/category/ai-101/Organization: missing logo
https://ongboit.com/category/n8n/Organization: missing logo
https://ongboit.com/category/self-hosting/Organization: missing logo
https://ongboit.com/dich-vu/Article: missing image
https://ongboit.com/blog/Organization: missing logo
https://ongboit.com/chinh-sach-bao-mat/Article: missing image
https://ongboit.com/dieu-khoan-su-dung/Article: missing image

Technical Deep Dive

74/100

Rating: Fair · Primary source: /geo-technical (74/100)

Reaudit of https://ongboit.com on 2026-06-16 vs baseline 2026-05-29 (score 78). Technical score: 74/100. The site is a WordPress installation with strong server-side rendering (all content visible in initial HTML, AI crawlers can read everything), good meta tag coverage, clean URL structure, and correct mobile viewport configuration.

The robots.txt is exemplary for AI SEO — 11 AI crawlers explicitly welcomed. The 5 claimed security header fixes are PARTIALLY verified: all 5 headers are now present in live responses (HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy), but HSTS is missing the includeSubDomains directive.

CRITICAL FINDING: the xmlrpc.php 'disabled' claim is FALSE — a live POST with system.listMethods returns HTTP 200 and exposes 80 methods including pingback.ping, wp.newPost, and wp.uploadFile. The GET endpoint returning 405 was misread as disabled; this is standard HTTP behavior for a POST-only endpoint.

Immediate action required: block xmlrpc.php at the Apache level. CSP remains absent on all public pages (intentionally deferred per this session's scope). Score regression vs baseline is attributable to the confirmed-false xmlrpc claim now being weighted as an open P0 rather than a resolved item.

Cross-checked by: seo-page: 74/100

Findings from /geo-technical (8)

P0 xmlrpc.php FULLY FUNCTIONAL — claimed fix is false

Evidence: curl -X POST https://ongboit.com/xmlrpc.php with system.listMethods payload returns HTTP 200 and lists 80 methods including pingback.ping, pingback.extensions.getPingbacks, wp.newPost, wp.editPost, wp.deletePost, wp.uploadFile, wp.deleteFile, wp.getUsers, metaWeblog.newPost, blog

Impact: critical — active attack vector, pingback abuse and credential stuffing risk; also Google flags xmlrpc brute-force as a security signal

P1 Content-Security-Policy (CSP) absent on all public pages

Evidence: curl -sI https://ongboit.com/ — no Content-Security-Policy header in response. Confirmed across 4 separate header fetches. wp-login.php has CSP frame-ancestors 'self' only. Homepage and article pages: no CSP. Risk: XSS attacks can inject arbitrary scripts. Also affects AI crawler

Impact: high — XSS attack surface, browser security warnings in future Chrome versions, negative trust signal

P2 HSTS missing includeSubDomains directive

Evidence: curl -sI https://ongboit.com/ returns: Strict-Transport-Security: max-age=31536000 — no includeSubDomains, no preload. grep 'includeSubDomains' count=0. Best practice: max-age=31536000; includeSubDomains. Without includeSubDomains, subdomains (e.g., www.ongboit.com, any future su

Impact: medium — subdomain downgrade attack vector; also fails HSTS preload list eligibility

P2 Meta description below optimal length (128 chars vs 150-160 target)

Evidence: Extracted from live HTML: <meta name="description" content="Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation."/> — echo -n [...] | wc -c = 128 characters. Google typically displays 150-160 chars; truncation at 12

Impact: low — reduced CTR from search results, Google may rewrite with its own snippet

P2 CLS risk — images missing explicit width/height attributes

Evidence: WebFetch analysis of homepage HTML: 'Multiple images present without explicit width/height attributes — Logo image, Article featured images'. WordPress wp-img-auto-sizes CSS present (WP 6.7 auto-sizes feature) but contain-intrinsic-size fallback (3000px 1500px) is a rough estimat

Impact: medium — CLS is a Core Web Vital and a Google ranking factor; layout shifts harm UX and scores

P3 robots.txt Sitemap directive points to llms.txt (non-standard)

Evidence: robots.txt line: 'Sitemap: https://ongboit.com/llms.txt' — llms.txt is a plain-text AI model context file, not an XML sitemap. The Sitemap: directive in robots.txt is expected to point to XML sitemaps. Search engine crawlers (Googlebot, Bingbot) that parse Sitemap: directives wil

Impact: low — may cause crawl errors in GSC for invalid sitemap; no ranking impact but creates noise

P3 No preload hints for critical above-fold resources

Evidence: curl -sv https://ongboit.com/ head section: preconnect to fonts.googleapis.com and fonts.gstatic.com present (good). dns-prefetch for googletagmanager.com and pagead2.googlesyndication.com present. No <link rel=preload> for hero image, critical CSS, or web fonts. Google Fonts loa

Impact: low-medium — incremental LCP improvement; not a ranking blocker but affects CWV scores

P3 Server version exposed in response header

Evidence: curl -sI https://ongboit.com/ returns: Server: Apache/2.4.66 (Debian) — full version and OS disclosed. Also X-Powered-By absent (good — PHP version not exposed in main headers, though present on xmlrpc.php: X-Powered-By: PHP/8.3.30). Apache version disclosure enables targeted exp

Impact: low — informational; reduces targeted attack surface

Findings from /seo-page (13)

P3 Robots meta tag order anomaly site-wide (3 of 4 pages)

Evidence: Homepage, /n8n-pricing/, /advisor-strategy-claude-code/ all render 'follow, index' instead of standard 'index, follow'. /claude-code-la-gi/ correctly shows 'index, follow'. Rank Math PRO inconsistently applies order depending on post type or template. Google treats both as valid,

Impact: low

P2 No hreflang tags on any page — Vietnamese-language site without locale signals

Evidence: All 4 pages returned zero hreflang attributes. Site is 100% Vietnamese-language content targeting Vietnamese readers. Without hreflang vi and x-default, Google may not correctly associate the site with vi locale in international results. HTML lang='vi' is set at <html> level (obs

Impact: medium

P2 Heading hierarchy skip on /advisor-strategy-claude-code/ — H3 before first H2

Evidence: Heading sequence begins: H1 > H3 (TL;DR) > H2 > H2 ... The TL;DR summary block uses an H3 with no parent H2, violating document outline semantics. WCAG 1.3.1 (Info and Relationships) requires heading levels to reflect document structure. This also degrades crawlability: the TL;DR

Impact: medium

P2 Homepage H1 does not contain primary keyword

Evidence: Homepage H1 is 'Hành Trình Zero → Hero với AI Coding và Automation' — narrative/brand-voice framing with no mention of 'Claude Code', 'AI coding assistant', 'self-hosting', or the primary keyword clusters the site targets. Title tag also omits a topical keyword, relying entirely

Impact: medium

P3 Brand name absent from article title tags (3 blog posts)

Evidence: Homepage title includes '| Ông Bố IT' brand suffix. All 3 blog post titles omit brand: 'Claude Code Là Gì? Giải Thích Đơn Giản + So Sánh 2026' (53 chars), 'n8n Pricing 2026: Cloud $24-$50/Tháng + 3 Pattern Tiết Kiệm' (59 chars), 'Advisor Strategy Claude Code: Dùng Opus Rẻ Hơn 73%

Impact: low

P3 No visible breadcrumb DOM — schema-only BreadcrumbList

Evidence: All 3 article pages have BreadcrumbList in JSON-LD (confirmed by schema_types extraction), but zero breadcrumb-class HTML elements were found in any page DOM. Google's breadcrumb rich result requires consistent JSON-LD + visible HTML breadcrumb for reliable eligibility. Schema-on

Impact: medium

P3 Homepage meta description below optimal length (117 chars)

Evidence: Homepage meta description is 117 characters: 'Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation.' Optimal range for Vietnamese SERP is 140-155 chars (Google typically displays ~155-160 chars in desktop SERP snippe

Impact: low

P2 All 4 pages have 100% image alt coverage — strong baseline

Evidence: Homepage: 12/12 images with non-empty alt. /claude-code-la-gi/: 26/26. /n8n-pricing/: 21/21. /advisor-strategy-claude-code/: 19/19. Zero empty alt attributes and zero missing alt attributes across 78 total images. This is a genuine strength — above-average for WordPress sites in

Impact: none

🔍 Full-crawl per-URL findings (178 deterministic issues — every page scanned, complements the AI score above)

links to broken page — 10 URLs
URLBroken target
https://ongboit.com/keyword-cannibalization/https://ongboit.com/google-search-console-la-gi/
https://ongboit.com/keyword-cannibalization/https://ongboit.com/internal-link-la-gi/
https://ongboit.com/keyword-cannibalization/https://ongboit.com/audit-website-2026/
https://ongboit.com/codex-seo/https://ongboit.com/codex-cli-roadmap/
https://ongboit.com/codex-cli-la-gi/https://ongboit.com/codex-cli-n8n-workflow/
https://ongboit.com/obsidian-markdown-cu-phap/https://ongboit.com/obsidian-markdown-cu-phap/url.md
https://ongboit.com/obsidian-markdown-cu-phap/https://ongboit.com/obsidian-markdown-cu-phap/path.md
https://ongboit.com/obsidian-markdown-cu-phap/https://ongboit.com/obsidian-markdown-cu-phap/image.png
https://ongboit.com/wiki-lint-fold-maintenance/https://ongboit.com/wiki-lint-fold-maintenance/path/
https://ongboit.com/obsidian-memory-3-layer-architecture/https://ongboit.com/obsidian-memory-3-layer-architecture/page-name.md
4xx error — 9 URLs
URLStatus
https://ongboit.com/internal-link-la-gi/404
https://ongboit.com/google-search-console-la-gi/404
https://ongboit.com/audit-website-2026/404
https://ongboit.com/codex-cli-roadmap/404
https://ongboit.com/codex-cli-n8n-workflow/404
https://ongboit.com/obsidian-markdown-cu-phap/url.md404
https://ongboit.com/obsidian-markdown-cu-phap/path.md404
https://ongboit.com/wiki-lint-fold-maintenance/path/404
https://ongboit.com/obsidian-memory-3-layer-architecture/page-name.md404
broken external link — 18 URLs
URLBroken URL
https://ongboit.com/n8n-queue-mode/https://blog.n8n.io/scaling-n8n/
https://ongboit.com/vault-structure-claude-code-para/https://fortelabs.com/blog/the-para-method-for-organizing-information/
https://ongboit.com/mcp-servers-claude-code/https://developers.cloudflare.com/mcp/
https://ongboit.com/dataforseo-mcp-setup/https://dataforseo.com/about
https://ongboit.com/dataforseo-la-gi/https://tracxn.com/d/companies/dataforseo/
https://ongboit.com/dataforseo-pricing/https://dataforseo.com/about
https://ongboit.com/dataforseo-api-tutorial/https://dataforseo.com/about
https://ongboit.com/dataforseo-serp-api/https://dataforseo.com/about
https://ongboit.com/dataforseo-review/https://docs.dataforseo.com/v3/serp/
https://ongboit.com/dataforseo-vs-ahrefs/https://dataforseo.com/about
https://ongboit.com/dataforseo-backlinks-api/https://dataforseo.com/about
https://ongboit.com/claude-code-github/https://github.com/avalonreset-pro/claude-github
https://ongboit.com/harness-design-long-running-agent/https://www.anthropic.com/engineering/harness-design-for-long-running-applicatio
https://ongboit.com/claude-managed-agents-dreaming-outcomes/https://www.anthropic.com/news/claude-managed-agents
https://ongboit.com/claude-for-small-business/https://www.anthropic.com/small-business
https://ongboit.com/claude-code-audit-technical-seo/https://www.amsive.com/insights/seo/ai-overviews-impact-on-organic-search/
https://ongboit.com/claude-code-vps/https://www.futuremarketinsights.com/reports/vps-hosting-market
https://ongboit.com/dataforseo-free-trial/https://tracxn.com/d/companies/dataforseo/
duplicate title — 16 URLs
URLTitleDupes
https://ongboit.comÔng Bố IT | Claude Code, AI Coding & Self-hosting Blog2 pages
https://ongboit.com/Ông Bố IT | Claude Code, AI Coding & Self-hosting Blog2 pages
https://ongboit.com/contact/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=Subscribe/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=Setup+%26+Deploy/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=Claude+Code+Training/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=n8n+Workflow/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=SEO+%26+AI+Strategy/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=GEO+AI+Search+Optimization/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/contact/?subject=Content+Portfolio+Refresh+Writing/Liên Hệ Ông Bố IT, Tư Vấn Claude Code & AI Workflow8 pages
https://ongboit.com/dataforseo-la-gi/DataForSEO Là Gì 2026: Pay-As-You-Go SEO API + Claude Code2 pages
https://ongboit.com/dataforseo-free-trial/DataForSEO Là Gì 2026: Pay-As-You-Go SEO API + Claude Code2 pages
https://ongboit.com/best-claude-code-skills/Best Claude Code Skills 2026: 32 Bundled, Plugins, Community2 pages
https://ongboit.com/top-20-claude-skills/Best Claude Code Skills 2026: 32 Bundled, Plugins, Community2 pages
https://ongboit.com/claude-code-banana/Banana Claude: Tạo Ảnh AI 4K Trong Terminal Cho Dev 20262 pages
https://ongboit.com/banana-claude/Banana Claude: Tạo Ảnh AI 4K Trong Terminal Cho Dev 20262 pages
low text html ratio — 25 URLs
URLText ratio
https://ongboit.com5%
https://ongboit.com/5%
https://ongboit.com/about/5%
https://ongboit.com/category/seo/3%
https://ongboit.com/category/codex-cli/3%
https://ongboit.com/category/claude-code/3%
https://ongboit.com/category/ai-101/3%
https://ongboit.com/category/n8n/3%
https://ongboit.com/category/self-hosting/3%
https://ongboit.com/contact/3%
https://ongboit.com/dich-vu/9%
https://ongboit.com/claude-code-dynamic-workflows/9%
https://ongboit.com/cdn-la-gi/10%
https://ongboit.com/contact/?subject=Subscribe/3%
https://ongboit.com/blog/3%
https://ongboit.com/dieu-khoan-su-dung/6%
https://ongboit.com/seo-audit-la-gi/10%
https://ongboit.com/contact/?subject=Setup+%26+Deploy/3%
https://ongboit.com/contact/?subject=Claude+Code+Training/3%
https://ongboit.com/contact/?subject=n8n+Workflow/3%
https://ongboit.com/contact/?subject=SEO+%26+AI+Strategy/3%
https://ongboit.com/contact/?subject=GEO+AI+Search+Optimization/3%
https://ongboit.com/contact/?subject=Content+Portfolio+Refresh+Writing/3%
https://ongboit.com/claude-code-context-compaction/10%
https://ongboit.com/claude-code-autonomous-agents/10%
one dofollow incoming — 20 URLs
URL
https://ongboit.com/category/ai-101/page/2/
https://ongboit.com/category/n8n/page/2/
https://ongboit.com/contact/?subject=Setup+%26+Deploy/
https://ongboit.com/contact/?subject=Claude+Code+Training/
https://ongboit.com/contact/?subject=n8n+Workflow/
https://ongboit.com/contact/?subject=SEO+%26+AI+Strategy/
https://ongboit.com/contact/?subject=GEO+AI+Search+Optimization/
https://ongboit.com/contact/?subject=Content+Portfolio+Refresh+Writing/
https://ongboit.com/tag/skills/page/2/
https://ongboit.com/tag/so-sanh/page/2/
https://ongboit.com/tag/huong-dan/page/2/
https://ongboit.com/internal-link-la-gi/
https://ongboit.com/google-search-console-la-gi/
https://ongboit.com/audit-website-2026/
https://ongboit.com/codex-cli-roadmap/
https://ongboit.com/codex-cli-n8n-workflow/
https://ongboit.com/obsidian-markdown-cu-phap/url.md
https://ongboit.com/obsidian-markdown-cu-phap/path.md
https://ongboit.com/wiki-lint-fold-maintenance/path/
https://ongboit.com/obsidian-memory-3-layer-architecture/page-name.md
duplicate meta desc — 18 URLs
URLMeta descriptionDupes
https://ongboit.comMình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation.2 pages
https://ongboit.com/Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation.2 pages
https://ongboit.com/contact/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=Subscribe/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=Setup+%26+Deploy/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=Claude+Code+Training/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=n8n+Workflow/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=SEO+%26+AI+Strategy/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=GEO+AI+Search+Optimization/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/contact/?subject=Content+Portfolio+Refresh+Writing/Liên hệ Nguyễn Minh Thế (Ông Bố IT) để tư vấn Claude Code, AI coding workflow, n8n automation, self-hosting. Trao đổi qua email, TikTok, hoặc GitHub.8 pages
https://ongboit.com/chinh-sach-bao-mat/Cập nhật lần cuối: 16/06/20262 pages
https://ongboit.com/dieu-khoan-su-dung/Cập nhật lần cuối: 16/06/20262 pages
https://ongboit.com/dataforseo-la-gi/DataForSEO là gì? SEO API pay-as-you-go $0.0006/call: 3 tháng tốn $9 thay vì $747 Ahrefs (-98.8%), data khớp 100% Google. 9 nhóm API + free trial $1.2 pages
https://ongboit.com/dataforseo-free-trial/DataForSEO là gì? SEO API pay-as-you-go $0.0006/call: 3 tháng tốn $9 thay vì $747 Ahrefs (-98.8%), data khớp 100% Google. 9 nhóm API + free trial $1.2 pages
https://ongboit.com/best-claude-code-skills/Best Claude Code Skills 2026: 32 skill curated từ bundled, plugins, community. /graphify 71x token, frontend-design 277K installs. Security audit 36% lỗ hổng.2 pages
https://ongboit.com/top-20-claude-skills/Best Claude Code Skills 2026: 32 skill curated từ bundled, plugins, community. /graphify 71x token, frontend-design 277K installs. Security audit 36% lỗ hổng.2 pages
https://ongboit.com/claude-code-banana/Banana Claude (skill Claude Code, 543 GitHub stars): 9 domain modes, 5-Component Formula, 4K resolution, free thay Midjourney $10/tháng. Tạo ảnh từ terminal.2 pages
https://ongboit.com/banana-claude/Banana Claude (skill Claude Code, 543 GitHub stars): 9 domain modes, 5-Component Formula, 4K resolution, free thay Midjourney $10/tháng. Tạo ảnh từ terminal.2 pages
links to redirect — 14 URLs
URLRedirect target
https://ongboit.com/claude-code-marketing-skills/https://ongboit.com/banana-claude/
https://ongboit.com/claude-code-design-skill/https://ongboit.com/banana-claude/
https://ongboit.com/claude-code-master-hacks/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/claude-code-gioi-han-su-dung/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/dataforseo-pricing/https://ongboit.com/dataforseo-free-trial/
https://ongboit.com/claude-code-sub-agents/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/claude-code-excalidraw/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/claude-gif-skill/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/claude-code-vs-codex/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/autoresearch-claude-code/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/claude-code-last30days-skill/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/5-trang-web-tim-claude-skills/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/xay-dung-ai-agent-hieu-qua/https://ongboit.com/top-20-claude-skills/
https://ongboit.com/claude-growth-setup-tool-api-mcp/https://ongboit.com/dataforseo-free-trial/
nofollow external — 13 URLs
URL
https://ongboit.com/chinh-sach-bao-mat/
https://ongboit.com/claude-code-master-hacks/
https://ongboit.com/dataforseo-mcp-setup/
https://ongboit.com/dataforseo-la-gi/
https://ongboit.com/dataforseo-pricing/
https://ongboit.com/dataforseo-api-tutorial/
https://ongboit.com/dataforseo-serp-api/
https://ongboit.com/dataforseo-vs-ahrefs/
https://ongboit.com/claude-code-google-workspace/
https://ongboit.com/claude-code-notebooklm/
https://ongboit.com/dataforseo-backlinks-api/
https://ongboit.com/claude-code-sub-agents/
https://ongboit.com/dataforseo-free-trial/
og incomplete — 10 URLs
URLMissing OG tags
https://ongboit.com/category/seo/image
https://ongboit.com/category/codex-cli/image
https://ongboit.com/category/claude-code/image
https://ongboit.com/category/ai-101/image
https://ongboit.com/category/n8n/image
https://ongboit.com/category/self-hosting/image
https://ongboit.com/dich-vu/image
https://ongboit.com/blog/image
https://ongboit.com/chinh-sach-bao-mat/image
https://ongboit.com/dieu-khoan-su-dung/image
meta desc too short — 8 URLs
URLMeta descriptionLength
https://ongboit.com/category/seo/Kiến thức SEO cho developer27c
https://ongboit.com/category/claude-code/Hướng dẫn, tips, và projects với Claude Code44c
https://ongboit.com/category/ai-101/Giải thích các khái niệm AI cơ bản cho lập trình viên Việt Nam62c
https://ongboit.com/category/n8n/Automation workflows và tutorials với n8n41c
https://ongboit.com/category/self-hosting/Hướng dẫn tự host ứng dụng trên VPS: Coolify, Docker, WordPress, và các dịch vụ khác84c
https://ongboit.com/chinh-sach-bao-mat/Cập nhật lần cuối: 16/06/202629c
https://ongboit.com/dieu-khoan-su-dung/Cập nhật lần cuối: 16/06/202629c
https://ongboit.com/claude-code-wordpress-mcp/Kết nối Claude Code với WordPress qua MCP. Quản lý posts, pages, media trực tiếp từ terminal (2026).100c
title too short — 6 URLs
URLTitleWidth
https://ongboit.com/category/seo/SEO - Ông Bố IT118px
https://ongboit.com/category/ai-101/AI 101 - Ông Bố IT128px
https://ongboit.com/category/n8n/n8n - Ông Bố IT109px
https://ongboit.com/dich-vu/Dịch Vụ58px
https://ongboit.com/chinh-sach-bao-mat/Chính Sách Bảo Mật140px
https://ongboit.com/dieu-khoan-su-dung/Điều Khoản Sử Dụng140px
h1 multiple — 5 URLs
URLNo. of H1
https://ongboit.com/system-prompt-la-gi/2
https://ongboit.com/dataforseo-mcp-setup/2
https://ongboit.com/dataforseo-la-gi/2
https://ongboit.com/dataforseo-api-tutorial/2
https://ongboit.com/dataforseo-free-trial/2
h1 title duplicate — 3 URLs
URL
https://ongboit.com/dich-vu/
https://ongboit.com/chinh-sach-bao-mat/
https://ongboit.com/dieu-khoan-su-dung/
too many links — 2 URLs
URLLinks
https://ongboit.com/claude-code-roadmap/271
https://ongboit.com/claude-code-la-gi/159
meta desc too long — 1 URL
URLMeta descriptionLength
https://ongboit.com/tiet-kiem-token-claude-code/Tiết kiệm token Claude Code: 15 mẹo giảm bill API từ $290 xuống $82/tháng. Hiểu cơ chế history gửi lại mỗi turn + cách quản lý CLAUDE.md, session và context window 2026.169c

Google-Api Deep Dive

48/100

Rating: Poor · Primary source: /seo-google (48/100)

SERP visibility weak but improving: 8 ranked keywords (VN) vs baseline 4, best #12. High-volume terms still page 4-8. AI Overview appears on target queries but ongboit below the citation threshold. Strategic authority/backlink gap, not addressed this session.

Findings from /seo-google (2)

P1 Severe SERP visibility gap - 8 ranked keywords, only 1 on page 2 (rest pos 31-87)

Evidence: DataForSEO domain_rank_overview VN count=8, best rank_group=12; 'claude code' (33,100/mo) only #69

Impact: Top-10 for 2-3 mid-volume kw -> 10-20x current 92 ETV

P1 AI Overview present on target SERPs but ongboit not cited (page 4-8 < AIO source threshold)

Evidence: ai_overview in serp_item_types for claude code gia re/eval/llm; ongboit rank 39-87

Impact: AIO citation eligibility

Image Deep Dive

80/100

Rating: Good · Primary source: /seo-performance (71/100)

Field Core Web Vitals FAST (CrUX desktop LCP 1.09s / INP 38ms / CLS 0.03). Lab mobile perf 82. Main gap: origin TTFB slow (no CDN, 288/305 URLs) - infra (H10), unchanged. Field CWV FAST caps real-world severity at P2.

Findings from /seo-performance (2)

P2 TTFB slow on 288/305 crawled URLs - no CDN on Apache origin

Evidence: crawl-summary slow_ttfb=288; baseline TTFB 657ms

Impact: LCP headroom + crawl budget; field LCP already FAST so impact moderate

P3 Large HTML on 279 URLs

Evidence: crawl-summary large_html=279

Impact: transfer size

Page-Deep-Dive Deep Dive

74/100

Rating: Fair · Primary source: /seo-page (74/100)

ongboit.com demonstrates a strong on-page SEO baseline for a Vietnamese-language WordPress blog: all 4 pages pass canonical self-referencing, have 100% image alt coverage (78/78 images), no noindex anomalies, and the 3 article pages carry deep structured data (BlogPosting + FAQPage + BreadcrumbList + Person).

Meta descriptions are well-crafted and within length targets on article pages. The site has 4 prioritized gaps:

  1. No hreflang vi/x-default on any page — highest-leverage fix for Vietnamese GEO/AI-search citation surface;
  2. robots meta order 'follow, index' on 3 pages — Rank Math settings inconsistency, low severity but indicates config drift;
  3. BreadcrumbList exists only in JSON-LD without visible DOM breadcrumb — reduces reliability for Google rich result eligibility

Homepage H1 lacks keyword relevance, which is a missed topical authority signal for the site's primary topic cluster (Claude Code + AI coding). Overall score: 74/100.

Findings from /seo-page (13)

P3 Robots meta tag order anomaly site-wide (3 of 4 pages)

Evidence: Homepage, /n8n-pricing/, /advisor-strategy-claude-code/ all render 'follow, index' instead of standard 'index, follow'. /claude-code-la-gi/ correctly shows 'index, follow'. Rank Math PRO inconsistently applies order depending on post type or template. Google treats both as valid,

Impact: low

P2 No hreflang tags on any page — Vietnamese-language site without locale signals

Evidence: All 4 pages returned zero hreflang attributes. Site is 100% Vietnamese-language content targeting Vietnamese readers. Without hreflang vi and x-default, Google may not correctly associate the site with vi locale in international results. HTML lang='vi' is set at <html> level (obs

Impact: medium

P2 Heading hierarchy skip on /advisor-strategy-claude-code/ — H3 before first H2

Evidence: Heading sequence begins: H1 > H3 (TL;DR) > H2 > H2 ... The TL;DR summary block uses an H3 with no parent H2, violating document outline semantics. WCAG 1.3.1 (Info and Relationships) requires heading levels to reflect document structure. This also degrades crawlability: the TL;DR

Impact: medium

P2 Homepage H1 does not contain primary keyword

Evidence: Homepage H1 is 'Hành Trình Zero → Hero với AI Coding và Automation' — narrative/brand-voice framing with no mention of 'Claude Code', 'AI coding assistant', 'self-hosting', or the primary keyword clusters the site targets. Title tag also omits a topical keyword, relying entirely

Impact: medium

P3 Brand name absent from article title tags (3 blog posts)

Evidence: Homepage title includes '| Ông Bố IT' brand suffix. All 3 blog post titles omit brand: 'Claude Code Là Gì? Giải Thích Đơn Giản + So Sánh 2026' (53 chars), 'n8n Pricing 2026: Cloud $24-$50/Tháng + 3 Pattern Tiết Kiệm' (59 chars), 'Advisor Strategy Claude Code: Dùng Opus Rẻ Hơn 73%

Impact: low

P3 No visible breadcrumb DOM — schema-only BreadcrumbList

Evidence: All 3 article pages have BreadcrumbList in JSON-LD (confirmed by schema_types extraction), but zero breadcrumb-class HTML elements were found in any page DOM. Google's breadcrumb rich result requires consistent JSON-LD + visible HTML breadcrumb for reliable eligibility. Schema-on

Impact: medium

P3 Homepage meta description below optimal length (117 chars)

Evidence: Homepage meta description is 117 characters: 'Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation.' Optimal range for Vietnamese SERP is 140-155 chars (Google typically displays ~155-160 chars in desktop SERP snippe

Impact: low

P2 All 4 pages have 100% image alt coverage — strong baseline

Evidence: Homepage: 12/12 images with non-empty alt. /claude-code-la-gi/: 26/26. /n8n-pricing/: 21/21. /advisor-strategy-claude-code/: 19/19. Zero empty alt attributes and zero missing alt attributes across 78 total images. This is a genuine strength — above-average for WordPress sites in

Impact: none

Performance Deep Dive

71/100

Rating: Fair · Primary source: /seo-performance (71/100)

Field Core Web Vitals FAST (CrUX desktop LCP 1.09s / INP 38ms / CLS 0.03). Lab mobile perf 82. Main gap: origin TTFB slow (no CDN, 288/305 URLs) - infra (H10), unchanged. Field CWV FAST caps real-world severity at P2.

Cross-checked by: geo-technical: 74/100seo-google: 48/100

Findings from /seo-performance (2)

P2 TTFB slow on 288/305 crawled URLs - no CDN on Apache origin

Evidence: crawl-summary slow_ttfb=288; baseline TTFB 657ms

Impact: LCP headroom + crawl budget; field LCP already FAST so impact moderate

P3 Large HTML on 279 URLs

Evidence: crawl-summary large_html=279

Impact: transfer size

Findings from /geo-technical (8)

P0 xmlrpc.php FULLY FUNCTIONAL — claimed fix is false

Evidence: curl -X POST https://ongboit.com/xmlrpc.php with system.listMethods payload returns HTTP 200 and lists 80 methods including pingback.ping, pingback.extensions.getPingbacks, wp.newPost, wp.editPost, wp.deletePost, wp.uploadFile, wp.deleteFile, wp.getUsers, metaWeblog.newPost, blog

Impact: critical — active attack vector, pingback abuse and credential stuffing risk; also Google flags xmlrpc brute-force as a security signal

P1 Content-Security-Policy (CSP) absent on all public pages

Evidence: curl -sI https://ongboit.com/ — no Content-Security-Policy header in response. Confirmed across 4 separate header fetches. wp-login.php has CSP frame-ancestors 'self' only. Homepage and article pages: no CSP. Risk: XSS attacks can inject arbitrary scripts. Also affects AI crawler

Impact: high — XSS attack surface, browser security warnings in future Chrome versions, negative trust signal

P2 HSTS missing includeSubDomains directive

Evidence: curl -sI https://ongboit.com/ returns: Strict-Transport-Security: max-age=31536000 — no includeSubDomains, no preload. grep 'includeSubDomains' count=0. Best practice: max-age=31536000; includeSubDomains. Without includeSubDomains, subdomains (e.g., www.ongboit.com, any future su

Impact: medium — subdomain downgrade attack vector; also fails HSTS preload list eligibility

P2 Meta description below optimal length (128 chars vs 150-160 target)

Evidence: Extracted from live HTML: <meta name="description" content="Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation."/> — echo -n [...] | wc -c = 128 characters. Google typically displays 150-160 chars; truncation at 12

Impact: low — reduced CTR from search results, Google may rewrite with its own snippet

P2 CLS risk — images missing explicit width/height attributes

Evidence: WebFetch analysis of homepage HTML: 'Multiple images present without explicit width/height attributes — Logo image, Article featured images'. WordPress wp-img-auto-sizes CSS present (WP 6.7 auto-sizes feature) but contain-intrinsic-size fallback (3000px 1500px) is a rough estimat

Impact: medium — CLS is a Core Web Vital and a Google ranking factor; layout shifts harm UX and scores

P3 robots.txt Sitemap directive points to llms.txt (non-standard)

Evidence: robots.txt line: 'Sitemap: https://ongboit.com/llms.txt' — llms.txt is a plain-text AI model context file, not an XML sitemap. The Sitemap: directive in robots.txt is expected to point to XML sitemaps. Search engine crawlers (Googlebot, Bingbot) that parse Sitemap: directives wil

Impact: low — may cause crawl errors in GSC for invalid sitemap; no ranking impact but creates noise

P3 No preload hints for critical above-fold resources

Evidence: curl -sv https://ongboit.com/ head section: preconnect to fonts.googleapis.com and fonts.gstatic.com present (good). dns-prefetch for googletagmanager.com and pagead2.googlesyndication.com present. No <link rel=preload> for hero image, critical CSS, or web fonts. Google Fonts loa

Impact: low-medium — incremental LCP improvement; not a ranking blocker but affects CWV scores

P3 Server version exposed in response header

Evidence: curl -sI https://ongboit.com/ returns: Server: Apache/2.4.66 (Debian) — full version and OS disclosed. Also X-Powered-By absent (good — PHP version not exposed in main headers, though present on xmlrpc.php: X-Powered-By: PHP/8.3.30). Apache version disclosure enables targeted exp

Impact: low — informational; reduces targeted attack surface

Findings from /seo-google (2)

P1 Severe SERP visibility gap - 8 ranked keywords, only 1 on page 2 (rest pos 31-87)

Evidence: DataForSEO domain_rank_overview VN count=8, best rank_group=12; 'claude code' (33,100/mo) only #69

Impact: Top-10 for 2-3 mid-volume kw -> 10-20x current 92 ETV

P1 AI Overview present on target SERPs but ongboit not cited (page 4-8 < AIO source threshold)

Evidence: ai_overview in serp_item_types for claude code gia re/eval/llm; ongboit rank 39-87

Impact: AIO citation eligibility

🔍 Full-crawl per-URL findings (567 deterministic issues — every page scanned, complements the AI score above)

slow ttfb — 286 URLs
URLTTFB
https://ongboit.com/category/claude-code/840ms
https://ongboit.com/category/ai-101/1032ms
https://ongboit.com/category/n8n/976ms
https://ongboit.com/category/self-hosting/916ms
https://ongboit.com/contact/1127ms
https://ongboit.com/dich-vu/1351ms
https://ongboit.com/tag/bat-dau/1744ms
https://ongboit.com/claude-code-roadmap/1928ms
https://ongboit.com/tag/skills/1889ms
https://ongboit.com/tag/obsidian/2200ms
https://ongboit.com/tag/dataforseo/2226ms
https://ongboit.com/tag/so-sanh/2142ms
https://ongboit.com/tag/huong-dan/2490ms
https://ongboit.com/claude-code-marketing-skills/2927ms
https://ongboit.com/claude-code-skills-developers/3280ms
https://ongboit.com/claude-code-design-skill/3089ms
https://ongboit.com/claude-cybersecurity/3653ms
https://ongboit.com/claude-code-seo-content/4058ms
https://ongboit.com/claude-code-blog-skill/3393ms
https://ongboit.com/claude-code-cho-product-manager/3398ms
https://ongboit.com/claude-code-cho-team-enterprise/3308ms
https://ongboit.com/claude-code-dynamic-workflows/3174ms
https://ongboit.com/claude-code-cho-sinh-vien/3361ms
https://ongboit.com/cdn-la-gi/3184ms
https://ongboit.com/https-la-gi/3190ms
https://ongboit.com/schema-markup-la-gi/3425ms
https://ongboit.com/keyword-cannibalization/3347ms
https://ongboit.com/geo-la-gi/3309ms
https://ongboit.com/contact/?subject=Subscribe/2560ms
https://ongboit.com/claude-growth-kit-viet-blog-claude-code/3029ms
…and 256 more
large html — 279 URLs
URLHTML size
https://ongboit.com127KB
https://ongboit.com/127KB
https://ongboit.com/about/103KB
https://ongboit.com/category/seo/119KB
https://ongboit.com/category/codex-cli/119KB
https://ongboit.com/category/claude-code/121KB
https://ongboit.com/category/ai-101/120KB
https://ongboit.com/category/n8n/119KB
https://ongboit.com/dich-vu/102KB
https://ongboit.com/tag/bat-dau/120KB
https://ongboit.com/claude-code-roadmap/211KB
https://ongboit.com/tag/skills/120KB
https://ongboit.com/tag/obsidian/119KB
https://ongboit.com/tag/dataforseo/111KB
https://ongboit.com/tag/so-sanh/120KB
https://ongboit.com/tag/huong-dan/120KB
https://ongboit.com/claude-code-marketing-skills/166KB
https://ongboit.com/claude-code-skills-developers/170KB
https://ongboit.com/claude-code-design-skill/159KB
https://ongboit.com/claude-cybersecurity/162KB
https://ongboit.com/claude-code-seo-content/158KB
https://ongboit.com/claude-code-blog-skill/213KB
https://ongboit.com/claude-code-cho-product-manager/150KB
https://ongboit.com/claude-code-cho-team-enterprise/149KB
https://ongboit.com/claude-code-dynamic-workflows/130KB
https://ongboit.com/claude-code-cho-sinh-vien/154KB
https://ongboit.com/cdn-la-gi/129KB
https://ongboit.com/https-la-gi/134KB
https://ongboit.com/schema-markup-la-gi/139KB
https://ongboit.com/keyword-cannibalization/141KB
…and 249 more
not compressed — 1 URL
URL
https://ongboit.com
no cache control — 1 URL
URL
https://ongboit.com

Sitemap Deep Dive

76/100

Rating: Good · Primary source: /seo-sitemap (76/100)

Sitemap architecture healthy (305 URLs, 70 legit noindex tag/category pages, current lastmod). New minor issue: robots.txt 'Sitemap: llms.txt' (added this session) points Googlebot at a plain-text file as if XML - remove to avoid GSC parse errors.

Findings from /seo-sitemap (3)

P2 11 indexable pages not in sitemap

Evidence: crawl-summary indexable_not_in_sitemap=11

Impact: discovery

P2 robots.txt declares llms.txt as Sitemap - Google parses text/plain as XML sitemap -> GSC errors

Evidence: robots.txt 'Sitemap: https://ongboit.com/llms.txt'; llms.txt is text/plain not XML

Impact: avoids GSC sitemap parse errors

P3 1 http URL in sitemap

Evidence: crawl-summary http_url_in_sitemap=1

Impact: minor

🔍 Full-crawl per-URL findings (13 deterministic issues — every page scanned, complements the AI score above)

indexable not in sitemap — 12 URLs
URL
https://ongboit.com
https://ongboit.com/contact/?subject=Subscribe/
https://ongboit.com/contact/?subject=Setup+%26+Deploy/
https://ongboit.com/contact/?subject=Claude+Code+Training/
https://ongboit.com/contact/?subject=n8n+Workflow/
https://ongboit.com/contact/?subject=SEO+%26+AI+Strategy/
https://ongboit.com/contact/?subject=GEO+AI+Search+Optimization/
https://ongboit.com/contact/?subject=Content+Portfolio+Refresh+Writing/
https://ongboit.com/claude-code-vs-cowork/
https://ongboit.com/banana-claude/
https://ongboit.com/top-20-claude-skills/
https://ongboit.com/dataforseo-free-trial/
http url in sitemap — 1 URL
URL
https://ongboit.com/sitemap.xml

Visual Deep Dive

80/100

Rating: Good · Primary source: /seo-visual (80/100)

Above-fold renders cleanly; field CLS ~0.03 (FAST). Footer legal-link contrast fixed this session (9.9:1). Minor: muted body text passes AA only marginally; email input lacks a visible focus indicator.

Findings from /seo-visual (2)

P3 Muted body text #64748b ~4.55-4.76:1 passes AA marginally

Evidence: geo-accessibility contrast math

Impact: readability margin

P2 Email input outline:none with no visible focus replacement

Evidence: geo-accessibility M19 partial

Impact: keyboard-nav visibility

Visualizations

Site-infrastructure charts. Keyword-gap, competitor, and internal-link visualizations live in /blog-audit-pipeline (content-portfolio audit) after the v0.5.15 split. Where data is unavailable for this tier/source, a disclosure callout is shown instead of placeholder numbers.

Chart 1: Core Web Vitals

Targets: LCP <2.5s · INP <200ms · CLS <0.1. LCP (load speed) is driven mostly by server response time (TTFB) — see Performance deep dive.

1090 ms
LCP
38 ms
INP
0.03
CLS

Fig 1: Core Web Vitals — field data — desktop (CrUX/PSI; PSI/CrUX 2026-06-12 snapshot)

Chart 2: GEO Readiness Radar

How citable the site is to AI engines. Each axis 0-100; further from center is better. Weak axes (llms.txt, brand authority) are the biggest AI-visibility gaps.

Citability(100)Brand(30)Platform(60)Crawler(97)llms.txt(88)Schema AI(74)Answer(74)

Fig 2: GEO readiness across 7 dimensions

Chart 3: Backlink Authority Distribution

DR/DA 0-20 = low-authority links; 61-100 = high-authority. You want more referring domains, weighted toward the right.

📊 Backlink Authority Distribution

Direct backlink metrics could not be measured this run — the histogram needs referring-domain data that is unavailable.
Backlinks API access denied (subscription inactive), identical to baseline limitation M23. Indirect DataForSEO signal shows a thin link profile. Authority-building untouched this session - strategic.

Chart 4 — What your search + behavior data says

Auto-derived from GSC (search) + GA4 (behavior) — deterministic, computed straight from the measured numbers (no estimates).

  • 🎯 1 striking-distance query at position ≤15 — the highest-ROI quick win. Biggest near-miss: claude code gia re (pos 12, 880 impr).

Chart 5: AI Crawler Access (11 bots)

robots.txt — 11 AI crawlers explicitly allowed via per-bot robots.txt rules. Status per known AI/LLM crawler:

BotVendorPurposerobots.txt status
GPTBotOpenAItraining crawlAllowed
OAI-SearchBotOpenAIChatGPT searchAllowed
ClaudeBotAnthropicClaude crawlAllowed
ClaudeUserAnthropicClaude live fetchAllowed
anthropic-aiAnthropictrainingAllowed
PerplexityBotPerplexitycrawlAllowed
PerplexityUserPerplexitylive fetchAllowed
Google-ExtendedGoogleGemini/AIOAllowed
Applebot-ExtendedAppleApple IntelligenceAllowed
CCBotCommon CrawltrainingAllowed
BytespiderByteDancetrainingAllowed

Each row is an AI/search bot. Allowed = it can read and cite your pages; Blocked removes you from that engine's answers.

Chart 6: AI Platform Readiness (per engine)

Per-platform GEO readiness 0-100 — each engine uses different ranking signals, so a page strong on one can be invisible on another.

ChatGPT
58
Gemini
58
Bing Copilot
55
Perplexity
52
Google AI Overviews
45

Chart 7: Striking-Distance Keywords (page 2 → page 1)

Queries ranking positions 8–30 with impressions — a small push lands page 1. Highest near-term ROI.

QueryPositionImpressionsClicks
claude code gia re128802
eval392101
dich vu seo audit692101

The Priority Breakdown figure is in the Executive Summary. All charts use Okabe-Ito color-blind safe palette.

90-Day Roadmap

Visual phased plan. Each block clickable in full HTML; here shown as Gantt-style timeline.

Weeks 1-2 (Critical)
Weeks 3-6 (Schema + Perf)
Weeks 7-12 (Authority + Content)
P0 Critical fixes
P1 High fixes
P2 Medium fixes
Content expansion
Internal links
Authority building

What ships each window

Weeks 3-6 · P1
  • R-H1 · xmlrpc.php not fully blocked - POST still returns 80 methods incl pingback
  • R-H2 · Content-Security-Policy absent on all public pages
  • R-H3 · speakable property not live despite claimed fix
Weeks 7-12 · P2
  • R-M1 · robots.txt declares llms.txt as a Sitemap - Google parses text/plain as XML (GSC errors)
  • R-M2 · Organization missing url, description, foundingDate, contactPoint
  • R-M3 · sameAs missing Wikidata, X/Twitter, YouTube

Expected Score Progression

MilestoneProjected ScoreDelta
Current baseline74/100
After Week 1-2 (all P0 fixed)74/100+0
After Week 6 (P0+P1 fixed)92/100+18 (cumulative +18)
After Week 12 (P0+P1+P2 fixed)100/100+12 (cumulative +30)

Projection model: sums each finding's impact_quantified per-axis score points (geo/technical/brand/schema/…) per severity bucket, capped at 25/18/12 pts respectively to avoid double-counting overlapping fixes. Real-world deltas depend on execution quality.

Autofix Bundle

41 fixes

Pipeline generates fix artifacts into audits/[client]/[date]/fixes/. Generate-only mode — review + apply manually via WP MCP / direct upload.

👁️ AUTO-REVIEW (review carefully first) — 12 fixes
R-H1 · xmlrpc.php not fully blocked - POST still returns 80 methods incl pingback manual-guide
R-H2 · Content-Security-Policy absent on all public pages manual-guide
R-H3 · speakable property not live despite claimed fix manual-guide
R-H4 · Search + newsletter inputs have no programmatic label (WCAG 1.3.1/4.1.2) manual-guide
R-M1 · robots.txt declares llms.txt as a Sitemap - Google parses text/plain as XML (GSC errors) manual-guide
R-M2 · Organization missing url, description, foundingDate, contactPoint manual-guide
R-M3 · sameAs missing Wikidata, X/Twitter, YouTube manual-guide
R-M4 · DSAR / Do-Not-Sell routed only to a personal Gmail; no form / privacy@ alias manual-guide
R-M5 · Comparison tables: 13 th, 0 scope, 0 caption manual-guide
R-M6 · TTFB slow on 288/305 URLs - no CDN on Apache origin manual-guide
R-M7 · No hreflang vi/x-default on any page manual-guide
R-M8 · Homepage H1/title lack the primary keyword cluster manual-guide
📋 MANUAL (step-by-step guides) — 29 fixes
R-H5 · Severe SERP visibility gap - 8 ranked keywords, 1 on page 2, rest pos 31-87 manual-guide
R-H6 · AI Overview present on target queries but ongboit not cited (page 4-8) manual-guide
R-H7 · No X/Reddit/YouTube/Quora/Wikipedia/Wikidata - highest-weight AI-citation sources absent manual-guide
R-H8 · Thin backlink profile (1-2 referring domains on ranked kw); DataForSEO Backlinks API inactive manual-guide
CR1 · Internal links pointing to broken pages (10 URLs) manual-guide
CR2 · Broken pages returning 4xx (9 URLs) manual-guide
CR3 · Broken outbound links (18 URLs) manual-guide
CR4 · Duplicate page titles (16 URLs) manual-guide
CR5 · Invalid JSON-LD (parse error) (1 URL) manual-guide
CR6 · Slow server response (TTFB) (286 URLs) manual-guide
CR7 · Large HTML payload (279 URLs) manual-guide
CR8 · Low text-to-HTML ratio (25 URLs) manual-guide
CR9 · Near-orphan pages (one internal link in) (20 URLs) manual-guide
CR10 · Duplicate meta descriptions (18 URLs) manual-guide
CR11 · Internal links to redirects (14 URLs) manual-guide
CR12 · Nofollow outbound links (informational) (13 URLs) manual-guide
CR13 · Indexable pages missing from the sitemap (12 URLs) manual-guide
CR14 · Incomplete OpenGraph tags (10 URLs) manual-guide
CR15 · Incomplete structured data (10 URLs) manual-guide
CR16 · Meta descriptions too short (8 URLs) manual-guide
CR17 · Titles too short (6 URLs) manual-guide
CR18 · Multiple H1 tags (5 URLs) manual-guide
CR19 · Thin page: H1 duplicates the title (3 URLs) manual-guide
CR20 · Too many links on a page (2 URLs) manual-guide
CR21 · Meta desc too long (1 URL) manual-guide
CR22 · HTTP (non-HTTPS) URL in sitemap (1 URL) manual-guide
CR23 · Missing header content security policy (1 URL) manual-guide
CR24 · Not compressed (1 URL) manual-guide
CR25 · No cache control (1 URL) manual-guide

How to apply

# For AUTO-SAFE / AUTO-REVIEW artifacts:
python ~/.claude/scripts/wp_push_safe.py [post_id] fixes/[category]/[file] --expected-slug [slug]

# For MANUAL guides:
# Read fixes/manual-guides/*.md and execute steps manually

🤖 Apply These Fixes with Claude Code

Most teams apply these with Claude Code. Hand Claude just the report MD seo-audit_ongboit.com_2026-06-16.md (plus the fixes/ folder for ready-to-apply artifacts) — not the whole folder — then paste the prompt below.

You are a senior SEO + GEO engineer applying a completed audit for the SITE OWNER (not a developer).

COMMUNICATE PLAINLY
- The person running you is the site owner and is NOT technical. Before each change, explain in ONE
  plain sentence what you'll change and why it helps. When you ask them to approve, give a simple
  yes/no recommendation. Don't assume they know SEO/dev terms — define any jargon in a few words.

CONTEXT
- Read the report: seo-audit_ongboit.com_2026-06-16.md (Top-3 Priority, findings by severity, per-category deep dives, 90-Day Roadmap).
- Ready-to-apply artifacts are in the fixes/ folder (robots.txt AI policy, llms.txt, schema JSON-LD, meta).
- Site: ongboit.com (WordPress -> apply via WP MCP).

WORKFLOW
1. Read the report. Summarize the Top 3 Fixes + the quick wins in plain language. Change nothing yet.
2. Propose a simple plan split into TWO buckets, then wait for my OK:
   A) "I can do these in your WordPress" — schema, meta titles/descriptions, FAQ markup, internal
      links, on-page content (you create a draft I approve).
   B) "These need your developer / host" — robots.txt, llms.txt, .htaccess, security headers
      (you give me the ready file + a one-line note to forward; you can't deploy these for me).
3. Applying each fix:
   - Bucket A -> edit in WP, create a REVISION/DRAFT, NEVER publish live. I click Publish myself.
   - Bucket B -> output the ready file + 1-2 plain steps for my host; do not attempt to deploy it.
4. After each fix, VERIFY using the exact signal the finding measured (header present, bot allowed,
   schema present, llms.txt loads) and report pass/fail in plain language.

RULES
- Don't fabricate or weaken a fix to make it "pass". Evidence-only.
- NEVER publish or delete anything live -> always a draft/revision for my review.
- Keep a simple checklist: [finding] -> done / drafted / handed to developer / skipped + why.

Verification Pass — 10 Gates

10/10

Phase 6.5 verification ran before deliverable generation. 10 of 10 active gates passed (0 N/A for current mode).

GateCheckStatusDetail
Gate 1 Every finding ties to evidence (5 attrs) ✓ PASS All 41 findings have evidence + severity + effort + impact + confidence
Gate 2 Every chart hydrates from real source or shows disclosure ✓ PASS 7 chart slots: real data populates where agent JSON available; placeholder data eliminated v0.5.7
Gate 3 Every score documents calculation in appendix ✓ PASS Formula audit trail in phase6-scores.json
Gate 4 No fabricated data (confidence field required) ✓ PASS All 41 findings carry confidence field; chart values traced to agent JSON
Gate 5 Reproducibility log present ✓ PASS Appendix C populated with tools/versions/data sources
Gate 6 Severity not inflated (P0 ≤ P1 generally) ✓ PASS 0 P0 vs 10 P1 — distribution healthy
Gate 7 Low-confidence findings flagged inline ✓ PASS 3 medium-confidence + 0 low-confidence findings flagged in evidence cards
Gate 8 Reaudit matrix complete (if reaudit mode) ✓ PASS Verification matrix populated
Gate 9 Quick wins separated from roadmap ✓ PASS Quick Wins section distinct from 90-Day Roadmap
Gate 10 Composite scores match category breakdown ✓ PASS All 3 composites reverse-compute correctly (±0.5 tolerance)

Appendix

Appendix A — Score Calculation Methodology

Technical + CWV Composite

Technical*0.45 + Performance*0.35 + Sitemap*0.20

Components:
  technical: 74 × 0.45 = 33.30
  performance: 71 × 0.35 = 24.85
  sitemap: 76 × 0.20 = 15.20

Sum: 73.4
Rounded: 73

GEO + AEO Composite

Brand*0.30 + Schema*0.25 + Platform*0.25 + Geo*0.20

Components:
  brand: 30 × 0.30 = 9.00
  schema: 74 × 0.25 = 18.50
  platform: 60 × 0.25 = 15.00
  geo: 100 × 0.20 = 20.00

Sum: 62.5
Rounded: 62

Overall Search-Readiness Composite

Technical*0.18 + Schema*0.13 + Sitemap*0.06 + Performance*0.13 + Geo*0.25 + Platform*0.06 + Brand*0.13 + Image*0.06

Components:
  technical: 74 × 0.18 = 13.32
  schema: 74 × 0.13 = 9.62
  sitemap: 76 × 0.06 = 4.56
  performance: 71 × 0.13 = 9.23
  geo: 100 × 0.25 = 25.00
  platform: 60 × 0.06 = 3.60
  brand: 30 × 0.13 = 3.90
  image: 80 × 0.06 = 4.80

Sum: 74.0
Rounded: 74

Appendix B — Reproducibility

  • Kit version: Claude-Growth v1.2.1
  • Audit timestamp: 2026-06-16T06:28:05.600411+00:00
  • Audit duration: 35m 48s
  • Mode: reaudit
  • Tier detected: T2 (capability detection)
  • Coverage at this tier: ~85-95% — external SERP + full crawl, but no first-party GSC clicks/impressions.

Capability checklist

  • Google Search Console (GSC)
  • DataForSEO MCP
  • Firecrawl MCP
  • Chrome DevTools MCP (field CWV)
  • WordPress MCP

Missing a connector lowers coverage — see the setup guide: ongboit.com/claude-growth-setup-tool-api-mcp.

Data sources consulted

  • GSC API: ✓ (OAuth granted)
  • DataForSEO MCP: ✓
  • Firecrawl MCP: ✓ (N/A pages)
  • reportlab: ✓ (PDF generation)

Skill routing decisions

See skills/seo-pipeline/references/skill-routing.md for winner-per-pair analysis (4 duplicate skills compared head-to-head across 8-12 dimensions each).

Reference files

  • references/issue-catalog.md — 23 detection patterns
  • references/business-type-sampling.md — 5 types × 8 priority pages
  • references/composite-formula.md — 9 weights + 5-tier rubric
  • references/pdf-spec.md — Times New Roman + 7 charts
  • references/verification-checklist.md — 10 Phase 6.5 gates
  • references/skill-routing.md — winner-per-pair matrix
  • references/autofix-catalog.md — 23 autofix scenarios

Glossary

Plain-language definitions of every term (CWV, GEO/AEO, llms.txt, canonical, striking distance, crawl budget, E-E-A-T…) are in the How to Read This Report section near the top.

Appendix C — All Agent Findings (71 raw, 15 agents)

Every finding from every agent, ungrouped — nothing consolidated away. The prioritized Issues sections above are the deduped, board-grade view of these.

geo-accessibility — score 87/100 · 5 finding(s)
High A11Y-M17-INPUT-LABELSSearch and newsletter inputs lack programmatic labels (WCAG 1.3.1 / 4.1.2 / 3.3.2)
https://ongboit.com homepage: <input type="search" name="s" placeholder="Tim bai viet..."> and <input type="email" placeholder="Email cua ban"> have no <label for>, no aria-label, no aria-labelledby. Screen readers announce only the role + placeholder (placeholder is not a reliable accessible name; disappears on input).
→ Restores accessible name for 2 primary site interactions (search, newsletter signup) for SR/voice-control users; removes the largest single AA gap.
Medium A11Y-L5-TABLE-SCOPEData table header cells missing scope and tables missing caption (WCAG 1.3.1)
https://ongboit.com/claude-code-la-gi/ : 4 <table>, 13 <th> cells, 0 carry scope="col"/"row", 0 <caption>. Header-to-data association is not programmatically conveyed.
→ Lets SR users understand which header governs each data cell in comparison tables; low reach but cheap fix (template-level).
Medium A11Y-SEARCH-BTN-NAMESearch submit button is icon-only with no accessible name (WCAG 4.1.2)
https://ongboit.com homepage: <button type="submit" ...>🔍</button> contains only an emoji glyph and no aria-label. SR may announce nothing or the literal emoji name.
→ Gives the search trigger a clear name (e.g. aria-label="Tim kiem"); pairs with M17 fix in the same search-form template.
Medium A11Y-M19-FOCUS-EMAILNewsletter email input suppresses focus outline with no replacement (WCAG 2.4.7)
https://ongboit.com homepage: <input type="email" style="...outline: none;"> has no onfocus/border swap (unlike the search input which restores its border). Keyboard users get no visible focus state on the email field. Theme :focus-visible covers only .menu-toggle.
→ Restores keyboard-visible focus on a form control; partial-credit item from baseline M19.
Low A11Y-CONTRAST-MUTED-MARGINALMuted body text contrast passes AA only marginally (WCAG 1.4.3)
#64748b on #f8fafc = 4.55:1 and on #ffffff = 4.76:1 (AA normal-text threshold 4.5:1). Passes but with no headroom; any future bg lightening or smaller weight risks failure. Footer legal link itself is fine (#93c5fd 9.9:1).
→ Darken muted token to ~#475569 for safety margin and AAA-leaning readability; low priority since currently compliant.
geo-brand-mentions — score 30/100 · 2 finding(s)
High BM-1No X/Twitter, Reddit, YouTube, Quora, Wikipedia/Wikidata - highest-weight AI-citation sources absent
sameAs = 4 (FB/GitHub/TikTok/LinkedIn); no X/Reddit/YouTube/Wikidata
→ entity confidence + AI citation
Medium BM-216 earned mentions (n8n.community/Medium/IG/FB) do not backlink - recoverable
baseline H8
→ authority
geo-compliance — score 84/100 · 8 finding(s)
info COMP-001Google Consent Mode v2 active with all storage denied by default (EEA geo-targeted)
curl https://ongboit.com/ -> gtag('consent','default',{"ad_personalization":"denied","ad_storage":"denied","ad_user_data":"denied","analytics_storage":"denied","functionality_storage":"denied","security_storage":"denied","personalization_storage":"denied","region":[32 EEA/EU ISO codes incl AT,BE,DE,FR,GB,IT,...],"wait_for_update":500}). All 7 storage types denied by default; v2 signals ad_user_data + ad_personalization present. Complianz plugin detected (8x cmplz markers, region":"eu", geoip). Google Tag GT-K8HP8DDM loads AFTER consent default block.
→ high
info COMP-002Bilingual privacy policy covers GDPR, CCPA and Vietnam PDPD (Decree 13/2023)
curl https://ongboit.com/chinh-sach-bao-mat/ -> 'GDPR' x13, 'CCPA' x7, 'Decree 13' + 'Nghị định 13' + 'Personal Data Protection' (PDPD). Fields present: 'Data controller', 'Standard Contractual' (SCCs x2), 'legal basis'/'Cơ sở pháp lý', 'Data breach'/'vi phạm dữ liệu', 'DPO'/'Data Protection Officer', 'retention'/'lưu trữ', 'Do Not Sell'/'không bán' x3. VI/EN bilingual confirmed.
→ high
info COMP-003/privacy now 301-redirects to canonical policy (was redirecting to a blog post at baseline)
curl -sI https://ongboit.com/privacy -> HTTP/1.1 301 Moved Permanently; Location: https://ongboit.com/chinh-sach-bao-mat/. Baseline (2026-05-29) redirected to an unrelated blog post.
→ medium
info COMP-004Five security headers present (HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
curl -sI https://ongboit.com/ -> Strict-Transport-Security: max-age=31536000; X-Frame-Options: SAMEORIGIN; X-Content-Type-Options: nosniff; Referrer-Policy: strict-origin-when-cross-origin; Permissions-Policy: camera=(), microphone=(), geolocation=(), browsing-topics=().
→ medium
medium COMP-005No Content-Security-Policy header and HSTS lacks includeSubDomains/preload
curl -sI https://ongboit.com/ shows no Content-Security-Policy, no Cross-Origin-Opener-Policy / Cross-Origin-Resource-Policy, and no X-XSS-Protection. HSTS = 'max-age=31536000' only (no includeSubDomains, no preload). 5/7 of the standard header set present; CSP is the highest-value missing control.
→ medium
medium COMP-006DSAR / data-subject-rights request routed only to a personal Gmail address
curl https://ongboit.com/chinh-sach-bao-mat/ -> rights-exercise contact is mailto:thenguyen.ai.automation@gmail.com (x4); 'thực hiện quyền' present but no dedicated DSAR web form, no privacy@/dpo@ branded alias, no 'Do Not Sell' opt-out form (CCPA expects a request mechanism). Policy names a DPO but provides only a generic personal inbox.
→ medium
info COMP-007Footer carries all required legal links incl. manage-cookies control
curl https://ongboit.com/ footer -> chinh-sach-bao-mat (Privacy), dieu-khoan-su-dung (Terms), contact x6, cmplz-manage-consent x8 (Complianz manage-cookies revocation control). Terms page /dieu-khoan-su-dung/ returns HTTP 200.
→ low
info COMP-008Only a single first-party Google Tag fires; no Meta/Hotjar/Clarity trackers detected pre-consent
curl https://ongboit.com/ -> only gtag/js?id=GT-K8HP8DDM present; no googletagmanager.com/gtm, facebook.net, hotjar, clarity.ms, or doubleclick references on the homepage. Tag is gated behind the Consent Mode v2 default-denied block, so analytics/ads storage stays denied until opt-in. GTM auto-PII collection reported disabled (not externally verifiable via curl).
→ medium
geo-crawlers — score 97/100 · 4 finding(s)
pass CR-01All 8 primary AI-search crawlers explicitly allowed
pass CR-02Training crawlers (anthropic-ai, CCBot, Bytespider) also explicitly allowed
info CR-03llms.txt listed under Sitemap: directive in robots.txt
low CR-04cohere-ai, Amazonbot, meta-externalagent not explicitly declared
geo-llmstxt — score 88/100 · 8 finding(s)
pass LT-01llms.txt serves HTTP 200 at root — 301→404 redirect chain fully resolved
pass LT-02llms-full.txt present at 200, 748 KB, 25 concatenated articles
pass LT-03Strong structure: H1 + blockquote tagline + 8 organised sections
pass LT-04Core Guides section leads with quantitative citability hooks
medium LT-05RSL 1.0 license declaration absent
medium LT-06No ETag or Last-Modified HTTP response header on llms.txt or llms-full.txt
low LT-0722 of 28 links lack quantitative description snippets
info LT-08llms-full.txt listed as Sitemap: in robots.txt (non-standard)
geo-platform-optimizer — score 60/100 · 2 finding(s)
High PL-1AI Overview shown on target queries but ongboit not cited (page 4-8 < citation threshold)
DataForSEO ai_overview for claude code gia re/eval/llm; ongboit rank 39-87
→ AIO/ChatGPT/Perplexity citation
Medium PL-2Perplexity/ChatGPT topical surfacing absent - community-validation gap
baseline M24; no Reddit/community signals
→ AI citation
geo-schema — score 74/100 · 9 finding(s)
high SCHEMA-01speakable NOT found live — claimed fix is unconfirmed
grep for 'speakable' across raw HTML of homepage, /claude-code-la-gi/, and /n8n-pricing/ returns 0 hits. fetch_page.py structured_data also shows no speakable property on BlogPosting or WebPage types. Baseline noted speakable present on snippet #5 — this is not confirmed in today's crawl.
→ Medium-high: speakable is the most direct AI-assistant signal. Its absence means AI voice assistants and AI crawlers cannot identify the most citable passages without inference.
medium SCHEMA-02Organization missing url, description, foundingDate, contactPoint
Organization @graph block keys: ['@type', '@id', 'name', 'sameAs', 'logo']. url=MISSING, description=MISSING, foundingDate=MISSING, contactPoint=MISSING, address=MISSING, founder=MISSING. These were listed as intended additions (founder was mentioned in baseline comparison notes) but are NOT present in current HTML.
→ Medium: url and description are E-E-A-T signals that help AI models build a complete entity graph. Without url, Google cannot confidently resolve the @id anchor to a canonical site.
medium SCHEMA-03Organization sameAs missing Wikipedia, Wikidata, YouTube — 4 platforms only
Organization sameAs=['https://www.facebook.com/ongboitvuitinh/', 'https://github.com/thenguyenvn90', 'https://www.tiktok.com/@ongbo.it', 'https://www.linkedin.com/in/minh-the-nguyen-6b995960']. Wikipedia, Wikidata, YouTube not present. Baseline noted these as 'strategic, still open' — confirmed open.
→ High for AI entity resolution: Wikipedia and Wikidata are the strongest cross-platform entity signals for LLMs. YouTube is a high-authority platform signal. Adding them would push sameAs score from 10 to 15.
low SCHEMA-04Person sameAs contains duplicate LinkedIn entry (http vs https)
Person sameAs includes both 'https://www.linkedin.com/in/minh-the-nguyen-6b995960' and 'https://linkedin.com/in/minh-the-nguyen-6b995960' (missing www prefix). These resolve to the same URL but signal inconsistency.
→ Low: not a validation error, but clean sameAs arrays send stronger entity signals. Remove the www-less variant.
low SCHEMA-05Person schema missing description (author bio text)
Person block keys: ['@type', '@id', 'name', 'url', 'image', 'sameAs', 'worksFor', 'jobTitle', 'knowsAbout']. description=MISSING. A bio string like 'DevOps Engineer and AI Vibe Coder helping Vietnamese developers automate with Claude Code and n8n' would complete the E-E-A-T person fingerprint.
→ Low-medium: description strengthens author entity for AI citation decisions, especially for 'who wrote this?' queries.
low SCHEMA-06BlogPosting missing wordCount
BlogPosting keys on both sampled articles: ['@type', 'headline', 'keywords', 'datePublished', 'dateModified', 'articleSection', 'author', 'publisher', 'description', 'name', '@id', 'isPartOf', 'image', 'inLanguage', 'mainEntityOfPage']. wordCount=MISSING.
→ Low: wordCount is a recommended (not required) property. Signals content depth to AI models that use schema to assess comprehensiveness before citation.
info SCHEMA-07FAQPage present — restricted since Aug 2023, but appropriate to retain for AI semantics
FAQPage confirmed on /claude-code-la-gi/ (9 questions) and /n8n-pricing/ (7 questions) as separate JSON-LD blocks outside the main @graph. Syntactically valid. mainEntity uses Question/@type and Answer/@type correctly.
→ No rich result eligibility for non-authority sites, but schema provides strong Q&A semantic structure for AI crawlers (GPTBot, ClaudeBot, PerplexityBot). Retain. Do NOT remove.
medium SCHEMA-08Organization url property absent — Google entity anchor incomplete
The Organization @id is 'https://ongboit.com/#organization' which is an internal anchor, not the canonical site URL. Without a url property ('https://ongboit.com/'), Google's Knowledge Graph and AI models cannot cleanly link the Organization entity to the domain.
→ Medium: url is a recommended property for Organization and strongly expected by Google's structured data documentation for Knowledge Panel eligibility.
info SCHEMA-09JSON-LD is server-rendered — no JavaScript injection risk
All JSON-LD blocks are present in raw HTTP response HTML. Site runs WordPress with Apache/2.4.66. No evidence of client-side injection. AI crawlers (GPTBot, ClaudeBot) will see all schema data on first fetch.
→ Positive signal: no delayed processing risk for Google or AI crawlers.
geo-technical — score 74/100 · 8 finding(s)
Critical GT-001xmlrpc.php FULLY FUNCTIONAL — claimed fix is false
curl -X POST https://ongboit.com/xmlrpc.php with system.listMethods payload returns HTTP 200 and lists 80 methods including pingback.ping, pingback.extensions.getPingbacks, wp.newPost, wp.editPost, wp.deletePost, wp.uploadFile, wp.deleteFile, wp.getUsers, metaWeblog.newPost, blogger.deletePost. The baseline audit noted xmlrpc_enabled=false as a claimed fix. Measured result: FULLY ACTIVE. The GET-to-/xmlrpc.php returns 405 Method Not Allowed (expected — xmlrpc is POST-only by design) but this was misread as disabled. Actual POST attack surface is 100% exposed. This enables: pingback DDoS amplification, credential brute-force via xmlrpc.system.multicall, SSRF via wp.uploadFile.
→ critical — active attack vector, pingback abuse and credential stuffing risk; also Google flags xmlrpc brute-force as a security signal
High GT-002Content-Security-Policy (CSP) absent on all public pages
curl -sI https://ongboit.com/ — no Content-Security-Policy header in response. Confirmed across 4 separate header fetches. wp-login.php has CSP frame-ancestors 'self' only. Homepage and article pages: no CSP. Risk: XSS attacks can inject arbitrary scripts. Also affects AI crawler trust signals and browser security scoring.
→ high — XSS attack surface, browser security warnings in future Chrome versions, negative trust signal
Medium GT-003HSTS missing includeSubDomains directive
curl -sI https://ongboit.com/ returns: Strict-Transport-Security: max-age=31536000 — no includeSubDomains, no preload. grep 'includeSubDomains' count=0. Best practice: max-age=31536000; includeSubDomains. Without includeSubDomains, subdomains (e.g., www.ongboit.com, any future subdomain) are vulnerable to downgrade attacks even if the apex domain is protected.
→ medium — subdomain downgrade attack vector; also fails HSTS preload list eligibility
Medium GT-004Meta description below optimal length (128 chars vs 150-160 target)
Extracted from live HTML: <meta name="description" content="Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation."/> — echo -n [...] | wc -c = 128 characters. Google typically displays 150-160 chars; truncation at 128 means missed opportunity to communicate value. Content is relevant and keyword-present but short.
→ low — reduced CTR from search results, Google may rewrite with its own snippet
Medium GT-005CLS risk — images missing explicit width/height attributes
WebFetch analysis of homepage HTML: 'Multiple images present without explicit width/height attributes — Logo image, Article featured images'. WordPress wp-img-auto-sizes CSS present (WP 6.7 auto-sizes feature) but contain-intrinsic-size fallback (3000px 1500px) is a rough estimate, not actual dimensions. Without explicit width/height on <img> tags, browser cannot reserve layout space before images load, causing layout shifts. CLS threshold: <0.1 (good), 0.1-0.25 (needs improvement), >0.25 (poor).
→ medium — CLS is a Core Web Vital and a Google ranking factor; layout shifts harm UX and scores
Low GT-006robots.txt Sitemap directive points to llms.txt (non-standard)
robots.txt line: 'Sitemap: https://ongboit.com/llms.txt' — llms.txt is a plain-text AI model context file, not an XML sitemap. The Sitemap: directive in robots.txt is expected to point to XML sitemaps. Search engine crawlers (Googlebot, Bingbot) that parse Sitemap: directives will attempt to parse llms.txt as XML, which will fail or be silently ignored. The sitemap_index.xml reference is correct and valid.
→ low — may cause crawl errors in GSC for invalid sitemap; no ranking impact but creates noise
Low GT-007No preload hints for critical above-fold resources
curl -sv https://ongboit.com/ head section: preconnect to fonts.googleapis.com and fonts.gstatic.com present (good). dns-prefetch for googletagmanager.com and pagead2.googlesyndication.com present. No <link rel=preload> for hero image, critical CSS, or web fonts. Google Fonts loaded via preconnect only — no preload for the font files themselves. LCP element (hero image or first visible content) has no fetchpriority=high or explicit preload.
→ low-medium — incremental LCP improvement; not a ranking blocker but affects CWV scores
Low GT-008Server version exposed in response header
curl -sI https://ongboit.com/ returns: Server: Apache/2.4.66 (Debian) — full version and OS disclosed. Also X-Powered-By absent (good — PHP version not exposed in main headers, though present on xmlrpc.php: X-Powered-By: PHP/8.3.30). Apache version disclosure enables targeted exploit scanning.
→ low — informational; reduces targeted attack surface
seo-backlinks — score N/A · 1 finding(s)
High BL-1Backlinks API unavailable (DataForSEO subscription inactive 40204) + avg referring domains ~1-2 for ranked kw = thin profile
backlinks_summary -> 40204; ranked-kw avg referring_domains 1.0-1.3
→ Authority is the #1 lever for page-4-8 rankings
seo-google — score 48/100 · 2 finding(s)
High GG-1Severe SERP visibility gap - 8 ranked keywords, only 1 on page 2 (rest pos 31-87)
DataForSEO domain_rank_overview VN count=8, best rank_group=12; 'claude code' (33,100/mo) only #69
→ Top-10 for 2-3 mid-volume kw -> 10-20x current 92 ETV
High GG-2AI Overview present on target SERPs but ongboit not cited (page 4-8 < AIO source threshold)
ai_overview in serp_item_types for claude code gia re/eval/llm; ongboit rank 39-87
→ AIO citation eligibility
seo-images — score 80/100 · 2 finding(s)
Low IM-1Images missing explicit width/height -> CLS risk
seo-page: hero imgs rely on WP auto-sizes, no explicit dims
→ CLS
Low IM-2No image sitemap
baseline M21; screenshot-heavy tutorials
→ Google Images discovery
seo-page — score 74/100 · 13 finding(s)
low OP-001Robots meta tag order anomaly site-wide (3 of 4 pages)
Homepage, /n8n-pricing/, /advisor-strategy-claude-code/ all render 'follow, index' instead of standard 'index, follow'. /claude-code-la-gi/ correctly shows 'index, follow'. Rank Math PRO inconsistently applies order depending on post type or template. Google treats both as valid, but the inconsistency indicates a Rank Math global/post-type settings conflict.
→ low
medium OP-002No hreflang tags on any page — Vietnamese-language site without locale signals
All 4 pages returned zero hreflang attributes. Site is 100% Vietnamese-language content targeting Vietnamese readers. Without hreflang vi and x-default, Google may not correctly associate the site with vi locale in international results. HTML lang='vi' is set at <html> level (observed in homepage), but hreflang is absent in <head>. Particularly impactful for GEO/AI-search citation in Vietnamese-language AI Overview triggers.
→ medium
medium OP-003Heading hierarchy skip on /advisor-strategy-claude-code/ — H3 before first H2
Heading sequence begins: H1 > H3 (TL;DR) > H2 > H2 ... The TL;DR summary block uses an H3 with no parent H2, violating document outline semantics. WCAG 1.3.1 (Info and Relationships) requires heading levels to reflect document structure. This also degrades crawlability: the TL;DR section is not enclosed in a logical H2 section, which may reduce its passage-ranking weight.
→ medium
medium OP-004Homepage H1 does not contain primary keyword
Homepage H1 is 'Hành Trình Zero → Hero với AI Coding và Automation' — narrative/brand-voice framing with no mention of 'Claude Code', 'AI coding assistant', 'self-hosting', or the primary keyword clusters the site targets. Title tag also omits a topical keyword, relying entirely on brand name. For a site with commercial intent around 'Claude Code' and 'n8n', the homepage H1 misses the opportunity to reinforce topical authority to crawlers.
→ medium
low OP-005Brand name absent from article title tags (3 blog posts)
Homepage title includes '| Ông Bố IT' brand suffix. All 3 blog post titles omit brand: 'Claude Code Là Gì? Giải Thích Đơn Giản + So Sánh 2026' (53 chars), 'n8n Pricing 2026: Cloud $24-$50/Tháng + 3 Pattern Tiết Kiệm' (59 chars), 'Advisor Strategy Claude Code: Dùng Opus Rẻ Hơn 73% (2026)' (57 chars). Brand suffix aids recognition in SERP repeat impressions and builds entity association. All three have room within the 60-char guideline (homepage title is 58 chars including brand).
→ low
low OP-006No visible breadcrumb DOM — schema-only BreadcrumbList
All 3 article pages have BreadcrumbList in JSON-LD (confirmed by schema_types extraction), but zero breadcrumb-class HTML elements were found in any page DOM. Google's breadcrumb rich result requires consistent JSON-LD + visible HTML breadcrumb for reliable eligibility. Schema-only breadcrumbs have been de-ranked for rich result display in 2024-2025 quality updates. Verified across /claude-code-la-gi/, /n8n-pricing/, /advisor-strategy-claude-code/.
→ medium
low OP-007Homepage meta description below optimal length (117 chars)
Homepage meta description is 117 characters: 'Mình là Thế, DevOps Engineer. Mình dùng Claude Code và n8n hằng ngày cho vibe coding và SEO + GEO content automation.' Optimal range for Vietnamese SERP is 140-155 chars (Google typically displays ~155-160 chars in desktop SERP snippets). The description is first-person and authentic, but leaves ~30 chars of SERP real estate unused that could reinforce keyword signals or CTA.
→ low
none OP-008All 4 pages have 100% image alt coverage — strong baseline
Homepage: 12/12 images with non-empty alt. /claude-code-la-gi/: 26/26. /n8n-pricing/: 21/21. /advisor-strategy-claude-code/: 19/19. Zero empty alt attributes and zero missing alt attributes across 78 total images. This is a genuine strength — above-average for WordPress sites in this category.
→ none
none OP-009Canonical tags present and correctly self-referencing on all 4 pages
Homepage canonical: https://ongboit.com/ (matches URL). /claude-code-la-gi/ canonical: https://ongboit.com/claude-code-la-gi/ (matches). /n8n-pricing/ canonical: https://ongboit.com/n8n-pricing/ (matches). /advisor-strategy-claude-code/ canonical: https://ongboit.com/advisor-strategy-claude-code/ (matches). No duplicate or cross-pointing canonicals detected.
→ none
none OP-010Strong structured data implementation on blog posts — BlogPosting + FAQPage + BreadcrumbList + Person
All 3 article pages carry: BlogPosting, FAQPage, BreadcrumbList, Person, Organization, WebSite, ImageObject, and Question/Answer schema types across 2 JSON-LD blocks each. Homepage carries Organization + WebSite + SearchAction (SiteLinksSearchBox) — appropriate for homepage page type. This schema depth is above industry average for Vietnamese WordPress blogs.
→ none
none OP-011Article pages use datePublished + dateModified in schema and OG meta — freshness signals solid
/n8n-pricing/ dateModified: 2026-06-16T13:34:05+07:00 (today — pricing page updated same-day as audit). /claude-code-la-gi/ dateModified: 2026-06-15. /advisor-strategy-claude-code/ dateModified: 2026-06-15. Active maintenance cadence visible to crawlers. article:modified_time and dateModified in JSON-LD are consistent.
→ none
none OP-012Word count proxies well above minimums for blog posts — no thin content
/claude-code-la-gi/: 6329 words (minimum 1500 for blog post — 4.2x floor). /n8n-pricing/: 4535 words (3x floor). /advisor-strategy-claude-code/: 3895 words (2.6x floor). These are stripped-tag proxy counts including navigation/footer chrome; actual article body word counts will be lower but still comfortably above thin-content thresholds.
→ none
none OP-013noindex absent on all 4 pages — all indexable
String 'noindex' not found in any of the 4 page HTML responses. All pages are correctly set to index/follow. No accidental noindex from staging migration or plugin conflict detected.
→ none
seo-performance — score 71/100 · 2 finding(s)
Medium PF-1TTFB slow on 288/305 crawled URLs - no CDN on Apache origin
crawl-summary slow_ttfb=288; baseline TTFB 657ms
→ LCP headroom + crawl budget; field LCP already FAST so impact moderate
Low PF-2Large HTML on 279 URLs
crawl-summary large_html=279
→ transfer size
seo-sitemap — score 76/100 · 3 finding(s)
Medium SM-111 indexable pages not in sitemap
crawl-summary indexable_not_in_sitemap=11
→ discovery
Medium SM-2robots.txt declares llms.txt as Sitemap - Google parses text/plain as XML sitemap -> GSC errors
robots.txt 'Sitemap: https://ongboit.com/llms.txt'; llms.txt is text/plain not XML
→ avoids GSC sitemap parse errors
Low SM-31 http URL in sitemap
crawl-summary http_url_in_sitemap=1
→ minor
seo-visual — score 80/100 · 2 finding(s)
Low VIS-1Muted body text #64748b ~4.55-4.76:1 passes AA marginally
geo-accessibility contrast math
→ readability margin
Medium VIS-2Email input outline:none with no visible focus replacement
geo-accessibility M19 partial
→ keyboard-nav visibility