Audit mobile-friendliness of a page from the PageSnapshot — verify the viewport meta, no horizontal-scroll/fixed-width layouts, adequate tap targets, legible base font, and mobile/desktop content parity — and generate the viewport meta when missing.
Audit mobile-friendliness of a page from the PageSnapshot — verify the viewport meta, no horizontal-scroll/fixed-width layouts, adequate tap targets, legible base font, and mobile/desktop content parity — and generate the viewport meta when missing.
Module M7b.
Feeds the Search SEO score.
Similar popular skills
Related neighbors and high-traction skills in the same topics — useful to compare before installing.
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Claude CodeNot declared
CursorNot declared
CodexNot declared
GitHub CopilotNot declared
WindsurfNot declared
Gemini CLINot declared
ClineNot declared
OpenCodeNot declared
Repository health
Stars57
LicenseLICENSE
Default branchmain
Open issues0
Status
Active
Skill metadata
Parsed from SKILL.md frontmatter.
Allowed toolsRead, Grep, Glob, WebFetch, Bash
Package contents
Files included with this skill beyond the listing page.
skill mdSKILL.md5,254 B
docsSUMMARY.md311 B
History
First seen on skills.sh
First recorded snapshot · 144 installs
SKILL.md
seo-mobile (M7b)
Google indexes mobile-first: the mobile rendering of a page is the canonical one for ranking. This module checks that a page is usable on a small viewport. Layout problems that hurt mobile usability often surface as CLS — cross-check references/cwv-thresholds.md.
Inputs
Work from the PageSnapshot named in your dispatch envelope: read parsed from <rundir>/pages/<slug>.json (metas[] for the viewport tag) and parsedrendered when render.used is not none (layout/geometry checks need it); Grep pages/<slug>.html for verbatim evidence; site artifacts live in <rundir>/site/{robots.json,sitemaps.json,discovery.json}. Deterministic findings already emitted by audit.mjs are listed in <rundir>/findings.deterministic.json — do not re-emit those ids; add model-judged findings only. If invoked directly with a URL/path and no snapshot exists, first run node "${CLAUDEPLUGINROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDEPLUGINDATA}/runs" and use the printed snapshot path.
Audits
Working from the PageSnapshot (parsed_rendered when render.used is not none, else parsed):
Viewport meta: a <meta name="viewport"> exists with width=device-width and initial-scale=1. Flag missing, fixed-width (width=1024), or zoom-blocking (user-scalable=no, maximum-scale=1) values — the last also harms accessibility.
No horizontal scroll: detect fixed-width containers / large absolute widths that force the viewport wider than the device (content overflowing a ~360 px small viewport).
Tap-target size: interactive elements (links, buttons, form controls) should be large enough and spaced so adjacent targets are not easily mis-tapped.
Legible base font: body text rendered at a readable base size, not a desktop-only small size that forces pinch-zoom on mobile.
Content parity: the mobile DOM must contain the same primary content, headings, structured data, and links as desktop — mobile-first indexing ranks what is in the mobile render, so hidden/stripped mobile content is a ranking risk.
Fixes
AUTO (fixable: auto): inject <meta name="viewport" content="width=device-width, initial-scale=1"> into <head> when absent. Deterministic, additive, verifiable — emitted as a diff for fix.
ADVISORY (fixable: advisory): fixed-width/overflow layouts, tap-target sizing, base-font, and parity gaps depend on CSS, design system, and JS — high breakage risk. The tool diagnoses and prioritizes but does not auto-edit layout code. Never invent breakpoint values or pixel sizes — report observed values or leave a clearly-marked TODO for the user.
Verification
Method dom_assert: assert against the snapshot (viewport meta presence/content, computed widths, target geometry).
Reproduce the deterministic part (viewport meta presence/content) offline: node "${CLAUDEPLUGINROOT}/scripts/parse-html.mjs" --snapshot <pages/<slug>.json> (or --url <u> / --file <path>) — inspect headhygiene.viewport. Tap-target/overflow geometry is a manualreview pass over the rendered snapshot.
Tap-target and overflow checks need the rendered snapshot (computed layout). When only rawhtmlpath is available and layout cannot be resolved, status is needs_api, never a false pass.
Findings
Emit findings per schema/finding.schema.json. Examples:
M7b.viewport.missing — no viewport meta (status fail, severity 3, fixable: auto, axis search, confidence established).
Each finding: evidence.observed quotes the page (the meta tag string, the overflowing selector/width, the target geometry); verification.reproduce is the runnable command above; expected_impact is banded + confidence-tagged (no naked %).
Honesty
Mobile-friendliness is a usability baseline, not a strong positive ranking lever — a fast, well-built desktop-only site does not get a ranking boost for adding a viewport tag; it removes a usability liability. Frame fixes as removing risk, not gaining rank.
Google retired the standalone "Mobile-Friendly Test" tool and the page-experience badge; there is no single mobile-friendly ranking flag to "win." Don't ship that myth.
A present viewport meta does not prove the layout is actually responsive — confirm with the rendered snapshot, don't infer responsiveness from the tag alone.