Site Page Analyze
Extract page SEO and DOM signals into a report.
Skill metadata
| Source | Bundled (installed by default) |
| Path | skills/web-development/site-page-analyze |
| Version | 1.0.0 |
| Author | VibeOS |
| License | MIT |
| Platforms | linux, macos, windows |
| Tags | browser, seo, accessibility, dom, audit, web |
| Related skills | browser-e2e, browser-network-assert, dogfood, site-map-crawl, cinematic-web |
Reference: full SKILL.md
The following is the complete skill definition that VibeOS loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Site Page Analyze
Recipe for inspecting a live page (or offline HTML/DOM dump) and producing a
structured SEO/DOM report. No new core tools — navigate with the browser
toolset, extract via script or browser_console, then merge into
page-report.json + page-report.md.
When to Use
- Audit title, meta, headings, canonical, and link mix on a URL
- Capture landmarks / image alt gaps before a content or a11y pass
- Offline review of saved HTML or a prior DOM dump JSON
- Alongside
browser-e2e/dogfoodwhen a page-level inventory is needed - For multi-page architecture maps, use
site-map-crawlfirst, then analyze a shortlist of URLs here
Prerequisites
- Browser toolset available for live mode (
browser_navigate,browser_snapshot,browser_console; optionalbrowser_vision) - Or offline: HTML file and/or DOM dump JSON for the Python extract script
- Write access for report outputs in the working directory
How to Run
Live (preferred):
browser_navigate→ target URL; wait for settle on heavy SPAs.browser_snapshot— confirm the page rendered (title/H1 visible).- Extract DOM signals — either:
- Save page HTML (or paste the console dump) and run
scripts/extract_page_structure.py --html …/--json …, or browser_consolewithexpression= contents ofreferences/dom-extract-snippet.js(IIFE returns a plain object), then pipe JSON into the same script via--stdin.
- Save page HTML (or paste the console dump) and run
- Optional:
browser_visionfor above-the-fold sanity; note console errors. - Optional content body:
web_extracton the same URL if you need article text beyond structure signals. - Merge extract + notes into
page-report.json, then filltemplates/page-report.md→page-report.md.
Offline:
- Feed a local HTML file and/or DOM dump JSON into the Python extract script (same schema as the JS snippet).
- Skip browser tools; still write
page-report.json+page-report.md.
If paths are unknown: search_files for site-page-analyze/.
Quick Reference
| Artifact | Role |
|---|---|
references/dom-extract-snippet.js | Console-safe DOM extract object |
scripts/ extract (Python) | Live HTML or offline HTML/JSON → JSON |
templates/page-report.md | Human report placeholders |
page-report.json | Machine-readable merge result |
page-report.md | Filled human summary |
| Field group | Source |
|---|---|
| url, title, meta, canonical, lang | extract |
| headings / h1, links, images, landmarks | extract |
| console_errors, notes, analyzed_at | agent merge |
Procedure
- Choose live vs offline; record
analyzed_at(ISO UTC). - Live: navigate → snapshot → extract (script or
browser_consolesnippet). - Offline: pass HTML file and/or DOM dump JSON into the Python extract script; do not invent fields the dump lacks.
- Cap-aware: trust extract truncations (text ≤200 chars, arrays ≤200 items).
- Count internal vs external links from extract (
internal= same origin). - Merge into
page-report.json(extract +console_errors+notes). - Render
templates/page-report.mdplaceholders →page-report.md. - Report paths and any blockers (auth wall, empty DOM, extract failure).
Pitfalls
- Zero new core tools — do not ask for a dedicated page-audit tool.
- Prefer
browser_navigate/ snapshot / console /web_extract; do not shellgrep/catpage HTML as the primary path. - Auth walls and CAPTCHAs: stop and ask; do not brute-force.
- SPAs: snapshot too early → empty headings; wait, then re-extract.
- Offline mode only knows what is in the HTML/JSON dump — no live console.
Verification
page-report.jsonexists and includesurl,title, headings, link counts.page-report.mdhas filled{{…}}placeholders (no raw braces left for known fields).- Live run: snapshot showed content before extract; optional vision matches H1.
- Offline run: extract exits 0 on the provided HTML/JSON without browser calls.
Live smoke
Hermetic check (no external network): serve a local fixture with
python3 -m http.server PORT --bind 127.0.0.1 from
skills/web-development/site-map-crawl/fixtures/site, then:
vibeos web analyze http://127.0.0.1:PORT/index.html --out page-report.json
Automated: scripts/run_tests.sh tests/skills/test_web_live_smoke.py -q.