seoskills.sh
Catalog/Technical SEO/Puppeteer JS Rendering Auditor

Puppeteer JS Rendering Auditor

Loads each URL as raw HTML and as a fully JavaScript-rendered DOM via headless Chrome, then diffs content, links, and m…

Updated

New

Use this skill

$ npx skills add seoskills.sh/puppeteer-render-auditor
Repository
seoskills.sh
GitHub stars
License
MIT

About this skill

Puppeteer JS Rendering Auditor is a Technical SEO skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves crawlability, indexing, site architecture, Core Web Vitals, and log-file analysis. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.

SKILL.md

Puppeteer JS Rendering Auditor

AGENT ROLE: Autonomous rendering-parity agent. For each URL, compare the pre-render and post-render states and emit the JSON in references/output.schema.json. Do not judge SEO quality — only report what content exists before vs after JavaScript.

OBJECTIVE

Detect content, links, and metadata that appear ONLY after JavaScript executes, because a crawler that does not render (or renders on a delay) may never index them.

INPUTS

  • urls (REQUIRED, string[]): absolute URLs to audit.
  • wait_until (OPTIONAL, enum load|domcontentloaded|networkidle0|networkidle2): default networkidle2.
  • render_timeout_ms (OPTIONAL, default 15000).
  • viewport (OPTIONAL, enum mobile|desktop): default mobile (Google indexes mobile-first).
  • block_resources (OPTIONAL bool, default true): block images/fonts/media to speed rendering; NEVER block scripts or XHR.

AUTHENTICATION / RUNTIME

  • No external API key. REQUIRES a headless Chromium.
    • IF puppeteer is installed THEN use its bundled Chromium.
    • ELSE IF env PUPPETEER_EXECUTABLE_PATH is set THEN launch that binary.
    • ELSE STOP error.code="NO_CHROMIUM": "Install puppeteer or set PUPPETEER_EXECUTABLE_PATH to a Chrome/Chromium binary."
  • Launch flags MUST include --no-sandbox --disable-gpu in containerized environments.

EXPECTED TOOL CALLS (per URL)

  1. RAW: fetch(url) (or page.goto with JS disabled) → capture raw_html.
  2. RENDERED: page.goto(url, {waitUntil, timeout})page.content()rendered_html.
  3. Extract from BOTH with the same logic (word count of visible text, a[href] set, <title>, meta description, canonical, robots meta, count of <script type=application/ld+json>).

PROCEDURE (deterministic, per URL)

STEP 1 — Fetch raw HTML. IF non-200 THEN record {url, status, error:"NON_200"} and continue to next URL. STEP 2 — Render with Puppeteer. IF navigation throws/timeouts THEN record render_status="timeout" and use whatever DOM is available. STEP 3 — Compute deltas:

  • text_delta_words = rendered_words - raw_words.
  • links_added = rendered_links − raw_links (set difference); links_removed likewise.
  • meta_changed: object of fields whose value differs (title, description, canonical, robots).
  • jsonld_added = rendered_jsonld_count − raw_jsonld_count. STEP 4 — CLASSIFY severity:
  • high IF text_delta_words > 100 OR links_added.length > 10 OR canonical/robots differ.
  • medium IF any content or ≤10 links added.
  • none IF states are equivalent (good — content is in raw HTML). STEP 5 — EMIT per URL; overall status="ok".

RATE LIMITS & ERROR HANDLING

  • Concurrency: render at most 3 pages in parallel; reuse one browser instance, one page per task, ALWAYS page.close() in a finally block to avoid leaks.
  • Per-URL failure is isolated — never abort the batch for one bad URL.
  • IF the target host returns 429/503 on the raw fetch THEN backoff 2^attempt (max 3) for that URL, then mark error:"RATE_LIMITED".
  • Honor robots.txt: IF a URL is disallowed for the default UA THEN skip with skipped:"robots_disallow" unless respect_robots=false is explicitly passed.

MISSING / INSUFFICIENT DATA

  • IF rendered_html equals raw_html byte-for-byte THEN severity="none", note="no client-side rendering detected".
  • Never infer indexation status; only report the observable render delta.

OUTPUT

One JSON object per references/output.schema.json. No prose.

FILES

  • scripts/render_audit.js — Puppeteer reference implementation (raw vs rendered diff).
  • references/output.schema.json — output contract.

Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.

Embed a badge

seoskills.sh install badge

More in Technical SEO

Technical SEOaddyosmani/web-quality-skills

seo

Optimize for search engine visibility and ranking. Use when asked to "improve SEO", "optimize for search", "fix meta tags", "add structured data", "sitemap optimization", or "search engine optimization".

45.4K installs
Technical SEOaddyosmani/web-quality-skills

core-web-vitals

Optimize Core Web Vitals (LCP, INP, CLS) for better page experience using field and lab evidence. Use when asked to "improve Core Web Vitals", "fix LCP", "reduce CLS", "optimize INP", "page experience optimization", or "fix layout shifts".

25.8K installs
Technical SEOjackwener/opencli

opencli-browser-sitemap

Use when driving a website with opencli browser and sitemap context is available, requested, or needed to avoid blind navigation. Guides agents to consume site sitemap files lazily, choose adapter/browser fallback paths, resume from state signatures, and mark stale sitemap entries without trusting them over live browser state.

6.2K installs
Technical SEOagricidaniel/claude-seo

seo-sitemap

Analyze existing XML sitemaps or generate new ones with industry templates. Validates format, URLs, and structure. Use when user says "sitemap", "generate sitemap", "sitemap issues", or "XML sitemap".

5.8K installs
Technical SEOagricidaniel/claude-seo

seo-technical

Technical SEO audit across 9 categories: crawlability, indexability, security, URL structure, mobile, Core Web Vitals, structured data, JavaScript rendering, and IndexNow protocol. Use when user says "technical SEO", "crawl issues", "robots.txt", "Core Web Vitals", "site speed", or "security headers".

5.6K installs
Technical SEOagricidaniel/claude-seo

seo-page

Deep single-page SEO analysis covering on-page elements, content quality, technical meta tags, schema, images, and performance. Use when user says "analyze this page", "check page SEO", "single URL", "check this page", "page analysis", or provides a single URL for review.

5.5K installs