Seo crawl render
Fetch a page (or local files) and build the shared PageSnapshot every audit module reads — raw HTML, rendered DOM when a render MCP is available, response headers, status/redirect chain, and site artifacts (robots.txt, sitemaps, llms.txt). Decides whether JavaScript rendering is needed and records the data tier.From its SKILL.md
npx -y skills add Hainrixz/claude-seo-ai --skill seo-crawl-renderAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- fetches URLsInstructs the agent to fetch 3 URLs, including robots.txt and 2 more.
SKILL.md
2.6 KB, 574 tokens by cl100k_base, as published. Nobody here has run it
seo-crawl-render
Produces ONE PageSnapshot consumed by all other skills. Building it once is what makes the offline (Tier 0) audit possible.
PageSnapshot shape
{
target: { kind: "url"|"path", value },
status_chain: [ {url, status, location?} ], // redirects, final status
headers: { ... }, // final response headers (incl. X-Robots-Tag, content-type, hreflang Link)
raw_html: "...", // pre-JS HTML the crawler/AI sees first
rendered_dom: "..."|null, // post-JS DOM (null if no render available)
render: { needed: bool, used: "webfetch"|"playwright"|"firecrawl"|"none", confidence: "high"|"reduced" },
artifacts: { robots_txt: "..."|null, sitemaps: [...], llms_txt: "..."|null },
tier: 0|1|2
}
Acquisition
- Local path: read files directly (
Read/Glob); treat built HTML asraw_html. For framework source (Next/Nuxt/etc.), note the framework and that rendered output may differ from source. - URL: fetch with
WebFetch(HTTPS-upgrade; if it returns a cross-host redirect, re-fetch the target). Capture status chain and headers. Fetchrobots.txt, referenced sitemap(s), and/llms.txt.
Render decision
--render static→ never render.--render js→ always try to render.--render auto(default): flag CSR when the raw HTML body is near-empty, has hydration markers (__NEXT_DATA__,window.__NUXT__,data-reactroot, a single root<div id="app">), or primary content/headings/links/JSON-LD are absent fromraw_html.- If rendering is needed AND a render MCP is available (Playwright/Firecrawl — discover via tool search), get the
rendered_dom; setrender.confidence = high. - If needed but no render MCP: keep
rendered_dom = null, setrender.confidence = reduced, and emit an M4 finding: "CSR-only; audited from raw HTML; install a Playwright/Firecrawl MCP for full coverage." Never pretend you saw rendered content you didn't.
Tier
Set tier = 0 (WebFetch only), 1 (render MCP and/or PageSpeed available), 2 (Search Console / Merchant available). Downstream skills annotate findings needs_api when they require a higher tier than reached.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most marketing audience skills give in 574 tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- Build exactly one PageSnapshot object
- Fetch URLs using WebFetch with HTTPS upgrade
- Re-fetch after cross-host redirects
- Never render when render is set to static
- Always render when render is set to js
- Flag CSR for near-empty raw HTML or hydration markers
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.