crawlfix.ai
Sign inRun free scan
scanner-first · ai-enhanced

Find the JavaScript SEO problems your normal crawler misses.

Crawlfix compares your raw HTML against the fully rendered DOM, detects JavaScript SEO + accessibility issues, and gives your developer or AI coding agent exact repair instructions.

No card required · scan one URL in ~30 seconds
built forNext.jsReactVueNuxtSvelteKitAngularRemix
Before JS
what the crawler gets first
After hydration
what the user actually sees
crawlfix.ai/scan/new
ready
Free scan · no card required
Scan any web app

We'll fetch your raw HTML, render it in real Chromium, and diff the two.

Try:
SEO + accessibility audit · ~30 seconds
The gap

Your site looks perfect in a browser. The first HTML response tells a different story.

Many JavaScript-heavy sites send weak, empty, delayed, or unstable HTML to crawlers. Generic SEO tools rarely inspect the difference. Crawlfix focuses on what the server sends first vs. what the browser shows after JavaScript runs.

EMPTY_SHELL
Empty app shell
Raw HTML is mostly a div with a script tag. Nothing meaningful for crawlers to index before JavaScript runs.
META_HYDRATE
Title / meta changes after hydration
Initial response says "Loading…". The real title only appears once your client-side router resolves.
LINKS_CSR
Client-only internal links
Your nav and product links are bound by JS. Raw HTML lists 11; rendered DOM lists 58.
SCHEMA_CSR
Client-only JSON-LD
Product, FAQ, or Article schema gets injected after hydration. Most crawlers don't wait.
MAIN_DELAYED
Delayed main content
<main> is empty until a fetch resolves. The first HTML response carries a spinner, not your page.
BUNDLE_PRESSURE
JavaScript bundle pressure
Render-blocking scripts and large JS bundles push the page beyond what crawlers comfortably wait for.
INDEX_FLIP
Indexability changes after render
Pages appear indexable in raw HTML but a useEffect adds noindex once a state condition resolves.
CANONICAL_DRIFT
Canonical / noindex instability
Canonical or robots tags change between raw and rendered HTML, sending mixed signals to crawlers.
Who it's for

A rendering diagnostic, not a rank tracker.

Crawlfix isn't keyword research, backlink tracking, or rank tracking. It's a JavaScript rendering diagnostic with an AI-agent repair-instruction layer for teams that ship SPA-style sites.

Frontend developers (any framework)
Catch SSR/SSG slips and hydration drift before they ship.
Indie SaaS founders
See whether your launch page actually indexes.
Technical SEO consultants
Diagnostics your generic crawler can't do.
SEO & web agencies
Hand clients a real fix plan, not a checklist.
Startup growth teams
Stop losing organic traffic to hydration bugs.
Teams using AI coding agents
Feed Claude Code or Cursor real audit evidence.
How it works

A scanner that ends in a fix, not a PDF.

Five steps. The scanner finds the problem. The report explains it. The MCP hands evidence to your AI. Your AI ships the change. Crawlfix verifies the result.

  1. 01
    Crawl raw HTML
    Fetch the initial HTML before JavaScript runs. Capture status, headers, title, meta, robots, canonical, links, and visible text — exactly what a basic crawler would see.
    $ GET / HTTP/1.1 → status 200 · 421 words · 11 internal links
  2. 02
    Render with Chromium
    Load the page in a real headless browser, wait for hydration to settle, then capture the final DOM, metadata, links, schema, console events, and a screenshot.
    $ chromium · waitFor: networkidle + 800ms post-hydrate · 2.41 s
  3. 03
    Compare & detect
    Diff raw against rendered. Detect unstable or client-only SEO signals — title swaps, schema drift, indexability flips, missing links, late content.
    $ diff: title=changed · canonical=changed · links +47 · schema +CSR
  4. 04
    Generate fix instructions
    Produce prioritized issues with evidence, framework-specific fix recipes, AI-agent prompts, and explicit acceptance criteria. Your dev or your AI does the edits.
    $ issues=12 · recipe: app-router/title · accept: rawTitle === rendered
  5. 05
    Verify on preview
    After your team or your AI agent ships a preview, Crawlfix rescans and reports whether each issue is fixed, partially fixed, or still failing.
    $ verify://acme-saas-pr-184.vercel.app · 9/12 fixed · 2 partial · 1 failing
What it checks

Every signal a crawler reads, then again after JavaScript settles.

Crawlfix runs the same page twice — once as raw HTML, once after Chromium hydrates it — and surfaces every place those two views disagree.

Raw vs rendered
  • Raw HTML content
  • Rendered DOM content
  • H1 / heading hierarchy in raw vs rendered
  • Internal link visibility — raw vs rendered count
  • JSON-LD / schema in raw vs rendered
  • Visible text length and reading order
Hydration stability
  • Title changes after hydration
  • Meta description drift
  • Canonical drift
  • Robots / noindex flips
  • Indexability change after render
  • Client-only navigation patterns
Render & performance
  • Empty app shell detection
  • Delayed main content
  • JavaScript bundle pressure
  • LCP candidate estimate (lab)
  • Console / render errors
  • Failed network requests
AI / LLM hygiene
  • AI / LLM visibility hygiene
  • llms.txt visibility check (rolling out)
  • Framework detection (Next.js, Nuxt, …)
  • Routing pattern detection (App / Pages / SPA)
  • Server-render coverage estimate
  • Stable metadata fingerprint
Surface security
  • Security header audit (CSP, HSTS, X-Frame-Options)
  • Secret / API key pattern scan in HTML & JS
  • Sensitive file exposure probing (.env, .git, backups)
  • Mixed content detection on HTTPS pages
  • Source map public exposure check
  • Server version & X-Powered-By fingerprint leak
Frameworks supported:Next.jsReact SPAVueNuxtSvelteKitAngularRemixAstro IslandsCustom JS apps
Free scan vs full scan

A diagnosis preview, then a full technical report and fix plan.

The free scan tells you whether you have a rendering SEO problem. The full scan gives your developer or your AI coding agent everything they need to fix it.

Free scan
Diagnosis preview
$0

For a quick read on whether your site has a JavaScript rendering SEO problem. No card required.

  • Overall SPA SEO risk score
  • Rendered screenshot
  • Raw vs rendered summary
  • Top 3 detected issues
  • Basic metadata check
  • Basic indexability check
  • Basic heading check
  • Internal link count comparison
  • Short verdict
Run free scan
recommended
Full scan
Technical report + fix plan

Everything your developer or AI coding agent needs to fix the rendering SEO problem and verify the result on a preview deploy.

  • All detected issues
  • Exact raw / rendered evidence per issue
  • Complete metadata diff
  • Full internal link visibility report
  • Full schema visibility report
  • JavaScript rendering risk analysis
  • Developer-ready fix instructions
  • Framework-specific repair recipes
  • Acceptance criteria per issue
  • AI-agent repair prompt
  • Report history & JSON export
  • API access (eligible plans)
  • MCP access (eligible plans)
  • Verification scans
See plans
Example report

What a real Crawlfix report looks like.

Pulled from a public scan of a Next.js pricing page. Names anonymized.

Verdict
High JavaScript SEO risk
72/100
acme-saas.app/pricing · scanned 2 hours ago · framework: Next.js (App Router)
Top issues
  1. 01Main content appears mostly after JavaScript rendering
  2. 02The page title changes after hydration
  3. 03Several internal links are missing from the raw HTML
  4. 04JSON-LD schema appears only after client rendering
  5. 05Canonical tag changed after hydration
Full report includes 12 issues with evidence + fix plan.Open report
Highissue · TITLE_HYDRATION
issue 02 of 12
Title changes after hydration
Evidence
raw HTML <title>
— Loading…
rendered DOM <title>
+ Pricing — Acme SaaS
changed after: 1.14 s · client component path: app/pricing/PriceClient.tsx:42
Why it matters

SEO-critical metadata should be stable in the initial server-rendered HTML. Crawlers, link parsers, social previews, and many AI agents process the first HTML response before JavaScript finishes — they will record “Loading…” instead of your title.

Recommended fix · Next.js App Router
// app/pricing/page.tsx
export const metadata = {
  title: "Pricing — Acme SaaS",
  description: "Simple, predictable pricing.",
};

// Avoid setting document.title from a "use client" component.
// Move route metadata to the server-rendered page or layout file.
Acceptance criteria
  • Raw HTML contains the final title
  • Rendered title matches raw title
  • No client-side title mutation occurs after hydration
recipe · app-router/route-metadata · v3
MCP · AI coding agents

Let your AI coding agent read the audit.

Crawlfix MCP connects your account to Claude Code, Cursor, ChatGPT, Windsurf, and custom agents. Your AI edits the code. Crawlfix provides the truth.

claude-code · ~/repos/acme-saas
you Use my Crawlfix MCP. Read the latest scan for this site and fix the highest-priority SEO issue in this repo.
claude Calling crawlfix.get_latest_scan
       Found scan 0xA1F2 for acme-saas.app/pricing. Risk: high (72).
       Calling crawlfix.get_issues & get_fix_recipe
       Top issue: TITLE_HYDRATION. Recipe: app-router/route-metadata.
       Editing app/pricing/page.tsx, removing document.title from PriceClient.tsx.
you Verify on acme-saas-pr-184.vercel.app.
claude Verified. Raw <title> now matches rendered. 1/1 fixed.
Claude CodeCursorChatGPTWindsurfCustom agents
MCP tools your AI can call
  • crawlfix.get_latest_scanPull the most recent scan for the active site.
  • crawlfix.list_scansEnumerate scans with filters and pagination.
  • crawlfix.get_scan_summaryRisk score, framework, top categories.
  • crawlfix.get_issuesAll issues for a scan, sorted by priority.
  • crawlfix.get_issue_evidenceRaw vs rendered evidence for one issue.
  • crawlfix.get_fix_recipeFramework-specific repair instructions.
  • crawlfix.get_agent_promptA ready-to-paste prompt for the AI agent.
  • crawlfix.verify_fix_against_previewRescan a preview URL and report status.
Crawlfix MCP is read-only and instruction-first by default. It does not need production write access to your codebase.
End-to-end workflow
  1. 01User scans their site in Crawlfix.
  2. 02Crawlfix finds rendering SEO issues.
  3. 03User opens Cursor, Claude Code, ChatGPT, Windsurf, or another agent.
  4. 04User asks their AI to use Crawlfix MCP.
  5. 05AI reads scan evidence and fix recipe.
  6. 06AI edits the code locally.
  7. 07User deploys a preview.
  8. 08AI asks Crawlfix to verify the preview.
  9. 09Crawlfix rescans and confirms the fix.
API

Same scan engine. Programmatic access.

Run scans from CI, schedule them on a cron, or wire them into your own AI agent. The API surface is intentionally small.

  • CI/CD SEO checks
    Block PRs that regress raw HTML coverage.
  • Agency reporting
    Pull scan data into client dashboards.
  • Internal dashboards
    Track rendering health across teams.
  • Pre-deployment checks
    Scan a preview before merging to main.
  • Scheduled monitoring
    Watch for hydration regressions over time.
  • Custom AI agent workflows
    Plumb scans into your own LLM tooling.
crawlfix.ai/api/v1REST · JSON
  • POST/api/v1/scansStart a new scan
  • GET/api/v1/scans/{scan_id}Scan status + summary
  • GET/api/v1/scans/{scan_id}/issuesAll detected issues
  • GET/api/v1/scans/{scan_id}/reportFull report (JSON)
  • POST/api/v1/scans/{scan_id}/verifyVerify on preview URL
Verification scans

A scanner that closes the loop.

Crawlfix doesn't just report problems. After your developer or AI coding agent ships a preview, Crawlfix rescans and reports exactly what's fixed.

Original issue
Title changed after hydration
raw
— Loading…
rendered
+ Pricing — Acme SaaS
scan 0xA1F2 · production · 2h ago
Verification result
Passed
Fixed
  • Raw HTML now contains the final title
  • Rendered title matches raw title
  • No client-side title mutation after hydration
verify · acme-saas-pr-184.vercel.app · 38s
Fixed Partially fixed Still failing
Pricing

Free for diagnosis. Paid for the fix plan.

The free preview is enough to know whether your site has a JavaScript rendering problem. Paid plans unlock evidence, fix recipes, MCP, and verification.

Free
$0
no card required

1 free scan to see whether you have a problem.

  • 1 free scan preview
  • Top 3 issues
  • Rendered screenshot
  • Raw vs rendered summary
  • Risk score + verdict
Run free scan
Starter
$19/mo
for solo devs and indie founders

Full reports for one site you actively work on.

  • 10 full scans / month
  • 1 domain
  • Full reports & evidence
  • Scan history
  • JSON export
Start with Starter
recommended
Pro
$49/mo
for product teams shipping with AI agents

Verification, MCP, and scheduled scans across a small fleet.

  • 50 full scans / month
  • 5 domains
  • Read-only API
  • MCP access
  • Weekly scheduled scans
  • Verification scans
  • Priority queue
Choose Pro
Agency
$149/mo
for agencies and consultancies

Multi-domain reporting, monitoring, and team access.

  • 250 scans / month
  • 50 domains
  • Team access
  • Client reports
  • API + MCP
  • Scheduled monitoring
  • Priority queue
Choose Agency
Credit packs and higher-volume plans available · talk to us
Honest limitations

What Crawlfix is not.

A short list, on purpose. We'd rather you trust the things we do say.

Not a replacement for Search Console
Crawlfix is a rendering diagnostic. Search Console shows how Google sees and reports your site over time.
No ranking guarantees
We do not, will not, and cannot promise rankings. Anyone who does is selling you something else.
Lab estimates ≠ field Core Web Vitals
LCP candidate analysis is a lab signal. Real user CWV requires field data from CrUX or RUM.
Human review still recommended
AI-generated fix recipes should be reviewed before production deploys, especially for routing or metadata changes.
Read-only by default
Crawlfix MCP and API do not need write access to your codebase. Your developer or your AI does the editing.
Scanner-first
The scanner finds the problem. The AI helps explain and fix it. We don't dress one up as the other.
FAQ

Direct answers, no marketing detours.

No. The free scan preview does not require a card.
scan one URL · ~30 s

See what crawlers may be missing.

Run a free scan and find out whether your JavaScript app is hiding SEO-critical content from crawlers and AI agents.

No card required · or view example report