Skip to content
SCANLYFIXBeta

[ Ship it.Then actually check it. ]

Paste a URL. In under a minute, get 63 security, SEO, and AEO checks — each with a copy-paste fix prompt for your AI editor.

Free to scan. An account opens the findings.

Read the checks
[ 01 ] The reportScroll ↓

[ 01 ] The report

This is what comes back

Not a mockup — the components below are the report's own, rendered from a recorded scan of example.com. A screenshot would go stale; this cannot drift from what a visitor gets, because it is what a visitor gets.

example.com

HTTP
200
Checks
63
Duration
919 ms
Engine
1.8.0
87
Security
39
SEO
85
AI answer engines
100
Performance
100
Accessibility
97
Compliance
100

Worst findings first

high

Missing Content-Security-Policy

security.headers.csp

No CSP header or meta tag is set, so any injected script runs with full access to the page — CSP is the main defence-in-depth layer against XSS.

Fix: Add a Content-Security-Policy header to every HTML response. Start strict (default-src 'self') and loosen only for origins the site really uses.

high

Site is also reachable over plain HTTP

security.tls.https-redirect

http:// serves content (HTTP 200) instead of redirecting. Users and links that start on http never reach the encrypted site, and stay fully interceptable.

Observed

status
200

Fix: 301-redirect all http:// traffic to https:// and add HSTS once that works.

medium

Missing Strict-Transport-Security

security.headers.hsts

Without HSTS the browser will still try plain HTTP on direct visits and typed URLs, leaving users open to SSL-stripping on hostile networks.

Fix: Send Strict-Transport-Security: max-age=31536000; includeSubDomains on all HTTPS responses.

…and 17 more, grouped by pillar.

A real scan of example.com, recorded 2026-08-26. Overall 87 looks healthy; the security pillar underneath it is 39.

[ 02 ] Coverage

63 checks, six pillars, one request

One fetch builds a shared picture of the page — headers, HTML, cookies, TLS, DNS, robots.txt — and every check is a pure function over it. That is why a full scan costs your server one page view.

  • Security

    27

    Can a stranger read, hijack or impersonate this site?

    • Content-Security-Policy
    • Strict-Transport-Security
    • Clickjacking protection (X-Frame-Options / frame-ancestors)
    • X-Content-Type-Options
    • +23 more
  • SEO

    17

    Can a search engine crawl, understand and rank these pages?

    • Indexing directives
    • robots.txt
    • XML sitemap
    • Page title
    • +13 more
  • AI answer engines

    8

    Can an answer engine read, resolve and cite this page?

    • Server-rendered content
    • AI crawler access
    • llms.txt
    • Entity schema
    • +4 more
  • Performance

    4

    How long does this take on a real phone, on a real network?

    • Response compression
    • Asset caching
    • Image formats
    • Core Web Vitals
  • Accessibility

    4

    Can someone using a keyboard or a screen reader get through it?

    • Image alt text
    • Form labels
    • Link text
    • Accessibility audit (axe-core)
  • Compliance

    3

    Does anything run before the visitor agreed to it?

    • Tracking before consent
    • Consent mechanism
    • Privacy policy link

[ 03 ] Evidence

We show you the value. Not our opinion of it.

Every finding carries the raw observation behind it — the header, the record, the certificate, the response code. Nothing is inferred, and nothing is a generic best-practice bullet dressed up as a result.

The claim

DMARC record has no rua= reporting address

The policy is p=reject, so receivers are acting on failures — but with no rua= address the aggregate reports go nowhere. Legitimate mail that starts failing is quarantined with no signal to anyone.

security.email.dmarc

Observed

name
_dmarc.example.com
record
v=DMARC1;p=reject;sp=reject;adkim=s;aspf=s

Read it yourself: dig +short TXT _dmarc.example.com returns the same string. Every finding in the report can be re-checked this way.

[ 04 ] Output

It ends in a fix, not a PDF.

One prompt for the whole report, grouped by where the change is actually made — response headers in one edit, DNS records marked as not-code, page markup in the shared template. Paste it into Claude Code, Cursor, or your own agent.

fix-prompt.md

excerpt

Fix the issues below on example.com. The stack could not be
identified from the response, so confirm where response headers and page
templates live before editing.

15 issues, grouped by where the change is made. Work through the sections in
order; within a section every change lands in the same place, so make them as
one edit.

## 1. Response headers

Set all of these in wherever response headers are set for this site: the web
server config, the CDN, or the framework's header configuration.

### Missing Content-Security-Policy  [high]
Add a Content-Security-Policy header to all HTML responses in this project.
Configure it in the web server or framework middleware (not a meta tag). Start
from: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self';
frame-ancestors 'self'.

## 2. DNS records — NOT code

These are changed at the DNS provider for the domain. Do NOT edit any file in
the repository for them. If DNS is managed as code here (a zone file, Terraform,
Pulumi, CDK), change it there; otherwise output the exact records to add and stop.

### DMARC record has no rua= reporting address  [low]
The DMARC record at "_dmarc.example.com" is "v=DMARC1;p=reject;sp=reject;
adkim=s;aspf=s" and has no rua= tag, so nobody receives aggregate reports…
Generated for the example.com scan above. Truncated here; the real one covers all 15 actionable findings.

It knows where, not just what

“Add a Content-Security-Policy header” is not actionable until you know whether that means next.config.ts, a _headers file or an nginx block. Fourteen findings that land in the same file become one edit.

It knows the order

A leaked credential is rotated first, because every later change is wasted if the key is already in someone’s hands.

Or skip the paste entirely

ScanlyFix is also an MCP server. Point your editor at it and the agent runs the scan, reads the findings and applies the fixes without a report ever being opened.

[ 05 ] AI answer engines

Can ChatGPT actually read your site?

Search is becoming answers, and an answer engine that cannot parse a page does not rank it lower — it never mentions it. Nothing in Search Console reports the citation you did not get.

The failures are mundane and invisible: the text arrives only after JavaScript runs, the robots file blocks the crawlers by name, there is no schema tying the page to a real entity, and no date to tell a model whether any of it is still true.

8 checks in this pillar

  • Server-rendered content
  • AI crawler access
  • llms.txt
  • Entity schema
  • Answer structure
  • FAQ and HowTo schema
  • Author and date
  • Outbound citations

[ 06 ] Monitoring

Scan once, or watch it forever.

A scan is a photograph. Most of what this engine measures — a certificate, a DNS record, a header set by a deploy — changes on a day nobody was looking.

97.78% over 90 days · 2 failed checks

Illustration — the status-page component with one bad day in it. Not a customer’s data.
Uptime, from outside your network
A probe on a schedule, from somewhere that is not your own infrastructure — which is the only place an outage looks like an outage.
Certificates, before they expire
The expiry date is read on every probe and warned about with weeks to spare, not on the morning the renewal cron did not run.
A re-scan every day
Yesterday’s report is a snapshot; a deploy is what changes it. Score movement is reported against the same engine version, so the ruler never moves under the measurement.
A public status page
The strip above is a real component from a real status page, linkable during an incident.

[ 07 ] Safety

What ScanlyFix will never do

You are about to hand a security tool the address of something you own. These are the limits it is built to, not the ones it intends to keep.

Never logs in, never submits a form
A scan is a read. It requests pages the way a browser and a crawler would, and stops there — no credentials, no POST, no state changed on your side.
Never reaches a private address
Every socket resolves through a guard that validates the address at connect time, so a hostname that resolves to 127.0.0.1, a cloud metadata endpoint, or anything reserved is refused before a byte is sent. Redirects are re-checked at each hop.
Never probes a backend you have not proved you own
The two checks that touch someone else’s infrastructure — Supabase row-level security, Firebase rules — receive the capability to make that request only on a domain you have verified. A check that skips the gate does not compile.
Never reports our outage as your defect
A check that fails to complete is recorded as our error and its pillar is marked provisional. A broken instrument must never be published as a bad score.
Never moves the ruler quietly
Every scan records the engine version it was measured with — currently 1.8.0 — and nothing compares two scans across a change in it. Otherwise the day we ship new checks, every monitored site gets an email saying it got worse.
Never shows you a blurred rectangle
The free report withholds detail by not sending it, and tells you exactly what is missing: the count and the severities. A frosted panel over text the browser already has is a bluff, and the first reader to open dev tools finds out.

[ 08 ] Pricing

Every plan runs every check

All 63 checks run on every scan, free or paid. What a plan changes is how much of the report comes back — never how carefully the site was measured.

Free

₹0 / month

  • 30 scans a month
  • The 3 worst findings in full
  • Per-finding fix prompts
  • Latest scan only
  • No monitoring
  • 1 project
Start free

Pro

Everything

₹1,499 / month

  • 500 scans a month
  • Every finding in full
  • One prompt that fixes the whole site
  • Scan history and score changes
  • 25 monitored sites
  • 25 projects
See what Pro unlocks

Scanning needs no account, and the score, the pillar breakdown and every finding’s title and severity are public without one. A free account opens the worst few in full — the evidence and the fix. You always know exactly what you are missing rather than being asked to guess.

[ 09 ] Questions

Before you paste your domain

Do I need an account?

To scan, no — anyone can run one, and the score, the pillar breakdown and every finding’s title and severity are public on a shareable URL. To read the findings themselves you do: an account opens the worst of them in full, with the evidence behind each one and the fix. It is free, and there is no password to create.

Will this attack my site?

No. A scan is a read: it requests pages the way a browser and a crawler would, never logs in, never submits a form, and never changes state. The two checks that touch a backend run only on a domain you have verified you own.

How is this different from Lighthouse or an SEO audit?

Lighthouse measures one page in a browser; an SEO tool reads the markup. This reads the response — headers, TLS, cookies, DNS, robots — across 63 checks in six pillars, shows the raw value behind every claim, and ends in a prompt an AI coding agent can execute.

What is the AI answer engines pillar?

Eight checks on whether an answer engine can read, resolve and cite your page: whether the text survives without JavaScript, whether AI crawlers are allowed, whether there is schema tying the page to a real entity, and whether anything dates the content. Search Console reports none of this.

Can I run it in CI or from my editor?

Yes. There is a CLI with JSON output, and ScanlyFix is an MCP server — point Claude Code or Cursor at it and the agent runs the scan and applies the fixes itself.

Why did my score change when I did not change anything?

It should not, and the engine is built so it cannot happen silently. Every scan records the engine version it was measured with, and no feature compares two scans across a change in it. If checks were added, coverage moved — and you are told so rather than emailed that your site got worse.

What happens if a check fails?

It is recorded as our error, not your finding, and the pillar it belongs to is marked provisional. A partly broken instrument is never presented as a measurement.

Find out what yours is quietly getting wrong.

63 checks, the evidence behind every one, and a prompt that fixes them. About a second, and no account.